@vtxmacro/cli 2026.10.62 → 2026.10.63
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 +1 -1
- package/bin/vtx-service-bootstrap.js +1 -1
- package/bin/vtx.js +295 -144
- package/package.json +1 -1
package/bin/vtx-mcp.js
CHANGED
|
@@ -43,7 +43,7 @@ var init_define_VTX_PI_MODEL_POLICY = __esm({
|
|
|
43
43
|
var agent_cli_release_default;
|
|
44
44
|
var init_agent_cli_release = __esm({
|
|
45
45
|
"agent-cli-release.json"() {
|
|
46
|
-
agent_cli_release_default = { package_name: "@vtxmacro/cli", package_version: "2026.10.
|
|
46
|
+
agent_cli_release_default = { package_name: "@vtxmacro/cli", package_version: "2026.10.63", codex_package_name: "@openai/codex", codex_version: "0.155.0", copilot_sdk_package_name: "@github/copilot-sdk", copilot_sdk_version: "1.0.0-beta.8", copilot_cli_package_name: "@github/copilot", copilot_cli_version: "1.0.80", deepseek_harness_version: "0.1.1-rc.2", deepseek_harness_packages: ["@deepseek-ai/dsh-agent", "@deepseek-ai/dsh-agent-instructions", "@deepseek-ai/dsh-agent-loop", "@deepseek-ai/dsh-agent-spine-demo", "@deepseek-ai/dsh-anonymous-user-id", "@deepseek-ai/dsh-atomic-write", "@deepseek-ai/dsh-attachment", "@deepseek-ai/dsh-brand", "@deepseek-ai/dsh-code-runtime", "@deepseek-ai/dsh-credentials", "@deepseek-ai/dsh-fs", "@deepseek-ai/dsh-goal", "@deepseek-ai/dsh-goal-round-driver", "@deepseek-ai/dsh-home-paths", "@deepseek-ai/dsh-invariants", "@deepseek-ai/dsh-jobs", "@deepseek-ai/dsh-jobs-local", "@deepseek-ai/dsh-launch-environment", "@deepseek-ai/dsh-llm", "@deepseek-ai/dsh-llm-deepseek", "@deepseek-ai/dsh-llm-retry", "@deepseek-ai/dsh-output-retention", "@deepseek-ai/dsh-sandbox", "@deepseek-ai/dsh-sandbox-policy", "@deepseek-ai/dsh-scope", "@deepseek-ai/dsh-session", "@deepseek-ai/dsh-session-checkpoint-policy", "@deepseek-ai/dsh-session-persistence", "@deepseek-ai/dsh-session-persistence-jsonl", "@deepseek-ai/dsh-session-projection", "@deepseek-ai/dsh-session-title", "@deepseek-ai/dsh-settings", "@deepseek-ai/dsh-shell", "@deepseek-ai/dsh-shell-env", "@deepseek-ai/dsh-skill", "@deepseek-ai/dsh-skill-filesystem", "@deepseek-ai/dsh-subprocess", "@deepseek-ai/dsh-system-prompt", "@deepseek-ai/dsh-timeout", "@deepseek-ai/dsh-tool-bash", "@deepseek-ai/dsh-tool-goal", "@deepseek-ai/dsh-tool-jobs", "@deepseek-ai/dsh-tool-skill", "@deepseek-ai/dsh-tools", "@deepseek-ai/dsh-typert-protocol", "@deepseek-ai/dsh-user-approval"], deepseek_cordis_package_name: "@deepseek-ai/cordis", deepseek_cordis_version: "4.0.1", deepseek_support_packages: { "@deepseek-ai/cordis-plugin-timer": "1.1.3" }, platforms: { "linux-x64": { package_name: "@openai/codex-linux-x64", target: "x86_64-unknown-linux-musl", binary_name: "codex", sha256: "660e159a49e823ac8e5986cb238f73158ce4b957d40d9292f8de90862644b501" }, "win32-x64": { package_name: "@openai/codex-win32-x64", target: "x86_64-pc-windows-msvc", binary_name: "codex.exe", sha256: "e4c11374bd9de8ad5c3b7617fd4654bb7839901edb0863f9930666863c7a021b" } }, pi_coding_agent_package_name: "@earendil-works/pi-coding-agent", pi_ai_package_name: "@earendil-works/pi-ai", pi_version: "0.85.1", pi_support_packages: ["@earendil-works/pi-agent-core", "@earendil-works/pi-telemetry", "@earendil-works/pi-tui", "@earendil-works/chord"], grok_version: "1.0.30", grok_platforms: { "linux-x64": { package_name: "@xai-official/grok-linux-x64", binary_name: "grok", sha256: "504dd6546ab991b75d36698242875ce461489cd1f8cd84285873cb55bd5c7d54" }, "win32-x64": { package_name: "@xai-official/grok-win32-x64", binary_name: "grok.exe", sha256: "48736d1a4342a801ea26d0ecde4c516b653f791399065adaa55973f83abd8867" } } };
|
|
47
47
|
}
|
|
48
48
|
});
|
|
49
49
|
|
|
@@ -14,7 +14,7 @@ import { dirname as dirname4, relative as relative4, resolve as resolve4 } from
|
|
|
14
14
|
import { fileURLToPath } from "node:url";
|
|
15
15
|
|
|
16
16
|
// agent-cli-release.json
|
|
17
|
-
var agent_cli_release_default = { package_name: "@vtxmacro/cli", package_version: "2026.10.
|
|
17
|
+
var agent_cli_release_default = { package_name: "@vtxmacro/cli", package_version: "2026.10.63", codex_package_name: "@openai/codex", codex_version: "0.155.0", copilot_sdk_package_name: "@github/copilot-sdk", copilot_sdk_version: "1.0.0-beta.8", copilot_cli_package_name: "@github/copilot", copilot_cli_version: "1.0.80", deepseek_harness_version: "0.1.1-rc.2", deepseek_harness_packages: ["@deepseek-ai/dsh-agent", "@deepseek-ai/dsh-agent-instructions", "@deepseek-ai/dsh-agent-loop", "@deepseek-ai/dsh-agent-spine-demo", "@deepseek-ai/dsh-anonymous-user-id", "@deepseek-ai/dsh-atomic-write", "@deepseek-ai/dsh-attachment", "@deepseek-ai/dsh-brand", "@deepseek-ai/dsh-code-runtime", "@deepseek-ai/dsh-credentials", "@deepseek-ai/dsh-fs", "@deepseek-ai/dsh-goal", "@deepseek-ai/dsh-goal-round-driver", "@deepseek-ai/dsh-home-paths", "@deepseek-ai/dsh-invariants", "@deepseek-ai/dsh-jobs", "@deepseek-ai/dsh-jobs-local", "@deepseek-ai/dsh-launch-environment", "@deepseek-ai/dsh-llm", "@deepseek-ai/dsh-llm-deepseek", "@deepseek-ai/dsh-llm-retry", "@deepseek-ai/dsh-output-retention", "@deepseek-ai/dsh-sandbox", "@deepseek-ai/dsh-sandbox-policy", "@deepseek-ai/dsh-scope", "@deepseek-ai/dsh-session", "@deepseek-ai/dsh-session-checkpoint-policy", "@deepseek-ai/dsh-session-persistence", "@deepseek-ai/dsh-session-persistence-jsonl", "@deepseek-ai/dsh-session-projection", "@deepseek-ai/dsh-session-title", "@deepseek-ai/dsh-settings", "@deepseek-ai/dsh-shell", "@deepseek-ai/dsh-shell-env", "@deepseek-ai/dsh-skill", "@deepseek-ai/dsh-skill-filesystem", "@deepseek-ai/dsh-subprocess", "@deepseek-ai/dsh-system-prompt", "@deepseek-ai/dsh-timeout", "@deepseek-ai/dsh-tool-bash", "@deepseek-ai/dsh-tool-goal", "@deepseek-ai/dsh-tool-jobs", "@deepseek-ai/dsh-tool-skill", "@deepseek-ai/dsh-tools", "@deepseek-ai/dsh-typert-protocol", "@deepseek-ai/dsh-user-approval"], deepseek_cordis_package_name: "@deepseek-ai/cordis", deepseek_cordis_version: "4.0.1", deepseek_support_packages: { "@deepseek-ai/cordis-plugin-timer": "1.1.3" }, platforms: { "linux-x64": { package_name: "@openai/codex-linux-x64", target: "x86_64-unknown-linux-musl", binary_name: "codex", sha256: "660e159a49e823ac8e5986cb238f73158ce4b957d40d9292f8de90862644b501" }, "win32-x64": { package_name: "@openai/codex-win32-x64", target: "x86_64-pc-windows-msvc", binary_name: "codex.exe", sha256: "e4c11374bd9de8ad5c3b7617fd4654bb7839901edb0863f9930666863c7a021b" } }, pi_coding_agent_package_name: "@earendil-works/pi-coding-agent", pi_ai_package_name: "@earendil-works/pi-ai", pi_version: "0.85.1", pi_support_packages: ["@earendil-works/pi-agent-core", "@earendil-works/pi-telemetry", "@earendil-works/pi-tui", "@earendil-works/chord"], grok_version: "1.0.30", grok_platforms: { "linux-x64": { package_name: "@xai-official/grok-linux-x64", binary_name: "grok", sha256: "504dd6546ab991b75d36698242875ce461489cd1f8cd84285873cb55bd5c7d54" }, "win32-x64": { package_name: "@xai-official/grok-win32-x64", binary_name: "grok.exe", sha256: "48736d1a4342a801ea26d0ecde4c516b653f791399065adaa55973f83abd8867" } } };
|
|
18
18
|
|
|
19
19
|
// lib/runtime-policy.generated.json
|
|
20
20
|
var runtime_policy_generated_default = {
|
package/bin/vtx.js
CHANGED
|
@@ -122,7 +122,7 @@ var init_routing = __esm({
|
|
|
122
122
|
var agent_cli_release_default;
|
|
123
123
|
var init_agent_cli_release = __esm({
|
|
124
124
|
"agent-cli-release.json"() {
|
|
125
|
-
agent_cli_release_default = { package_name: "@vtxmacro/cli", package_version: "2026.10.
|
|
125
|
+
agent_cli_release_default = { package_name: "@vtxmacro/cli", package_version: "2026.10.63", codex_package_name: "@openai/codex", codex_version: "0.155.0", copilot_sdk_package_name: "@github/copilot-sdk", copilot_sdk_version: "1.0.0-beta.8", copilot_cli_package_name: "@github/copilot", copilot_cli_version: "1.0.80", deepseek_harness_version: "0.1.1-rc.2", deepseek_harness_packages: ["@deepseek-ai/dsh-agent", "@deepseek-ai/dsh-agent-instructions", "@deepseek-ai/dsh-agent-loop", "@deepseek-ai/dsh-agent-spine-demo", "@deepseek-ai/dsh-anonymous-user-id", "@deepseek-ai/dsh-atomic-write", "@deepseek-ai/dsh-attachment", "@deepseek-ai/dsh-brand", "@deepseek-ai/dsh-code-runtime", "@deepseek-ai/dsh-credentials", "@deepseek-ai/dsh-fs", "@deepseek-ai/dsh-goal", "@deepseek-ai/dsh-goal-round-driver", "@deepseek-ai/dsh-home-paths", "@deepseek-ai/dsh-invariants", "@deepseek-ai/dsh-jobs", "@deepseek-ai/dsh-jobs-local", "@deepseek-ai/dsh-launch-environment", "@deepseek-ai/dsh-llm", "@deepseek-ai/dsh-llm-deepseek", "@deepseek-ai/dsh-llm-retry", "@deepseek-ai/dsh-output-retention", "@deepseek-ai/dsh-sandbox", "@deepseek-ai/dsh-sandbox-policy", "@deepseek-ai/dsh-scope", "@deepseek-ai/dsh-session", "@deepseek-ai/dsh-session-checkpoint-policy", "@deepseek-ai/dsh-session-persistence", "@deepseek-ai/dsh-session-persistence-jsonl", "@deepseek-ai/dsh-session-projection", "@deepseek-ai/dsh-session-title", "@deepseek-ai/dsh-settings", "@deepseek-ai/dsh-shell", "@deepseek-ai/dsh-shell-env", "@deepseek-ai/dsh-skill", "@deepseek-ai/dsh-skill-filesystem", "@deepseek-ai/dsh-subprocess", "@deepseek-ai/dsh-system-prompt", "@deepseek-ai/dsh-timeout", "@deepseek-ai/dsh-tool-bash", "@deepseek-ai/dsh-tool-goal", "@deepseek-ai/dsh-tool-jobs", "@deepseek-ai/dsh-tool-skill", "@deepseek-ai/dsh-tools", "@deepseek-ai/dsh-typert-protocol", "@deepseek-ai/dsh-user-approval"], deepseek_cordis_package_name: "@deepseek-ai/cordis", deepseek_cordis_version: "4.0.1", deepseek_support_packages: { "@deepseek-ai/cordis-plugin-timer": "1.1.3" }, platforms: { "linux-x64": { package_name: "@openai/codex-linux-x64", target: "x86_64-unknown-linux-musl", binary_name: "codex", sha256: "660e159a49e823ac8e5986cb238f73158ce4b957d40d9292f8de90862644b501" }, "win32-x64": { package_name: "@openai/codex-win32-x64", target: "x86_64-pc-windows-msvc", binary_name: "codex.exe", sha256: "e4c11374bd9de8ad5c3b7617fd4654bb7839901edb0863f9930666863c7a021b" } }, pi_coding_agent_package_name: "@earendil-works/pi-coding-agent", pi_ai_package_name: "@earendil-works/pi-ai", pi_version: "0.85.1", pi_support_packages: ["@earendil-works/pi-agent-core", "@earendil-works/pi-telemetry", "@earendil-works/pi-tui", "@earendil-works/chord"], grok_version: "1.0.30", grok_platforms: { "linux-x64": { package_name: "@xai-official/grok-linux-x64", binary_name: "grok", sha256: "504dd6546ab991b75d36698242875ce461489cd1f8cd84285873cb55bd5c7d54" }, "win32-x64": { package_name: "@xai-official/grok-win32-x64", binary_name: "grok.exe", sha256: "48736d1a4342a801ea26d0ecde4c516b653f791399065adaa55973f83abd8867" } } };
|
|
126
126
|
}
|
|
127
127
|
});
|
|
128
128
|
|
|
@@ -26685,6 +26685,9 @@ async function refreshInferenceCredential(options) {
|
|
|
26685
26685
|
timeoutMs: options.requestTimeoutMs
|
|
26686
26686
|
}
|
|
26687
26687
|
);
|
|
26688
|
+
if (tokens.refreshToken === credential.refresh_token) {
|
|
26689
|
+
return { accessToken: tokens.accessToken, expiresIn: tokens.expiresIn, credential, accountKey: accountKey2 };
|
|
26690
|
+
}
|
|
26688
26691
|
const rotated = validateInferenceHostCredential({
|
|
26689
26692
|
...credential,
|
|
26690
26693
|
refresh_token: tokens.refreshToken,
|
|
@@ -109129,16 +109132,19 @@ var init_protective_entry_cover = __esm({
|
|
|
109129
109132
|
claims.set(entry, order);
|
|
109130
109133
|
claimed.add(order);
|
|
109131
109134
|
};
|
|
109132
|
-
const
|
|
109135
|
+
const ended = (order) => input.ended?.has(String(order.oid)) === true;
|
|
109136
|
+
const byShape = (entry, leg) => orders.find((order) => !claimed.has(order) && !ended(order) && protectiveLiveShapeMatches({
|
|
109133
109137
|
shape: liveProtectiveOrderShape(order),
|
|
109134
109138
|
symbol: symbol2,
|
|
109135
109139
|
isLong: entry.group.isLong,
|
|
109136
109140
|
leg
|
|
109137
109141
|
}));
|
|
109138
|
-
|
|
109142
|
+
const placed = (entry) => input.placed?.has(String(entry.leg.orderId)) === true || input.placed?.has(String(knownId(entry))) === true;
|
|
109143
|
+
const own = entries.filter((entry) => !placed(entry));
|
|
109144
|
+
for (const entry of own) claim(entry, pageOrderById(orders, knownId(entry)));
|
|
109139
109145
|
const named = new Set(claimed);
|
|
109140
|
-
const leaving = new Set(input.groups.filter((group) => group.cleanupRequired === true ||
|
|
109141
|
-
const waiting =
|
|
109146
|
+
const leaving = new Set(input.groups.filter((group) => group.cleanupRequired === true || own.some((entry) => entry.group === group && knownId(entry) != null && !claims.has(entry))));
|
|
109147
|
+
const waiting = own.filter(unbound);
|
|
109142
109148
|
const unread = (entry) => input.unresolved?.has(String(entry.leg.orderId)) === true;
|
|
109143
109149
|
const staying = waiting.filter((entry) => !leaving.has(entry.group));
|
|
109144
109150
|
for (const entry of [...waiting.filter((entry2) => leaving.has(entry2.group)), ...staying.filter(unread), ...staying.filter((entry2) => !unread(entry2))]) {
|
|
@@ -109183,18 +109189,18 @@ var init_protective_entry_cover = __esm({
|
|
|
109183
109189
|
},
|
|
109184
109190
|
/**
|
|
109185
109191
|
* For a lost stop: the stop losses on the page closing the position, other
|
|
109186
|
-
* than the orders a status proved ended (`
|
|
109187
|
-
*
|
|
109188
|
-
*
|
|
109192
|
+
* than the orders a status proved ended (`ended`), those this pass placed
|
|
109193
|
+
* and those its placed stops stand for (`beside.standsFor`: counted where
|
|
109194
|
+
* they were placed, protective-placed-stops.ts), an order no leg names
|
|
109195
|
+
* whole; and, unseen, what the legs this pass could not read may still cover.
|
|
109189
109196
|
*/
|
|
109190
|
-
lostStopCover: (positionSize,
|
|
109197
|
+
lostStopCover: (positionSize, beside) => {
|
|
109191
109198
|
const isLong = positionSize > 0;
|
|
109192
109199
|
const owners = new Map([...claims].map(([entry, order]) => [order, entry]));
|
|
109193
|
-
const
|
|
109194
|
-
const onPage = orders.filter((order) => !excluded.lost.has(String(order.oid)) && !excluded.placed.has(String(order.oid)) && String(order.coin).trim().toUpperCase() === symbol2.trim().toUpperCase() && order.reduce_only && order.is_trigger && order.trigger_kind === "sl" && (isLong ? ["a", "sell"] : ["b", "buy"]).includes(String(order.side).trim().toLowerCase())).reduce((total, order) => {
|
|
109200
|
+
const onPage = orders.filter((order) => !ended(order) && input.placed?.has(String(order.oid)) !== true && beside?.standsFor(order) !== true && String(order.coin).trim().toUpperCase() === symbol2.trim().toUpperCase() && order.reduce_only && order.is_trigger && order.trigger_kind === "sl" && (isLong ? ["a", "sell"] : ["b", "buy"]).includes(String(order.side).trim().toLowerCase())).reduce((total, order) => {
|
|
109195
109201
|
const owner2 = owners.get(order);
|
|
109196
109202
|
const size = Number(order.sz);
|
|
109197
|
-
return total + (owner2 != null ?
|
|
109203
|
+
return total + (owner2 != null ? coverOf(owner2) : size > 0 ? size : 0);
|
|
109198
109204
|
}, 0);
|
|
109199
109205
|
const unseen = entries.filter((entry) => entry.leg.kind === "sl" && entry.group.isLong === isLong && !placed(entry) && input.unresolved?.has(String(entry.leg.orderId)) === true).reduce((total, entry) => total + inFlightOf(entry), 0);
|
|
109200
109206
|
return { onPage, unseen };
|
|
@@ -109205,6 +109211,88 @@ var init_protective_entry_cover = __esm({
|
|
|
109205
109211
|
}
|
|
109206
109212
|
});
|
|
109207
109213
|
|
|
109214
|
+
// lib/runtime/protective-placed-stops.ts
|
|
109215
|
+
var passPlacedStops;
|
|
109216
|
+
var init_protective_placed_stops = __esm({
|
|
109217
|
+
"lib/runtime/protective-placed-stops.ts"() {
|
|
109218
|
+
"use strict";
|
|
109219
|
+
init_define_VTX_CLAUDE_CODE_POLICY();
|
|
109220
|
+
init_define_VTX_EXO_POLICY();
|
|
109221
|
+
init_define_VTX_GROK_POLICY();
|
|
109222
|
+
init_define_VTX_PI_MODEL_POLICY();
|
|
109223
|
+
init_protective_entry_cover();
|
|
109224
|
+
init_protective_leg_evidence();
|
|
109225
|
+
init_protective_market_evidence();
|
|
109226
|
+
passPlacedStops = (symbol2) => {
|
|
109227
|
+
const stops = [];
|
|
109228
|
+
const pages = /* @__PURE__ */ new WeakMap();
|
|
109229
|
+
let pagesSeen = 0;
|
|
109230
|
+
const pageOrder = (market) => {
|
|
109231
|
+
if (!pages.has(market)) {
|
|
109232
|
+
pagesSeen += 1;
|
|
109233
|
+
pages.set(market, pagesSeen);
|
|
109234
|
+
}
|
|
109235
|
+
return pages.get(market);
|
|
109236
|
+
};
|
|
109237
|
+
const ofShape = (stop, order) => protectiveLiveShapeMatches({
|
|
109238
|
+
shape: liveProtectiveOrderShape(order),
|
|
109239
|
+
symbol: symbol2,
|
|
109240
|
+
isLong: stop.isLong,
|
|
109241
|
+
leg: stop.leg,
|
|
109242
|
+
requirePositionTpsl: false
|
|
109243
|
+
});
|
|
109244
|
+
return {
|
|
109245
|
+
/** A stop about to be sent, under its client order id: it counts at its size from now on. */
|
|
109246
|
+
add: (leg, isLong) => {
|
|
109247
|
+
const stop = {
|
|
109248
|
+
ids: [String(leg.orderId)],
|
|
109249
|
+
leg,
|
|
109250
|
+
isLong,
|
|
109251
|
+
sentMs: protectiveReadStampMs(),
|
|
109252
|
+
pagesBefore: pagesSeen,
|
|
109253
|
+
counts: true
|
|
109254
|
+
};
|
|
109255
|
+
stops.push(stop);
|
|
109256
|
+
return stop;
|
|
109257
|
+
},
|
|
109258
|
+
/** A stop never sent, or refused: it never counted. */
|
|
109259
|
+
drop: (stop) => {
|
|
109260
|
+
stops.splice(stops.indexOf(stop), 1);
|
|
109261
|
+
},
|
|
109262
|
+
/** Its answer (extractCanonicalHyperliquidOrderStateAcknowledgement): its exchange order id, and whether it filled. */
|
|
109263
|
+
answered: (stop, answer) => {
|
|
109264
|
+
stop.ids.push(answer.orderId);
|
|
109265
|
+
if (answer.state === "fulfilled") stop.counts = false;
|
|
109266
|
+
},
|
|
109267
|
+
/** Their client and exchange order ids (resolveOwnStops `placed`, which leaves them out). */
|
|
109268
|
+
ids: () => new Set(stops.flatMap((stop) => stop.ids)),
|
|
109269
|
+
/**
|
|
109270
|
+
* What they cover beside a lost stop counted on this market, and the page
|
|
109271
|
+
* orders they stand for there, which count nothing beside them
|
|
109272
|
+
* (resolveOwnStops lostStopCover).
|
|
109273
|
+
*/
|
|
109274
|
+
count: (market) => {
|
|
109275
|
+
const read = pageOrder(market);
|
|
109276
|
+
const orders = market.orders ?? [];
|
|
109277
|
+
const after = stops.filter((stop) => stop.counts && market.orders != null && read > stop.pagesBefore);
|
|
109278
|
+
const proven = (stop) => !market.viaNode || nodeAnswerProves(market.position.stateTimeMs, { hostMs: stop.sentMs });
|
|
109279
|
+
const taken = /* @__PURE__ */ new Set();
|
|
109280
|
+
for (const stop of [...after.filter((stop2) => !proven(stop2)), ...after.filter(proven)]) {
|
|
109281
|
+
const order = orders.find((candidate) => !taken.has(candidate) && ofShape(stop, candidate));
|
|
109282
|
+
if (order != null) taken.add(order);
|
|
109283
|
+
else if (proven(stop)) stop.counts = false;
|
|
109284
|
+
}
|
|
109285
|
+
const standing = after.filter((stop) => stop.counts);
|
|
109286
|
+
return {
|
|
109287
|
+
size: stops.reduce((total, stop) => total + (stop.counts ? stop.leg.size : 0), 0),
|
|
109288
|
+
standsFor: (order) => standing.some((stop) => ofShape(stop, order))
|
|
109289
|
+
};
|
|
109290
|
+
}
|
|
109291
|
+
};
|
|
109292
|
+
};
|
|
109293
|
+
}
|
|
109294
|
+
});
|
|
109295
|
+
|
|
109208
109296
|
// lib/runtime/protective-oversized-leg.ts
|
|
109209
109297
|
var OVERSIZED_LEG_GROUP_PREFIX, splitOversizedProtectiveLeg;
|
|
109210
109298
|
var init_protective_oversized_leg = __esm({
|
|
@@ -111381,6 +111469,7 @@ var init_runtime_execution = __esm({
|
|
|
111381
111469
|
init_protective_leg_evidence();
|
|
111382
111470
|
init_protective_stop_replacement();
|
|
111383
111471
|
init_protective_entry_cover();
|
|
111472
|
+
init_protective_placed_stops();
|
|
111384
111473
|
init_protective_oversized_leg();
|
|
111385
111474
|
init_protective_report_entry();
|
|
111386
111475
|
init_error_surface_contract();
|
|
@@ -115195,8 +115284,7 @@ var init_runtime_execution = __esm({
|
|
|
115195
115284
|
tp: exposure
|
|
115196
115285
|
};
|
|
115197
115286
|
const retainedGroups = expectedGroupSet.filter((group) => group.pendingEntry != null || isProtectiveReplacementJournalGroup(group));
|
|
115198
|
-
|
|
115199
|
-
const placedThisPass = /* @__PURE__ */ new Set();
|
|
115287
|
+
const placedStops = passPlacedStops(symbol2);
|
|
115200
115288
|
const unresolvedLegIds = new Set(inspectedGroups.flatMap((candidate) => candidate.legs).filter((entry) => entry.state === "unresolved").map((entry) => String(entry.leg.orderId)));
|
|
115201
115289
|
const lostOrderIds = new Set(inspectedGroups.flatMap((candidate) => candidate.legs).filter((entry) => entry.state === "terminal").flatMap(({ leg }) => [String(leg.orderId), String(lookedUp.get(String(leg.orderId)) ?? leg.orderId)]));
|
|
115202
115290
|
const statusOnlyOrders = () => inspectedGroups.flatMap((candidate) => candidate.legs).filter((entry) => entry.openOrder == null).map((entry) => ({ receivedMs: entry.statusReceivedMs ?? legsLiveSinceMs, atMs: entry.terminalStatus?.statusTimestampMs ?? entry.statusAtMs }));
|
|
@@ -115325,18 +115413,23 @@ var init_runtime_execution = __esm({
|
|
|
115325
115413
|
const market2 = reachable(sizeOf(lost.position)) ? await lost.withPage() : lost;
|
|
115326
115414
|
const positionSize = sizeOf(market2.position);
|
|
115327
115415
|
const replaceReachable = reachable(positionSize) && market2.orders != null;
|
|
115328
|
-
const
|
|
115416
|
+
const own = replaceReachable ? resolveOwnStops({
|
|
115329
115417
|
symbol: symbol2,
|
|
115330
115418
|
groups: expectedGroupSet,
|
|
115331
115419
|
orders: market2.orders ?? [],
|
|
115332
115420
|
lookedUp,
|
|
115333
|
-
unresolved: unresolvedLegIds
|
|
115334
|
-
|
|
115421
|
+
unresolved: unresolvedLegIds,
|
|
115422
|
+
placed: placedStops.ids(),
|
|
115423
|
+
ended: lostOrderIds
|
|
115424
|
+
}) : null;
|
|
115425
|
+
const placed = placedStops.count(market2);
|
|
115426
|
+
const stops = own?.lostStopCover(positionSize, placed);
|
|
115335
115427
|
const markPrice = Number(market2.position.markPrice);
|
|
115336
115428
|
evidence2 = {
|
|
115337
115429
|
positionSize,
|
|
115338
115430
|
liveStopSize: stops?.onPage ?? 0,
|
|
115339
|
-
|
|
115431
|
+
// What the legs this pass could not read may still cover, and its own re-placed stops.
|
|
115432
|
+
inFlightStopSize: (stops?.unseen ?? 0) + placed.size,
|
|
115340
115433
|
markPrice: replaceReachable && Number.isFinite(markPrice) && markPrice > 0 ? markPrice : null
|
|
115341
115434
|
};
|
|
115342
115435
|
} catch (error48) {
|
|
@@ -115349,7 +115442,7 @@ var init_runtime_execution = __esm({
|
|
|
115349
115442
|
positionSize: evidence2.positionSize,
|
|
115350
115443
|
legSize: leg.size,
|
|
115351
115444
|
otherLiveStopSize: evidence2.liveStopSize,
|
|
115352
|
-
inFlightStopSize: evidence2.
|
|
115445
|
+
inFlightStopSize: evidence2.inFlightStopSize,
|
|
115353
115446
|
sizeDecimals: request.executionContext.sizeDecimals,
|
|
115354
115447
|
triggerPrice: leg.triggerPrice,
|
|
115355
115448
|
alreadyReplaced: leg.replacedOrderId != null,
|
|
@@ -115457,8 +115550,7 @@ var init_runtime_execution = __esm({
|
|
|
115457
115550
|
}]
|
|
115458
115551
|
};
|
|
115459
115552
|
}
|
|
115460
|
-
|
|
115461
|
-
placedThisPass.add(clientOrderId);
|
|
115553
|
+
const placedStop = placedStops.add(provisionalLeg, group.isLong);
|
|
115462
115554
|
let dispatchMayHaveStarted = false;
|
|
115463
115555
|
let response;
|
|
115464
115556
|
try {
|
|
@@ -115489,8 +115581,7 @@ var init_runtime_execution = __esm({
|
|
|
115489
115581
|
} catch (error48) {
|
|
115490
115582
|
if (error48 instanceof ExchangeRejectionError) {
|
|
115491
115583
|
const rejectionProjection = projectExecutionErrorContract({ error: error48, symbol: symbol2 });
|
|
115492
|
-
|
|
115493
|
-
placedThisPass.delete(clientOrderId);
|
|
115584
|
+
placedStops.drop(placedStop);
|
|
115494
115585
|
const rejectedGroup = {
|
|
115495
115586
|
...provisionalGroup,
|
|
115496
115587
|
legs: provisionalGroup.legs.filter((candidate) => candidate.orderId !== clientOrderId)
|
|
@@ -115521,8 +115612,7 @@ var init_runtime_execution = __esm({
|
|
|
115521
115612
|
};
|
|
115522
115613
|
}
|
|
115523
115614
|
if (!dispatchMayHaveStarted) {
|
|
115524
|
-
|
|
115525
|
-
placedThisPass.delete(clientOrderId);
|
|
115615
|
+
placedStops.drop(placedStop);
|
|
115526
115616
|
const restored = transitionExactGroup(provisionalGroup, group);
|
|
115527
115617
|
if (restored && isClientRuntimeWindowHandoffBeforePlanDispatch(error48)) {
|
|
115528
115618
|
throw error48;
|
|
@@ -115578,7 +115668,7 @@ var init_runtime_execution = __esm({
|
|
|
115578
115668
|
}]
|
|
115579
115669
|
};
|
|
115580
115670
|
}
|
|
115581
|
-
|
|
115671
|
+
placedStops.answered(placedStop, acknowledgement);
|
|
115582
115672
|
const { replaceJournal: _landedJournal, ...landedLeg } = provisionalLeg;
|
|
115583
115673
|
const placedLeg = { ...landedLeg, orderId: placedOrderId };
|
|
115584
115674
|
const placedGroup = {
|
|
@@ -119838,7 +119928,7 @@ var init_browser_observability = __esm({
|
|
|
119838
119928
|
init_define_VTX_GROK_POLICY();
|
|
119839
119929
|
init_define_VTX_PI_MODEL_POLICY();
|
|
119840
119930
|
init_runtime_policy_generated2();
|
|
119841
|
-
CLIENT_SOURCE_VERSION = typeof process !== "undefined" && true && "
|
|
119931
|
+
CLIENT_SOURCE_VERSION = typeof process !== "undefined" && true && "d2a1386883f9001b5d78fa222be70d5248c4700b".trim() && "d2a1386883f9001b5d78fa222be70d5248c4700b".trim() !== "unstamped" ? "d2a1386883f9001b5d78fa222be70d5248c4700b".trim() : null;
|
|
119842
119932
|
listenersInstalled = false;
|
|
119843
119933
|
state = {
|
|
119844
119934
|
loadedAtMs: Date.now(),
|
|
@@ -130766,7 +130856,7 @@ var init_provider_client = __esm({
|
|
|
130766
130856
|
});
|
|
130767
130857
|
|
|
130768
130858
|
// lib/runtime/runtime-prompt-steps.ts
|
|
130769
|
-
var buildRuntimePromptParityContext, readRuntimePromptMarketData, invokeRuntimeReviewModel, resolveRuntimePromptKnobs, buildRuntimePromptCandles, requireRuntimePromptTemplates, resolveRuntimeBehaviorMemoryCutoff, buildRuntimeBehaviorStateArtifacts, buildRuntimePromptContextParts, runtimePromptArtifactInput;
|
|
130859
|
+
var buildRuntimePromptParityContext, cycleMarketTicker, readRuntimePromptMarketData, invokeRuntimeReviewModel, resolveRuntimePromptKnobs, buildRuntimePromptCandles, requireRuntimePromptTemplates, resolveRuntimeBehaviorMemoryCutoff, buildRuntimeBehaviorStateArtifacts, buildRuntimePromptContextParts, runtimePromptArtifactInput;
|
|
130770
130860
|
var init_runtime_prompt_steps = __esm({
|
|
130771
130861
|
"lib/runtime/runtime-prompt-steps.ts"() {
|
|
130772
130862
|
"use strict";
|
|
@@ -130805,6 +130895,7 @@ var init_runtime_prompt_steps = __esm({
|
|
|
130805
130895
|
}
|
|
130806
130896
|
return parityContext;
|
|
130807
130897
|
};
|
|
130898
|
+
cycleMarketTicker = (symbol2, candles, loadedTicker) => loadedTicker?.is_fresh === true && toPositiveFinite3(loadedTicker.price) !== null ? loadedTicker : candleCloseTicker(symbol2, candles) ?? loadedTicker;
|
|
130808
130899
|
readRuntimePromptMarketData = (input) => {
|
|
130809
130900
|
const marketDataStartedAtMs = Date.now();
|
|
130810
130901
|
return Promise.all(
|
|
@@ -130839,7 +130930,7 @@ var init_runtime_prompt_steps = __esm({
|
|
|
130839
130930
|
)
|
|
130840
130931
|
]);
|
|
130841
130932
|
const candles = Object.fromEntries(loadedCandles);
|
|
130842
|
-
const ticker =
|
|
130933
|
+
const ticker = cycleMarketTicker(marketSymbol, candles, loadedTicker);
|
|
130843
130934
|
if (ticker === null) throw tickerError;
|
|
130844
130935
|
if (loadedTicker === null) {
|
|
130845
130936
|
appendRuntimeDebugEvent({
|
|
@@ -133056,9 +133147,9 @@ var init_local_analysis = __esm({
|
|
|
133056
133147
|
RUNTIME_SOURCE_DEFINITION_VERSION = "runtime-source-v1";
|
|
133057
133148
|
DECISION_INPUT_DEFINITION_VERSION = "decision-input-v1";
|
|
133058
133149
|
CONTEXT_ENVELOPE_DEFINITION_VERSION = "context-envelope-v2.1";
|
|
133059
|
-
CLIENT_RUNTIME_SOURCE_VERSION = typeof process !== "undefined" && true && "
|
|
133060
|
-
"
|
|
133061
|
-
) ? "
|
|
133150
|
+
CLIENT_RUNTIME_SOURCE_VERSION = typeof process !== "undefined" && true && "d2a1386883f9001b5d78fa222be70d5248c4700b".trim() && !["unknown", "unstamped", "development"].includes(
|
|
133151
|
+
"d2a1386883f9001b5d78fa222be70d5248c4700b".trim().toLowerCase()
|
|
133152
|
+
) ? "d2a1386883f9001b5d78fa222be70d5248c4700b".trim() : null;
|
|
133062
133153
|
CLIENT_MAIN_PROMPT_RENDERER = "client_runtime.buildLocalRuntimePromptArtifacts:v1";
|
|
133063
133154
|
CLIENT_REVIEW_PROMPT_RENDERER = "client_runtime.review_prompt_assembly:v1";
|
|
133064
133155
|
resolveEffectivePromptRuntimeProvenance = (input) => ({
|
|
@@ -138288,128 +138379,76 @@ ${copyReviewPromptContext(proposedTrade, input.templates)}`;
|
|
|
138288
138379
|
}
|
|
138289
138380
|
});
|
|
138290
138381
|
|
|
138291
|
-
// lib/runtime/copy-review-
|
|
138292
|
-
var
|
|
138293
|
-
|
|
138294
|
-
|
|
138295
|
-
renderCheckInCopyReviewShadows: () => renderCheckInCopyReviewShadows,
|
|
138296
|
-
renderCopyReviewShadows: () => renderCopyReviewShadows,
|
|
138297
|
-
renderRuntimeCopyReview: () => renderRuntimeCopyReview,
|
|
138298
|
-
shadowBudget: () => shadowBudget,
|
|
138299
|
-
shadowPrompts: () => shadowPrompts
|
|
138300
|
-
});
|
|
138301
|
-
var prepareRuntimeCopyReviewPrimary, renderRuntimeCopyReview, shadowPrompts, SHADOW_RENDER_TIMEOUT_MS, SHADOW_REPORT_TIMEOUT_MS, shadowBudget, renderCopyReviewShadows, renderCheckInCopyReviewShadows;
|
|
138302
|
-
var init_copy_review_runtime = __esm({
|
|
138303
|
-
"lib/runtime/copy-review-runtime.ts"() {
|
|
138382
|
+
// lib/runtime/copy-review-render-inputs.ts
|
|
138383
|
+
var copyReviewRenderScope, copyReviewAccountSummary, requireCopyReviewAccountEquity, copyReviewWalletAddress, copyReviewParityContext, requireCopyReviewContractReady, copyReviewPrimaryFromInputs, renderCopyReviewFromPrimary, shadowPrompts;
|
|
138384
|
+
var init_copy_review_render_inputs = __esm({
|
|
138385
|
+
"lib/runtime/copy-review-render-inputs.ts"() {
|
|
138304
138386
|
"use strict";
|
|
138305
138387
|
init_define_VTX_CLAUDE_CODE_POLICY();
|
|
138306
138388
|
init_define_VTX_EXO_POLICY();
|
|
138307
138389
|
init_define_VTX_GROK_POLICY();
|
|
138308
138390
|
init_define_VTX_PI_MODEL_POLICY();
|
|
138309
|
-
init_copy_review();
|
|
138310
|
-
init_constants();
|
|
138311
|
-
init_runtime_policy_generated2();
|
|
138312
138391
|
init_ai_settings_helpers();
|
|
138313
|
-
init_abort();
|
|
138314
138392
|
init_client_account_report();
|
|
138315
138393
|
init_copy_review_prompt();
|
|
138316
138394
|
init_render();
|
|
138317
|
-
init_hyperliquid_account_state_adapter();
|
|
138318
138395
|
init_local_analysis();
|
|
138319
|
-
init_network_debug();
|
|
138320
|
-
init_perp_dex_scope();
|
|
138321
138396
|
init_runtime_error_reason_rules();
|
|
138322
138397
|
init_runtime_prompt_steps();
|
|
138323
|
-
|
|
138324
|
-
const { config: config2, signal } = input;
|
|
138398
|
+
copyReviewRenderScope = (input) => {
|
|
138325
138399
|
const settings = sortAiSettings(input.settings || {}) || {};
|
|
138326
|
-
const
|
|
138327
|
-
|
|
138328
|
-
throw new RuntimeReasonError("The active profile wallet is unavailable. Save a wallet for this profile, then try again.", "profile_wallet_unavailable");
|
|
138329
|
-
}
|
|
138330
|
-
const { symbols: botSymbols, timeframes } = resolveRuntimeTradingScope(settings, config2);
|
|
138331
|
-
const sortedTimeframes = sortTradingTimeframes(timeframes);
|
|
138332
|
-
const symbols = input.promptSymbols(botSymbols);
|
|
138333
|
-
const activeIndicators = normalizeAiIndicatorFlags(config2.default_ai_indicators, settings.ai_indicators);
|
|
138334
|
-
const indicatorCandleCount = Number(config2.indicator_candle_count);
|
|
138400
|
+
const { symbols: botSymbols, timeframes } = resolveRuntimeTradingScope(settings, input.config);
|
|
138401
|
+
const indicatorCandleCount = Number(input.config.indicator_candle_count);
|
|
138335
138402
|
if (!Number.isSafeInteger(indicatorCandleCount) || indicatorCandleCount < 1) {
|
|
138336
138403
|
throw new RuntimeReasonError("Missing required client runtime config: indicator_candle_count", "runtime_config_missing");
|
|
138337
138404
|
}
|
|
138338
|
-
|
|
138339
|
-
|
|
138340
|
-
|
|
138341
|
-
|
|
138342
|
-
|
|
138343
|
-
lookbackSettings: settings.analysis_lookback,
|
|
138344
|
-
defaultLookbacks: config2.default_analysis_lookback_fallbacks,
|
|
138345
|
-
indicatorCandleCount,
|
|
138346
|
-
primarySymbol: symbols[0],
|
|
138347
|
-
primaryTimeframe: sortedTimeframes[0],
|
|
138348
|
-
signal,
|
|
138349
|
-
// A Client bot's candles: the stored ones, and the rest read here (the
|
|
138350
|
-
// copied market may be one nothing streams); never a VTX server read of
|
|
138351
|
-
// Hyperliquid for it.
|
|
138352
|
-
...serverBot ? {} : {
|
|
138353
|
-
candleReadContext: { profileId: input.profileId, deviceConfig: () => config2, priority: input.readPriority }
|
|
138354
|
-
}
|
|
138355
|
-
}));
|
|
138356
|
-
const fillsPromise = settleRuntimeCyclePromise(serverBot ? Promise.resolve(null) : fetchBrowserUserFills({
|
|
138357
|
-
publicRequestPriority: input.readPriority,
|
|
138358
|
-
config: config2,
|
|
138359
|
-
walletAddress,
|
|
138360
|
-
symbols,
|
|
138361
|
-
forceRefresh: false,
|
|
138362
|
-
signal
|
|
138363
|
-
}));
|
|
138364
|
-
const accountState = await fetchBrowserAccountState2({
|
|
138365
|
-
publicRequestPriority: input.readPriority,
|
|
138366
|
-
config: config2,
|
|
138367
|
-
walletAddress,
|
|
138368
|
-
symbol: symbols[0],
|
|
138369
|
-
tickerPrice: 0,
|
|
138370
|
-
leverage: resolveRuntimeLeveragePreference(settings, config2),
|
|
138371
|
-
aggregatePerpDexs: true,
|
|
138372
|
-
perpDexScope: perpDexScopeForSymbols(symbols),
|
|
138373
|
-
feeSymbols: symbols,
|
|
138374
|
-
includeEffectiveTakerRate: true,
|
|
138375
|
-
forceRefresh: serverBot,
|
|
138376
|
-
serverLoopAccountValue: serverBot,
|
|
138377
|
-
sessionId: input.payload.sessionId,
|
|
138378
|
-
signal
|
|
138379
|
-
});
|
|
138380
|
-
const fills = unwrapRuntimeCycleSettledResult(await fillsPromise);
|
|
138381
|
-
const accountSummary = {
|
|
138382
|
-
...accountState.accountSummary,
|
|
138383
|
-
total_unrealized_pnl: resolveTotalUnrealizedPnl2(
|
|
138384
|
-
accountState.accountSummary,
|
|
138385
|
-
accountState.positions
|
|
138386
|
-
) ?? accountState.accountSummary.total_unrealized_pnl
|
|
138405
|
+
return {
|
|
138406
|
+
settings,
|
|
138407
|
+
symbols: input.promptSymbols(botSymbols),
|
|
138408
|
+
sortedTimeframes: sortTradingTimeframes(timeframes),
|
|
138409
|
+
indicatorCandleCount
|
|
138387
138410
|
};
|
|
138411
|
+
};
|
|
138412
|
+
copyReviewAccountSummary = (accountState) => ({
|
|
138413
|
+
...accountState.accountSummary,
|
|
138414
|
+
total_unrealized_pnl: resolveTotalUnrealizedPnl2(
|
|
138415
|
+
accountState.accountSummary,
|
|
138416
|
+
accountState.positions
|
|
138417
|
+
) ?? accountState.accountSummary.total_unrealized_pnl
|
|
138418
|
+
});
|
|
138419
|
+
requireCopyReviewAccountEquity = (accountState, serverBot) => {
|
|
138388
138420
|
const accountEquity = Number(accountState.accountSummary?.account_value) || 0;
|
|
138389
138421
|
if (accountEquity <= 0 && !serverBot) {
|
|
138390
138422
|
throw new RuntimeReasonError("Live account equity unavailable for client runtime prompt contract.", "hyperliquid_data_unavailable");
|
|
138391
138423
|
}
|
|
138392
|
-
|
|
138424
|
+
return accountEquity;
|
|
138425
|
+
};
|
|
138426
|
+
copyReviewWalletAddress = (settings) => {
|
|
138427
|
+
const walletAddress = String(settings.hyperliquid_wallet_address || "").trim();
|
|
138428
|
+
if (!walletAddress) {
|
|
138429
|
+
throw new RuntimeReasonError("The active profile wallet is unavailable. Save a wallet for this profile, then try again.", "profile_wallet_unavailable");
|
|
138430
|
+
}
|
|
138431
|
+
return walletAddress;
|
|
138432
|
+
};
|
|
138433
|
+
copyReviewParityContext = (input) => {
|
|
138434
|
+
const { accountState, scope } = input;
|
|
138435
|
+
const accountSummary = copyReviewAccountSummary(accountState);
|
|
138436
|
+
return buildRuntimePromptParityContext({
|
|
138393
138437
|
account: {
|
|
138394
|
-
walletAddress,
|
|
138395
|
-
accountEquity,
|
|
138438
|
+
walletAddress: copyReviewWalletAddress(scope.settings),
|
|
138439
|
+
accountEquity: requireCopyReviewAccountEquity(accountState, input.serverBot),
|
|
138396
138440
|
perpDexAccounts: accountState.accountSummary?.perp_dex_accounts ?? null,
|
|
138397
138441
|
positions: accountState.positions,
|
|
138398
138442
|
totalUnrealizedPnl: accountSummary.total_unrealized_pnl ?? null
|
|
138399
138443
|
},
|
|
138400
138444
|
deviceCandleSeries: {
|
|
138401
|
-
series: symbols.flatMap((
|
|
138402
|
-
limit: indicatorCandleCount
|
|
138445
|
+
series: scope.symbols.flatMap((symbol2) => scope.sortedTimeframes.map((timeframe) => [symbol2, timeframe])),
|
|
138446
|
+
limit: scope.indicatorCandleCount
|
|
138403
138447
|
},
|
|
138404
|
-
userFills: fills ? { fills: fills.rawFills, evidence: fills.evidence } : null
|
|
138448
|
+
userFills: input.fills ? { fills: input.fills.rawFills, evidence: input.fills.evidence } : null
|
|
138405
138449
|
});
|
|
138406
|
-
|
|
138407
|
-
|
|
138408
|
-
isAnalyzing: false,
|
|
138409
|
-
isExecuting: false,
|
|
138410
|
-
promptParityContext: parityContext,
|
|
138411
|
-
copyReviewSymbol: input.copySymbol
|
|
138412
|
-
}, { schedulerInstanceId: input.payload.schedulerInstanceId ?? void 0, signal });
|
|
138450
|
+
};
|
|
138451
|
+
requireCopyReviewContractReady = (derived) => {
|
|
138413
138452
|
if (String(derived.status || "").trim() !== "derived_context_ready") {
|
|
138414
138453
|
throw new RuntimeReasonError(`Unexpected prompt derived-context status: ${String(derived.status || "unknown")}`, "internal_data_error");
|
|
138415
138454
|
}
|
|
@@ -138418,7 +138457,14 @@ var init_copy_review_runtime = __esm({
|
|
|
138418
138457
|
throw new RuntimeReasonError(`Unexpected prompt metadata status: ${String(promptMetadata?.status || "unknown")}`, "internal_data_error");
|
|
138419
138458
|
}
|
|
138420
138459
|
assertPromptContractCompatibility(promptMetadata);
|
|
138421
|
-
|
|
138460
|
+
return promptMetadata;
|
|
138461
|
+
};
|
|
138462
|
+
copyReviewPrimaryFromInputs = (input) => {
|
|
138463
|
+
const { config: config2, contract: derived, marketData, fills, accountState } = input;
|
|
138464
|
+
const { settings, symbols, sortedTimeframes, indicatorCandleCount } = input.scope;
|
|
138465
|
+
const activeIndicators = normalizeAiIndicatorFlags(config2.default_ai_indicators, settings.ai_indicators);
|
|
138466
|
+
const accountSummary = copyReviewAccountSummary(accountState);
|
|
138467
|
+
const promptMetadata = requireCopyReviewContractReady(derived);
|
|
138422
138468
|
const tickersBySymbol = Object.fromEntries(marketData.map((entry) => [entry.symbol, entry.ticker]));
|
|
138423
138469
|
const candlesBySymbol = Object.fromEntries(marketData.map((entry) => [entry.symbol, entry.candles]));
|
|
138424
138470
|
const derivedContext = asRecord(derived.derived_context);
|
|
@@ -138456,7 +138502,7 @@ var init_copy_review_runtime = __esm({
|
|
|
138456
138502
|
const { cutoffMs } = resolveRuntimeBehaviorMemoryCutoff(derivedContext, derived.derived_context_generated_at);
|
|
138457
138503
|
const accountMarginNote = requireRuntimeAccountMarginNote(asRecord(promptInstructions.account));
|
|
138458
138504
|
const behaviorState = buildRuntimeBehaviorStateArtifacts({
|
|
138459
|
-
serverOwnsBehaviorState:
|
|
138505
|
+
serverOwnsBehaviorState: input.serverOwnsBehaviorState,
|
|
138460
138506
|
derivedContext,
|
|
138461
138507
|
behaviorInstructions: asRecord(promptInstructions.behavior),
|
|
138462
138508
|
config: config2,
|
|
@@ -138521,24 +138567,10 @@ var init_copy_review_runtime = __esm({
|
|
|
138521
138567
|
}
|
|
138522
138568
|
};
|
|
138523
138569
|
};
|
|
138524
|
-
|
|
138525
|
-
const prepared = await prepareRuntimeCopyReviewPrimary({
|
|
138526
|
-
profileId: input.profileId,
|
|
138527
|
-
payload: input.payload,
|
|
138528
|
-
executionMode: input.executionMode,
|
|
138529
|
-
config: input.config,
|
|
138530
|
-
settings: input.settings,
|
|
138531
|
-
copySymbol: input.event.symbol,
|
|
138532
|
-
promptSymbols: (botSymbols) => copyReviewPromptSymbols(input.event.symbol, botSymbols),
|
|
138533
|
-
// A copy without a value of its own (no reference price) reviews at the
|
|
138534
|
-
// bot's trade size, else the configured default, as the lane serves them.
|
|
138535
|
-
promptSize: (sizes) => copyReviewPromptSize(input.event, sizes.profile || null, sizes.default),
|
|
138536
|
-
readPriority: input.readPriority,
|
|
138537
|
-
signal: input.signal
|
|
138538
|
-
});
|
|
138570
|
+
renderCopyReviewFromPrimary = (prepared, copy4) => {
|
|
138539
138571
|
const prompts = renderCopyReviewPrompts({
|
|
138540
|
-
event:
|
|
138541
|
-
source:
|
|
138572
|
+
event: copy4.event,
|
|
138573
|
+
source: copy4.source,
|
|
138542
138574
|
templates: prepared.templates,
|
|
138543
138575
|
primary: prepared.primary,
|
|
138544
138576
|
review: prepared.review
|
|
@@ -138555,6 +138587,125 @@ var init_copy_review_runtime = __esm({
|
|
|
138555
138587
|
review_system_prompt: prompts.reviewSystemPrompt,
|
|
138556
138588
|
review_user_prompt: prompts.reviewUserPrompt
|
|
138557
138589
|
});
|
|
138590
|
+
}
|
|
138591
|
+
});
|
|
138592
|
+
|
|
138593
|
+
// lib/runtime/copy-review-runtime.ts
|
|
138594
|
+
var copy_review_runtime_exports = {};
|
|
138595
|
+
__export(copy_review_runtime_exports, {
|
|
138596
|
+
prepareRuntimeCopyReviewPrimary: () => prepareRuntimeCopyReviewPrimary,
|
|
138597
|
+
renderCheckInCopyReviewShadows: () => renderCheckInCopyReviewShadows,
|
|
138598
|
+
renderCopyReviewShadows: () => renderCopyReviewShadows,
|
|
138599
|
+
renderRuntimeCopyReview: () => renderRuntimeCopyReview,
|
|
138600
|
+
shadowBudget: () => shadowBudget,
|
|
138601
|
+
shadowPrompts: () => shadowPrompts
|
|
138602
|
+
});
|
|
138603
|
+
var prepareRuntimeCopyReviewPrimary, renderRuntimeCopyReview, SHADOW_RENDER_TIMEOUT_MS, SHADOW_REPORT_TIMEOUT_MS, shadowBudget, renderCopyReviewShadows, renderCheckInCopyReviewShadows;
|
|
138604
|
+
var init_copy_review_runtime = __esm({
|
|
138605
|
+
"lib/runtime/copy-review-runtime.ts"() {
|
|
138606
|
+
"use strict";
|
|
138607
|
+
init_define_VTX_CLAUDE_CODE_POLICY();
|
|
138608
|
+
init_define_VTX_EXO_POLICY();
|
|
138609
|
+
init_define_VTX_GROK_POLICY();
|
|
138610
|
+
init_define_VTX_PI_MODEL_POLICY();
|
|
138611
|
+
init_copy_review();
|
|
138612
|
+
init_constants();
|
|
138613
|
+
init_runtime_policy_generated2();
|
|
138614
|
+
init_abort();
|
|
138615
|
+
init_copy_review_prompt();
|
|
138616
|
+
init_hyperliquid_account_state_adapter();
|
|
138617
|
+
init_local_analysis();
|
|
138618
|
+
init_network_debug();
|
|
138619
|
+
init_perp_dex_scope();
|
|
138620
|
+
init_runtime_error_reason_rules();
|
|
138621
|
+
init_runtime_prompt_steps();
|
|
138622
|
+
init_copy_review_render_inputs();
|
|
138623
|
+
prepareRuntimeCopyReviewPrimary = async (input) => {
|
|
138624
|
+
const { config: config2, signal } = input;
|
|
138625
|
+
const scope = copyReviewRenderScope({ config: config2, settings: input.settings, promptSymbols: input.promptSymbols });
|
|
138626
|
+
const { settings, symbols, sortedTimeframes, indicatorCandleCount } = scope;
|
|
138627
|
+
const walletAddress = copyReviewWalletAddress(settings);
|
|
138628
|
+
const serverBot = input.executionMode === "server";
|
|
138629
|
+
const marketDataPromise = settleRuntimeCyclePromise(readRuntimePromptMarketData({
|
|
138630
|
+
config: config2,
|
|
138631
|
+
symbols,
|
|
138632
|
+
sortedTimeframes,
|
|
138633
|
+
lookbackSettings: settings.analysis_lookback,
|
|
138634
|
+
defaultLookbacks: config2.default_analysis_lookback_fallbacks,
|
|
138635
|
+
indicatorCandleCount,
|
|
138636
|
+
primarySymbol: symbols[0],
|
|
138637
|
+
primaryTimeframe: sortedTimeframes[0],
|
|
138638
|
+
signal,
|
|
138639
|
+
// A Client bot's candles: the stored ones, and the rest read here (the
|
|
138640
|
+
// copied market may be one nothing streams); never a VTX server read of
|
|
138641
|
+
// Hyperliquid for it.
|
|
138642
|
+
...serverBot ? {} : {
|
|
138643
|
+
candleReadContext: { profileId: input.profileId, deviceConfig: () => config2, priority: input.readPriority }
|
|
138644
|
+
}
|
|
138645
|
+
}));
|
|
138646
|
+
const fillsPromise = settleRuntimeCyclePromise(serverBot ? Promise.resolve(null) : fetchBrowserUserFills({
|
|
138647
|
+
publicRequestPriority: input.readPriority,
|
|
138648
|
+
config: config2,
|
|
138649
|
+
walletAddress,
|
|
138650
|
+
symbols,
|
|
138651
|
+
forceRefresh: false,
|
|
138652
|
+
signal
|
|
138653
|
+
}));
|
|
138654
|
+
const accountState = await fetchBrowserAccountState2({
|
|
138655
|
+
publicRequestPriority: input.readPriority,
|
|
138656
|
+
config: config2,
|
|
138657
|
+
walletAddress,
|
|
138658
|
+
symbol: symbols[0],
|
|
138659
|
+
tickerPrice: 0,
|
|
138660
|
+
leverage: resolveRuntimeLeveragePreference(settings, config2),
|
|
138661
|
+
aggregatePerpDexs: true,
|
|
138662
|
+
perpDexScope: perpDexScopeForSymbols(symbols),
|
|
138663
|
+
feeSymbols: symbols,
|
|
138664
|
+
includeEffectiveTakerRate: true,
|
|
138665
|
+
forceRefresh: serverBot,
|
|
138666
|
+
serverLoopAccountValue: serverBot,
|
|
138667
|
+
sessionId: input.payload.sessionId,
|
|
138668
|
+
signal
|
|
138669
|
+
});
|
|
138670
|
+
const fills = unwrapRuntimeCycleSettledResult(await fillsPromise);
|
|
138671
|
+
const parityContext = copyReviewParityContext({ accountState, fills, serverBot, scope });
|
|
138672
|
+
const derived = await fetchCopyReviewPromptContract(input.profileId, {
|
|
138673
|
+
...input.payload,
|
|
138674
|
+
isAnalyzing: false,
|
|
138675
|
+
isExecuting: false,
|
|
138676
|
+
promptParityContext: parityContext,
|
|
138677
|
+
copyReviewSymbol: input.copySymbol
|
|
138678
|
+
}, { schedulerInstanceId: input.payload.schedulerInstanceId ?? void 0, signal });
|
|
138679
|
+
requireCopyReviewContractReady(derived);
|
|
138680
|
+
return copyReviewPrimaryFromInputs({
|
|
138681
|
+
config: config2,
|
|
138682
|
+
settings: input.settings,
|
|
138683
|
+
serverOwnsBehaviorState: serverBot,
|
|
138684
|
+
contract: derived,
|
|
138685
|
+
marketData: unwrapRuntimeCycleSettledResult(await marketDataPromise),
|
|
138686
|
+
fills,
|
|
138687
|
+
accountState,
|
|
138688
|
+
scope,
|
|
138689
|
+
promptSize: input.promptSize
|
|
138690
|
+
});
|
|
138691
|
+
};
|
|
138692
|
+
renderRuntimeCopyReview = async (input) => {
|
|
138693
|
+
const prepared = await prepareRuntimeCopyReviewPrimary({
|
|
138694
|
+
profileId: input.profileId,
|
|
138695
|
+
payload: input.payload,
|
|
138696
|
+
executionMode: input.executionMode,
|
|
138697
|
+
config: input.config,
|
|
138698
|
+
settings: input.settings,
|
|
138699
|
+
copySymbol: input.event.symbol,
|
|
138700
|
+
promptSymbols: (botSymbols) => copyReviewPromptSymbols(input.event.symbol, botSymbols),
|
|
138701
|
+
// A copy without a value of its own (no reference price) reviews at the
|
|
138702
|
+
// bot's trade size, else the configured default, as the lane serves them.
|
|
138703
|
+
promptSize: (sizes) => copyReviewPromptSize(input.event, sizes.profile || null, sizes.default),
|
|
138704
|
+
readPriority: input.readPriority,
|
|
138705
|
+
signal: input.signal
|
|
138706
|
+
});
|
|
138707
|
+
return renderCopyReviewFromPrimary(prepared, { event: input.event, source: input.source });
|
|
138708
|
+
};
|
|
138558
138709
|
SHADOW_RENDER_TIMEOUT_MS = runtime_policy_generated_default2.copy_trading.review_shadow.render_timeout_seconds * MS_PER_SECOND;
|
|
138559
138710
|
SHADOW_REPORT_TIMEOUT_MS = runtime_policy_generated_default2.copy_trading.review_shadow.report_timeout_seconds * MS_PER_SECOND;
|
|
138560
138711
|
shadowBudget = (signal, budgetMs) => {
|