@vtxmacro/cli 2026.10.24 → 2026.10.25
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 +150 -7
- package/package.json +1 -1
package/bin/vtx-mcp.js
CHANGED
|
@@ -37,7 +37,7 @@ var init_define_VTX_PI_MODEL_POLICY = __esm({
|
|
|
37
37
|
var agent_cli_release_default;
|
|
38
38
|
var init_agent_cli_release = __esm({
|
|
39
39
|
"agent-cli-release.json"() {
|
|
40
|
-
agent_cli_release_default = { package_name: "@vtxmacro/cli", package_version: "2026.10.
|
|
40
|
+
agent_cli_release_default = { package_name: "@vtxmacro/cli", package_version: "2026.10.25", 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" } } };
|
|
41
41
|
}
|
|
42
42
|
});
|
|
43
43
|
|
|
@@ -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.25", 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
|
@@ -113,7 +113,7 @@ var init_routing = __esm({
|
|
|
113
113
|
var agent_cli_release_default;
|
|
114
114
|
var init_agent_cli_release = __esm({
|
|
115
115
|
"agent-cli-release.json"() {
|
|
116
|
-
agent_cli_release_default = { package_name: "@vtxmacro/cli", package_version: "2026.10.
|
|
116
|
+
agent_cli_release_default = { package_name: "@vtxmacro/cli", package_version: "2026.10.25", 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" } } };
|
|
117
117
|
}
|
|
118
118
|
});
|
|
119
119
|
|
|
@@ -99632,7 +99632,7 @@ var init_protective_entry_cover = __esm({
|
|
|
99632
99632
|
});
|
|
99633
99633
|
|
|
99634
99634
|
// lib/runtime/native-position-protection.ts
|
|
99635
|
-
var nativeProtectionSettings, memberSetting, KINDS, formatTriggerOrNull, nativePositionTriggerPrice, nativeEntryRequest, HALF_UP_DIGIT, roundDecimalHalfUp, nativeTrailingRetracement, nativeAfterFillActions, classifyNativeOrderEnd, isOpenInDirection, nativePlacementGate, nativeStrayOrderDecision, explainAbsentProtectiveOrder, readServerNativeProtectionState;
|
|
99635
|
+
var nativeProtectionSettings, memberSetting, KINDS, formatTriggerOrNull, nativePositionTriggerPrice, nativeEntryRequest, HALF_UP_DIGIT, roundDecimalHalfUp, nativeTrailingRetracement, nativeAfterFillActions, classifyNativeOrderEnd, isOpenInDirection, nativePlacementGate, nativeStrayOrderDecision, FIRED_TRIGGER_CONDITION, closingSide, DECIMAL_PATTERN, decimalUnits2, fractionDigits, nativePlaceCover, nativeRearmDecision, nativeLostStopCrossed, explainAbsentProtectiveOrder, readServerNativeProtectionState;
|
|
99636
99636
|
var init_native_position_protection = __esm({
|
|
99637
99637
|
"lib/runtime/native-position-protection.ts"() {
|
|
99638
99638
|
"use strict";
|
|
@@ -99641,6 +99641,7 @@ var init_native_position_protection = __esm({
|
|
|
99641
99641
|
init_define_VTX_PI_MODEL_POLICY();
|
|
99642
99642
|
init_constants();
|
|
99643
99643
|
init_hyperliquid_client();
|
|
99644
|
+
init_hyperliquid_market_symbol();
|
|
99644
99645
|
init_hyperliquid_order_status();
|
|
99645
99646
|
init_protective_stop_replacement();
|
|
99646
99647
|
nativeProtectionSettings = (resolved) => ({
|
|
@@ -99777,6 +99778,54 @@ var init_native_position_protection = __esm({
|
|
|
99777
99778
|
if (isOpenInDirection(input.position, input.isLong)) return "keep";
|
|
99778
99779
|
return input.positionStateMs > input.placedMs ? "cancel" : "need_reads";
|
|
99779
99780
|
};
|
|
99781
|
+
FIRED_TRIGGER_CONDITION = "Triggered";
|
|
99782
|
+
closingSide = (isLong) => isLong ? "a" : "b";
|
|
99783
|
+
DECIMAL_PATTERN = /^-?\d+(\.\d+)?$/;
|
|
99784
|
+
decimalUnits2 = (value, scale) => {
|
|
99785
|
+
if (!DECIMAL_PATTERN.test(value)) return null;
|
|
99786
|
+
const negative = value.startsWith("-");
|
|
99787
|
+
const [whole, fraction = ""] = (negative ? value.slice(1) : value).split(".");
|
|
99788
|
+
const units = BigInt(`${whole}${fraction.padEnd(scale, "0")}`);
|
|
99789
|
+
return negative ? -units : units;
|
|
99790
|
+
};
|
|
99791
|
+
fractionDigits = (value) => value.includes(".") ? value.split(".")[1].length : 0;
|
|
99792
|
+
nativePlaceCover = (input) => {
|
|
99793
|
+
const market = normalizeHyperliquidMarketSymbol(input.symbol);
|
|
99794
|
+
const own = new Set(input.ownClientOrderIds.map((value) => String(value).trim().toLowerCase()).filter(Boolean));
|
|
99795
|
+
const positionText = String(input.positionSize).replace(/^-/, "");
|
|
99796
|
+
const sized = [];
|
|
99797
|
+
for (const row of input.rows) {
|
|
99798
|
+
if (normalizeHyperliquidMarketSymbol(String(row.coin ?? "")) !== market) continue;
|
|
99799
|
+
if (row.reduceOnly !== true || row.isTrigger !== true) continue;
|
|
99800
|
+
if (String(row.triggerCondition ?? "").trim() === FIRED_TRIGGER_CONDITION) continue;
|
|
99801
|
+
if (String(row.side ?? "").trim().toLowerCase() !== closingSide(input.isLong)) continue;
|
|
99802
|
+
const orderType = String(row.orderType ?? "").toLowerCase();
|
|
99803
|
+
const rowKind = orderType.includes("take profit") ? "tp" : orderType.includes("stop") ? "sl" : null;
|
|
99804
|
+
if (rowKind !== input.kind) continue;
|
|
99805
|
+
if (own.has(String(row.cloid ?? "").trim().toLowerCase())) {
|
|
99806
|
+
return { decision: "adopt", order_id: Number(row.oid) };
|
|
99807
|
+
}
|
|
99808
|
+
const size = String(row.sz ?? "").trim();
|
|
99809
|
+
if (!DECIMAL_PATTERN.test(size)) return { decision: "need_reads" };
|
|
99810
|
+
const wholePosition = row.isPositionTpsl === true && Number(size) === 0;
|
|
99811
|
+
if (!wholePosition && !(Number(size) > 0)) return { decision: "need_reads" };
|
|
99812
|
+
sized.push(wholePosition ? positionText : size);
|
|
99813
|
+
}
|
|
99814
|
+
if (!DECIMAL_PATTERN.test(positionText)) return { decision: "place" };
|
|
99815
|
+
const scale = Math.max(fractionDigits(positionText), ...sized.map(fractionDigits));
|
|
99816
|
+
const position = decimalUnits2(positionText, scale);
|
|
99817
|
+
const covered = sized.reduce((total, size) => total + decimalUnits2(size, scale), BigInt(0));
|
|
99818
|
+
return position > BigInt(0) && covered >= position ? { decision: "covered" } : { decision: "place" };
|
|
99819
|
+
};
|
|
99820
|
+
nativeRearmDecision = (input) => {
|
|
99821
|
+
if (!isOpenInDirection(input.position, input.isLong)) return "retire";
|
|
99822
|
+
if (input.endedMs == null || !(input.positionStateMs > input.endedMs)) return "need_reads";
|
|
99823
|
+
return "rearm";
|
|
99824
|
+
};
|
|
99825
|
+
nativeLostStopCrossed = (input) => {
|
|
99826
|
+
if (input.mark == null || !Number.isFinite(input.mark)) return false;
|
|
99827
|
+
return input.isLong ? input.mark <= input.trigger : input.mark >= input.trigger;
|
|
99828
|
+
};
|
|
99780
99829
|
explainAbsentProtectiveOrder = (input) => {
|
|
99781
99830
|
if (isOpenInDirection(input.position, input.isLong)) return "status_read";
|
|
99782
99831
|
return input.positionStateMs > input.lastSeenRestingMs ? "ended_with_position" : "need_reads";
|
|
@@ -99795,7 +99844,7 @@ var init_native_position_protection = __esm({
|
|
|
99795
99844
|
});
|
|
99796
99845
|
|
|
99797
99846
|
// lib/runtime/native-protection-device.ts
|
|
99798
|
-
var NATIVE_PROTECTION_RECORD_VERSION, nativeProtectionStorage, resolveStorage, setNativeProtectionStorage, recordKey, isMember, readNativeProtectionRecord, writeNativeProtectionRecord, NativeOrderNotSentError, withDispatchBoundary, attempt, notSentRestores, errorText, actionOf, isOpenInDirection2, restingOrderIdAt, definitivelyRefused, planNativeOpen, recordEntryChildren, observeMembers, UNKNOWN_ORDER_RESPONSE, resolveUnknownOrderIds, settleNativeProtectionAfterFill, reconcileNativeProtection;
|
|
99847
|
+
var NATIVE_PROTECTION_RECORD_VERSION, nativeProtectionStorage, resolveStorage, setNativeProtectionStorage, recordKey, isMember, readNativeProtectionRecord, writeNativeProtectionRecord, NativeOrderNotSentError, withDispatchBoundary, attempt, notSentRestores, errorText, actionOf, isOpenInDirection2, coverRows, restingOrderIdAt, definitivelyRefused, planNativeOpen, recordEntryChildren, observeMembers, UNKNOWN_ORDER_RESPONSE, resolveUnknownOrderIds, settleNativeProtectionAfterFill, reconcileNativeProtection;
|
|
99799
99848
|
var init_native_protection_device = __esm({
|
|
99800
99849
|
"lib/runtime/native-protection-device.ts"() {
|
|
99801
99850
|
"use strict";
|
|
@@ -99883,6 +99932,20 @@ var init_native_protection_device = __esm({
|
|
|
99883
99932
|
errorText = (error48) => error48 instanceof Error ? error48.message : typeof error48 === "string" ? error48 : "Exchange call failed.";
|
|
99884
99933
|
actionOf = (kind) => kind === "sl" ? "AUTO_SL" : "AUTO_TP";
|
|
99885
99934
|
isOpenInDirection2 = (position, isLong) => isLong ? position > 0 : position < 0;
|
|
99935
|
+
coverRows = (page) => page.map((order) => ({
|
|
99936
|
+
coin: order.coin,
|
|
99937
|
+
side: order.side,
|
|
99938
|
+
sz: String(order.sz),
|
|
99939
|
+
oid: order.oid,
|
|
99940
|
+
orderType: order.order_type,
|
|
99941
|
+
triggerCondition: order.trigger_condition,
|
|
99942
|
+
isTrigger: order.is_trigger,
|
|
99943
|
+
reduceOnly: order.reduce_only,
|
|
99944
|
+
isPositionTpsl: order.is_position_tpsl,
|
|
99945
|
+
// The parsed page carries no client order id: a member's own unnamed order
|
|
99946
|
+
// counts as cover (nothing is placed) until its status read names it.
|
|
99947
|
+
cloid: null
|
|
99948
|
+
}));
|
|
99886
99949
|
restingOrderIdAt = (response, index) => {
|
|
99887
99950
|
const statuses = response?.response?.data?.statuses;
|
|
99888
99951
|
const status = Array.isArray(statuses) ? statuses[index] : void 0;
|
|
@@ -100130,6 +100193,17 @@ var init_native_protection_device = __esm({
|
|
|
100130
100193
|
});
|
|
100131
100194
|
continue;
|
|
100132
100195
|
}
|
|
100196
|
+
const cover = nativePlaceCover({
|
|
100197
|
+
kind: step.kind,
|
|
100198
|
+
isLong: record5.isLong,
|
|
100199
|
+
symbol: symbol2,
|
|
100200
|
+
positionSize: String(position.size),
|
|
100201
|
+
ownClientOrderIds: [],
|
|
100202
|
+
rows: coverRows(page)
|
|
100203
|
+
});
|
|
100204
|
+
if (cover.decision !== "place") {
|
|
100205
|
+
continue;
|
|
100206
|
+
}
|
|
100133
100207
|
const sentAtMs = io.nowMs();
|
|
100134
100208
|
const journaled = {
|
|
100135
100209
|
kind: step.kind,
|
|
@@ -100240,6 +100314,7 @@ var init_native_protection_device = __esm({
|
|
|
100240
100314
|
sizeDecimals: input.sizeDecimals
|
|
100241
100315
|
}) : null;
|
|
100242
100316
|
};
|
|
100317
|
+
const kindEnabled = (member) => (member.kind === "sl" ? input.settings.stopLoss : input.settings.takeProfit) != null;
|
|
100243
100318
|
const placeMember = async (args) => {
|
|
100244
100319
|
const gate = nativePlacementGate({
|
|
100245
100320
|
eventMs: args.eventMs,
|
|
@@ -100248,6 +100323,15 @@ var init_native_protection_device = __esm({
|
|
|
100248
100323
|
isLong: record5.isLong
|
|
100249
100324
|
});
|
|
100250
100325
|
if (gate !== "place") return args.member;
|
|
100326
|
+
const cover = nativePlaceCover({
|
|
100327
|
+
kind: args.member.kind,
|
|
100328
|
+
isLong: record5.isLong,
|
|
100329
|
+
symbol: symbol2,
|
|
100330
|
+
positionSize: String(position.size),
|
|
100331
|
+
ownClientOrderIds: [],
|
|
100332
|
+
rows: coverRows(page)
|
|
100333
|
+
});
|
|
100334
|
+
if (cover.decision !== "place") return args.member;
|
|
100251
100335
|
const clientOrderId = clientOrderIdForMutation(io.newMutationId());
|
|
100252
100336
|
const sentAtMs = io.nowMs();
|
|
100253
100337
|
const journaled = {
|
|
@@ -100386,10 +100470,16 @@ var init_native_protection_device = __esm({
|
|
|
100386
100470
|
members.push(member);
|
|
100387
100471
|
continue;
|
|
100388
100472
|
}
|
|
100389
|
-
if (!positionOpen) continue;
|
|
100473
|
+
if (!positionOpen || !kindEnabled(member)) continue;
|
|
100474
|
+
const neverLandedTrigger = currentTrigger(member);
|
|
100475
|
+
if (neverLandedTrigger == null) {
|
|
100476
|
+
anyResting = true;
|
|
100477
|
+
members.push(member);
|
|
100478
|
+
continue;
|
|
100479
|
+
}
|
|
100390
100480
|
const placed = await placeMember({
|
|
100391
100481
|
member,
|
|
100392
|
-
trigger:
|
|
100482
|
+
trigger: neverLandedTrigger,
|
|
100393
100483
|
replacedOnce: member.replacedOnce,
|
|
100394
100484
|
eventMs: Number.NEGATIVE_INFINITY,
|
|
100395
100485
|
reasonCode: "protective_order_never_landed_placed",
|
|
@@ -100434,6 +100524,27 @@ var init_native_protection_device = __esm({
|
|
|
100434
100524
|
continue;
|
|
100435
100525
|
}
|
|
100436
100526
|
if (end === "fired" || end === "ended_with_position") {
|
|
100527
|
+
const rearm = nativeRearmDecision({
|
|
100528
|
+
position: position.size,
|
|
100529
|
+
positionStateMs: stateMs,
|
|
100530
|
+
endedMs: evidence.statusTimestampMs ?? null,
|
|
100531
|
+
isLong: record5.isLong
|
|
100532
|
+
});
|
|
100533
|
+
if (rearm === "retire" || !kindEnabled(member)) continue;
|
|
100534
|
+
const rearmTrigger = currentTrigger(member);
|
|
100535
|
+
if (rearm === "need_reads" || rearmTrigger == null) {
|
|
100536
|
+
members.push(member);
|
|
100537
|
+
continue;
|
|
100538
|
+
}
|
|
100539
|
+
const rearmed = await placeMember({
|
|
100540
|
+
member,
|
|
100541
|
+
trigger: rearmTrigger,
|
|
100542
|
+
replacedOnce: false,
|
|
100543
|
+
eventMs: evidence.statusTimestampMs ?? Number.POSITIVE_INFINITY,
|
|
100544
|
+
reasonCode: "protective_native_rearmed",
|
|
100545
|
+
observationIndex
|
|
100546
|
+
});
|
|
100547
|
+
members.push(rearmed);
|
|
100437
100548
|
continue;
|
|
100438
100549
|
}
|
|
100439
100550
|
if (end === "lost_permanent" || member.replacedOnce) {
|
|
@@ -100455,7 +100566,34 @@ var init_native_protection_device = __esm({
|
|
|
100455
100566
|
members.push({ ...member, retiredReason: "protective_take_profit_lost" });
|
|
100456
100567
|
continue;
|
|
100457
100568
|
}
|
|
100458
|
-
|
|
100569
|
+
if (!kindEnabled(member)) continue;
|
|
100570
|
+
const trigger = currentTrigger(member);
|
|
100571
|
+
const lostGate = nativePlacementGate({
|
|
100572
|
+
eventMs: evidence.statusTimestampMs ?? Number.POSITIVE_INFINITY,
|
|
100573
|
+
position: position.size,
|
|
100574
|
+
positionStateMs: stateMs,
|
|
100575
|
+
isLong: record5.isLong
|
|
100576
|
+
});
|
|
100577
|
+
if (trigger == null || lostGate !== "place") {
|
|
100578
|
+
members.push(member);
|
|
100579
|
+
continue;
|
|
100580
|
+
}
|
|
100581
|
+
if (nativeLostStopCrossed({ isLong: record5.isLong, trigger: Number(trigger), mark: position.markPrice ?? null })) {
|
|
100582
|
+
members.push({ ...member, retiredReason: "protective_stop_trigger_crossed" });
|
|
100583
|
+
reports.push({
|
|
100584
|
+
order_id: String(member.orderId),
|
|
100585
|
+
symbol: symbol2,
|
|
100586
|
+
action: actionOf(member.kind),
|
|
100587
|
+
status: "failed",
|
|
100588
|
+
execution_metadata: {
|
|
100589
|
+
reason_code: "protective_stop_trigger_crossed",
|
|
100590
|
+
trigger_price: trigger,
|
|
100591
|
+
mark_price: position.markPrice,
|
|
100592
|
+
manual_intervention: true
|
|
100593
|
+
}
|
|
100594
|
+
});
|
|
100595
|
+
continue;
|
|
100596
|
+
}
|
|
100459
100597
|
const replacement = await placeMember({
|
|
100460
100598
|
member,
|
|
100461
100599
|
trigger,
|
|
@@ -104119,7 +104257,12 @@ var init_runtime_execution = __esm({
|
|
|
104119
104257
|
request.signal,
|
|
104120
104258
|
"trading_reduce"
|
|
104121
104259
|
);
|
|
104122
|
-
return {
|
|
104260
|
+
return {
|
|
104261
|
+
size: snapshot.size,
|
|
104262
|
+
entryPrice: snapshot.entryPrice,
|
|
104263
|
+
stateTimeMs: snapshot.stateTimeMs,
|
|
104264
|
+
markPrice: snapshot.markPrice
|
|
104265
|
+
};
|
|
104123
104266
|
},
|
|
104124
104267
|
readOpenOrders: () => fetchClientRuntimeOpenOrders(request, "trading_reduce"),
|
|
104125
104268
|
readOrderStatus: (orderId) => fetchBrowserOrderStatusEvidence({
|