@vtxmacro/cli 2026.10.15 → 2026.10.17
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/exo-harness.ts +21 -8
- package/bin/vtx-mcp.js +24 -11
- package/bin/vtx-service-bootstrap.js +22 -9
- package/bin/vtx-service-launcher.js +21 -8
- package/bin/vtx.js +441 -183
- package/package.json +1 -1
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.17", 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
|
|
|
@@ -516,7 +516,6 @@ var init_runtime_policy_generated = __esm({
|
|
|
516
516
|
client_close_fill_sync_retry_step_ms: 300,
|
|
517
517
|
leverage_update_debounce_ms: 250,
|
|
518
518
|
post_leverage_update_order_delay_ms: 250,
|
|
519
|
-
ai_control_lookback_fallback_candles: 25,
|
|
520
519
|
takeover_telemetry_error_chars: 500,
|
|
521
520
|
takeover_telemetry_error_name_chars: 120,
|
|
522
521
|
takeover_telemetry_failure_chars: 300,
|
|
@@ -910,7 +909,6 @@ var init_runtime_policy_generated = __esm({
|
|
|
910
909
|
market_data_failure_debug_max_entries: 20,
|
|
911
910
|
request_string_compact_above_chars: 500,
|
|
912
911
|
prompt_preview_chars: 220,
|
|
913
|
-
provider_failure_snapshot_max_age_seconds: 300,
|
|
914
912
|
local_provider_probe_timeout_ms: 2e3,
|
|
915
913
|
preflight_failure_reason_chars: 200,
|
|
916
914
|
host_error_note_chars: 160,
|
|
@@ -960,6 +958,9 @@ var init_runtime_policy_generated = __esm({
|
|
|
960
958
|
tradability: {
|
|
961
959
|
score_min: 1,
|
|
962
960
|
score_max: 10
|
|
961
|
+
},
|
|
962
|
+
defaults: {
|
|
963
|
+
server_ai_max_slippage: 5
|
|
963
964
|
}
|
|
964
965
|
},
|
|
965
966
|
agent_cli: {
|
|
@@ -983,7 +984,6 @@ var init_runtime_policy_generated = __esm({
|
|
|
983
984
|
],
|
|
984
985
|
browser_login_verifier_bytes: 32,
|
|
985
986
|
update_failure_reason_max_chars: 160,
|
|
986
|
-
update_directory_failure_reason_max_chars: 120,
|
|
987
987
|
update_plan_max_attempts: 3,
|
|
988
988
|
supervisor_max_failed_release_starts: 2
|
|
989
989
|
},
|
|
@@ -1014,6 +1014,7 @@ var init_runtime_policy_generated = __esm({
|
|
|
1014
1014
|
update_failure_reason_max_chars: 160,
|
|
1015
1015
|
launcher_poll_interval_ms: 100,
|
|
1016
1016
|
log_tail_default_lines: 100,
|
|
1017
|
+
log_rotate_bytes: 134217728,
|
|
1017
1018
|
worker_output_line_max_chars: 4096,
|
|
1018
1019
|
worker_stdout_tail_max_chars: 65536,
|
|
1019
1020
|
control_lock_wait_attempts: 400,
|
|
@@ -1446,11 +1447,6 @@ var init_runtime_policy_generated = __esm({
|
|
|
1446
1447
|
code_max_length: 24,
|
|
1447
1448
|
dashboard_default_limit: 20
|
|
1448
1449
|
},
|
|
1449
|
-
insights: {
|
|
1450
|
-
client_host: {
|
|
1451
|
-
device_read_default_result_bytes: 2e5
|
|
1452
|
-
}
|
|
1453
|
-
},
|
|
1454
1450
|
agent_tokens: {
|
|
1455
1451
|
browser_login_ttl_seconds: 600,
|
|
1456
1452
|
browser_login_poll_interval_seconds: 2
|
|
@@ -1460,7 +1456,7 @@ var init_runtime_policy_generated = __esm({
|
|
|
1460
1456
|
});
|
|
1461
1457
|
|
|
1462
1458
|
// lib/constants.ts
|
|
1463
|
-
var MS_PER_SECOND, SECONDS_PER_MINUTE, MINUTES_PER_HOUR, HOURS_PER_DAY, DAYS_PER_WEEK, MS_PER_MINUTE, SECONDS_PER_HOUR, SECONDS_PER_DAY, SECONDS_PER_WEEK, MINUTES_PER_DAY, MINUTES_PER_WEEK, MS_PER_HOUR, MS_PER_DAY, READ_STAMP_TIE_MS, READ_STAMP_STEP_BACK_MS, CLOCK_FIELD_DIGITS, BACKOFF_GROWTH_FACTOR, BYTES_PER_KIB, BYTES_PER_MIB, BITS_PER_BYTE, BYTE_MASK, OWNER_ONLY_FILE_MODE, OWNER_ONLY_DIRECTORY_MODE, GROUP_OTHER_PERMISSION_BITS, DECIMAL_RADIX, HEX_RADIX, BASE36_RADIX, BYTE_HEX_DIGITS, UINT32_HEX_DIGITS, RANDOM_FRACTION_PREFIX_LENGTH, PERCENT_SCALE, MIDPOINT_DIVISOR, SQUARE_EXPONENT, FNV1A_32_OFFSET_BASIS, FNV1A_32_PRIME, JSON_INDENT_SPACES, INT32_MIN, INT32_MAX, SET_TIMEOUT_MAX_DELAY_MS, HTTP_STATUS, HTTP_STATUS_MIN, HTTP_STATUS_MAX, HTTP_CLIENT_ERROR_MIN, HTTP_SERVER_ERROR_MIN, AI_COST_ESTIMATE_PERIOD_DAYS, SECONDS_PER_AI_COST_ESTIMATE_PERIOD, DATE_FIELD_DIGITS, EXTERNAL_INFERENCE_LIMITS, NODE_ARGV_COMMAND_ARGS_START, EXIT_CODE_TEMPFAIL, SHA256_INITIAL_STATE, SHA256_ROUND_CONSTANTS, SHA256, UINT64_HIGH_WORD_DIVISOR, CANONICAL_BASE64URL, INFERENCE_ENVELOPE_CRYPTO, EXTERNAL_INFERENCE_SCHEMA_BOUNDS, JSON_RPC_ERROR_CODES, INFERENCE_MCP_SCHEMA_PROBE_MAX_DEPTH, INFERENCE_HOST_PROCESS_LOCK_RECORD_SCHEMA_VERSION, INFERENCE_HOST_RECLAIM_GUARD_CREATE_PASSES, LINUX_PROC_STAT_COMM_TERMINATOR_CHARS, INFERENCE_HOST_RANDOM_BYTES, INFERENCE_OAUTH_TOKEN_MAX_LENGTH, INFERENCE_CREDENTIAL_WINDOWS_NOT_FOUND_EXIT_CODE, MACOS_SECURITY_ITEM_NOT_FOUND_EXIT_CODE, INFERENCE_CREDENTIAL_LABEL_ACCOUNT_KEY_CHARS, INFERENCE_HOST_STABLE_OPERATION_ID_HASH_CHARS, INFERENCE_HOST_DRAIN_PRIORITY, INFERENCE_JOB_CLAIM_SCHEMA_VERSION, INFERENCE_HOST_WINDOWS_TASK_IDENTITY_MAX_CHARS, INFERENCE_HOST_OWNER_ONLY_EXECUTABLE_MODE, WINDOWS_TASKKILL_PROCESS_NOT_FOUND_EXIT_CODE, INFERENCE_HOST_CLI_MAX_SERVICE_POSITIONALS, INFERENCE_HOST_CLI_MAX_COMMAND_POSITIONALS, INFERENCE_HOST_DISPLAY_NAME_MAX_CHARS, INFERENCE_HOST_REVOCATION_CHECKPOINT_MAX_CHARS,
|
|
1459
|
+
var MS_PER_SECOND, SECONDS_PER_MINUTE, MINUTES_PER_HOUR, HOURS_PER_DAY, DAYS_PER_WEEK, MS_PER_MINUTE, SECONDS_PER_HOUR, SECONDS_PER_DAY, SECONDS_PER_WEEK, MINUTES_PER_DAY, MINUTES_PER_WEEK, MS_PER_HOUR, MS_PER_DAY, READ_STAMP_TIE_MS, READ_STAMP_STEP_BACK_MS, CLOCK_FIELD_DIGITS, BACKOFF_GROWTH_FACTOR, BYTES_PER_KIB, BYTES_PER_MIB, BITS_PER_BYTE, BYTE_MASK, OWNER_ONLY_FILE_MODE, OWNER_ONLY_DIRECTORY_MODE, GROUP_OTHER_PERMISSION_BITS, DECIMAL_RADIX, HEX_RADIX, BASE36_RADIX, BYTE_HEX_DIGITS, UINT32_HEX_DIGITS, RANDOM_FRACTION_PREFIX_LENGTH, PERCENT_SCALE, MIDPOINT_DIVISOR, SQUARE_EXPONENT, FNV1A_32_OFFSET_BASIS, FNV1A_32_PRIME, JSON_INDENT_SPACES, INT32_MIN, INT32_MAX, SET_TIMEOUT_MAX_DELAY_MS, POSITION_SIZE_EPSILON, CANDLE_TIMEFRAME_SECONDS, HTTP_STATUS, HTTP_STATUS_MIN, HTTP_STATUS_MAX, HTTP_CLIENT_ERROR_MIN, HTTP_SERVER_ERROR_MIN, AI_COST_ESTIMATE_PERIOD_DAYS, SECONDS_PER_AI_COST_ESTIMATE_PERIOD, DATE_FIELD_DIGITS, EXTERNAL_INFERENCE_LIMITS, NODE_ARGV_COMMAND_ARGS_START, EXIT_CODE_TEMPFAIL, SHA256_INITIAL_STATE, SHA256_ROUND_CONSTANTS, SHA256, UINT64_HIGH_WORD_DIVISOR, CANONICAL_BASE64URL, INFERENCE_ENVELOPE_CRYPTO, EXTERNAL_INFERENCE_SCHEMA_BOUNDS, JSON_RPC_ERROR_CODES, INFERENCE_MCP_SCHEMA_PROBE_MAX_DEPTH, INFERENCE_HOST_PROCESS_LOCK_RECORD_SCHEMA_VERSION, INFERENCE_HOST_RECLAIM_GUARD_CREATE_PASSES, LINUX_PROC_STAT_COMM_TERMINATOR_CHARS, INFERENCE_HOST_RANDOM_BYTES, INFERENCE_OAUTH_TOKEN_MAX_LENGTH, INFERENCE_CREDENTIAL_WINDOWS_NOT_FOUND_EXIT_CODE, MACOS_SECURITY_ITEM_NOT_FOUND_EXIT_CODE, INFERENCE_CREDENTIAL_LABEL_ACCOUNT_KEY_CHARS, INFERENCE_HOST_STABLE_OPERATION_ID_HASH_CHARS, INFERENCE_HOST_DRAIN_PRIORITY, INFERENCE_JOB_CLAIM_SCHEMA_VERSION, INFERENCE_HOST_WINDOWS_TASK_IDENTITY_MAX_CHARS, INFERENCE_HOST_OWNER_ONLY_EXECUTABLE_MODE, WINDOWS_TASKKILL_PROCESS_NOT_FOUND_EXIT_CODE, INFERENCE_HOST_CLI_MAX_SERVICE_POSITIONALS, INFERENCE_HOST_CLI_MAX_COMMAND_POSITIONALS, INFERENCE_HOST_DISPLAY_NAME_MAX_CHARS, INFERENCE_HOST_REVOCATION_CHECKPOINT_MAX_CHARS, INFERENCE_HOST_MODEL_ID_MAX_CHARS, CODEX_RECOVERY_RECEIPT_MAX_CHARS, CODEX_HOSTED_ATTEMPT_PATH_SEGMENTS, CODEX_GUARDIAN_PROCESS_TOKEN_BYTES, CODEX_RATE_LIMIT_EXHAUSTED_PERCENT, INFERENCE_HOST_PROXY_TOKEN_BYTES, GROK_TOOL_SERVER_TOKEN_BYTES, GROK_NATIVE_SESSION_GROUP_NAME_MAX_CHARS, GROK_POLICY_TRANSPORT_MAX_BYTES, EXO_POLICY_MAX_TOOL_ROUNDS, EXO_POLICY_MAX_MODELS, EXO_POLICY_MODEL_NAME_MAX_CHARS, EXO_RUNTIME_VERSION_COMMIT_CHARS, PI_QUALIFIED_MODEL_ID_MAX_CHARS, PI_STRUCTURED_OUTPUT_MAX_DEPTH, PI_STRUCTURED_OUTPUT_MAX_PROPERTIES, INFERENCE_HOST_API_KEY_MIN_CHARS, INFERENCE_HOST_API_KEY_MAX_BYTES, INFERENCE_HOST_API_KEY_IDENTITY_HEX_CHARS, DEEPSEEK_HARNESS_NODE_LTS_MAJOR, DEEPSEEK_HARNESS_NODE_LTS_MIN_MINOR, DEEPSEEK_HARNESS_NODE_CURRENT_MAJOR, PROMPT_FIXED_DIGITS, PROMPT_SIGNIFICANT_DIGITS, PROMPT_NUMBER_MAX_DIGITS, PROMPT_PRICE_INTEGER_THRESHOLD, PROMPT_MARGIN_UTILIZATION_DECIMALS, PROMPT_SYMBOL_MAX_CHARS, PROMPT_PARTIAL_UNIT_ROUND_UP_FRACTION, HALF_UP_ROUNDING_OFFSET, PROMPT_ENTRY_PRICE_MATCH_ABS_TOLERANCE, PROMPT_ENTRY_PRICE_MATCH_REL_TOLERANCE, DECISION_OUTPUT_EXAMPLE_TRADABILITY, INDICATOR_RSI_PERIOD, INDICATOR_ATR_PERIOD, INDICATOR_MACD_FAST_PERIOD, INDICATOR_MACD_SLOW_PERIOD, INDICATOR_MACD_SIGNAL_PERIOD, INDICATOR_BOLLINGER_PERIOD, INDICATOR_BOLLINGER_STD_DEV, INDICATOR_OSCILLATOR_MAX, EMA_SMOOTHING_NUMERATOR, PROMPT_EMA_PERIODS, JSON_UNICODE_ESCAPE_PREFIX_LENGTH, JSON_UNICODE_ESCAPE_HEX_DIGITS, JSON_CONTROL_CHARACTER_MAX, RUNTIME_DEBUG_SNIPPET_CHARS, RUNTIME_DEBUG_PROMPT_SNIPPET_CHARS, RUNTIME_DEBUG_TOKEN_PREFIX_CHARS, RUNTIME_DEBUG_USD_DECIMALS, REVIEW_FAILURE_DETAIL_MAX_CHARS, RUNTIME_LATENCY_SECONDS_DECIMALS, AI_SCHEDULE_CLOCK_PARTS, ESTIMATED_CHARS_PER_TOKEN, PROVIDER_ERROR_RAW_TEXT_MAX_CHARS, AI_CALL_COST_DECIMALS, PROVIDER_DIAGNOSTIC_LIMITS, AI_INVOCATION_CONTRACT_VERSION, AI_INVOCATION_TELEMETRY_LIMITS, PROVIDER_USAGE_DETAIL_LIMITS, HYPERLIQUID_EXCHANGE_SPECIFICATION, HYPERLIQUID_TPSL_BATCH_MIN_ORDERS, HYPERLIQUID_USER_FILLS_PROVIDER_PAGE_CAP, HYPERLIQUID_META_AND_ASSET_CTXS_PARTS, HYPERLIQUID_SIDE_PAIR_LENGTH, HYPERLIQUID_SIGNED_SIZE_MATCH_EXTRA_DECIMALS, HYPERLIQUID_OPEN_ORDERS_MAX_NESTING_DEPTH, ACCOUNT_PAYLOAD_MODE_SEARCH_MAX_DEPTH, HYPERLIQUID_ACCOUNT_ROUNDING_DECIMALS, HYPERLIQUID_UNREALIZED_PNL_ZERO_TOLERANCE, HYPERLIQUID_MAX_DEPLOYER_FEE_SCALE, HYPERLIQUID_DEPLOYER_FEE_SCALE_MULTIPLIER, HYPERLIQUID_GROWTH_MODE_FEE_FACTOR, HYPERLIQUID_ALIGNED_QUOTE_NON_DEPLOYER_FEE_FACTOR, HYPERLIQUID_CLOSE_SIZE_RELATIVE_TOLERANCE, HYPERLIQUID_POSITION_SIZE_MATCH_ABS_TOLERANCE, HYPERLIQUID_POSITION_SIZE_MATCH_RELATIVE_TOLERANCE, HYPERLIQUID_LOT_FLOOR_NOISE_DECIMALS, HYPERLIQUID_RECOVERY_BACKOFF_MAX_EXPONENT, HYPERLIQUID_RECOVERY_JITTER_MIN_FACTOR, HYPERLIQUID_RECOVERY_CONCURRENCY_GROWTH_FACTOR, UUID_BYTES, UUID_HEX_GROUP_ENDS, MSGPACK, CLIENT_RUNTIME_DEFAULT_RETRY_SECONDS, CLIENT_RUNTIME_PROVIDER_ATTEMPT_SUMMARY_MAX_CHARS, CLIENT_RUNTIME_HL_REQUEST_TYPE_MAX_CHARS, CLIENT_RUNTIME_DRAWDOWN_DEBUG_DECIMALS, CLIENT_PROTECTIVE_GROUP_VERSION, CLIENT_PROTECTIVE_TPSL_PAIR_LEGS, CLIENT_PROTECTIVE_FILL_MATCH_ABS_TOLERANCE, CLIENT_PROTECTIVE_FILL_MATCH_REL_TOLERANCE, CLIENT_CLOSE_FILL_EPSILON_ULPS, COPY_TRADING_SIZE_EPSILON, COPY_TRADING_RELATIVE_SIZE_TOLERANCE, COPY_TRADING_NOTIONAL_CAP_TOLERANCE_USD, CLIENT_ACCOUNT_PNL_NONZERO_MIN_USD, RUNTIME_PORTFOLIO_PERIOD_ENTRY_LENGTH, CLIENT_EXCHANGE_RECONCILIATION_MAX_DELAY_MS, RFC1918_172_BLOCK_SECOND_OCTET, AGENT_CLI_TAKEOVER_REQUIRED_EXIT_CODE, EXIT_CODE_INTERRUPTED, EXIT_CODE_SIGNAL_BASE, BYOK_PROVIDER_DISPLAY_ORDER_STEP, TOKENS_PER_MILLION, RENDER_DEBUG_ID_RANDOM_CHARS;
|
|
1464
1460
|
var init_constants = __esm({
|
|
1465
1461
|
"lib/constants.ts"() {
|
|
1466
1462
|
"use strict";
|
|
@@ -1506,6 +1502,24 @@ var init_constants = __esm({
|
|
|
1506
1502
|
INT32_MIN = -(2 ** 31);
|
|
1507
1503
|
INT32_MAX = 2 ** 31 - 1;
|
|
1508
1504
|
SET_TIMEOUT_MAX_DELAY_MS = INT32_MAX;
|
|
1505
|
+
POSITION_SIZE_EPSILON = 1e-5;
|
|
1506
|
+
CANDLE_TIMEFRAME_SECONDS = {
|
|
1507
|
+
"1m": SECONDS_PER_MINUTE,
|
|
1508
|
+
"3m": 3 * SECONDS_PER_MINUTE,
|
|
1509
|
+
"5m": 5 * SECONDS_PER_MINUTE,
|
|
1510
|
+
"15m": 15 * SECONDS_PER_MINUTE,
|
|
1511
|
+
"30m": 30 * SECONDS_PER_MINUTE,
|
|
1512
|
+
"1h": SECONDS_PER_HOUR,
|
|
1513
|
+
"2h": 2 * SECONDS_PER_HOUR,
|
|
1514
|
+
"4h": 4 * SECONDS_PER_HOUR,
|
|
1515
|
+
"6h": 6 * SECONDS_PER_HOUR,
|
|
1516
|
+
"8h": 8 * SECONDS_PER_HOUR,
|
|
1517
|
+
"12h": 12 * SECONDS_PER_HOUR,
|
|
1518
|
+
"1d": SECONDS_PER_DAY,
|
|
1519
|
+
"3d": 3 * SECONDS_PER_DAY,
|
|
1520
|
+
"1w": SECONDS_PER_WEEK,
|
|
1521
|
+
"1M": 30 * SECONDS_PER_DAY
|
|
1522
|
+
};
|
|
1509
1523
|
HTTP_STATUS = {
|
|
1510
1524
|
OK: 200,
|
|
1511
1525
|
ACCEPTED: 202,
|
|
@@ -1773,7 +1787,6 @@ var init_constants = __esm({
|
|
|
1773
1787
|
CLIENT_ID: 512,
|
|
1774
1788
|
HOST_ID: 512
|
|
1775
1789
|
};
|
|
1776
|
-
INFERENCE_HOST_RECOVERY_ATTEMPT_ID_MAX_CHARS = 256;
|
|
1777
1790
|
INFERENCE_HOST_MODEL_ID_MAX_CHARS = 256;
|
|
1778
1791
|
CODEX_RECOVERY_RECEIPT_MAX_CHARS = {
|
|
1779
1792
|
// Adapter request and response IDs.
|
|
@@ -1804,37 +1817,16 @@ var init_constants = __esm({
|
|
|
1804
1817
|
DEEPSEEK_HARNESS_NODE_LTS_MAJOR = 22;
|
|
1805
1818
|
DEEPSEEK_HARNESS_NODE_LTS_MIN_MINOR = 19;
|
|
1806
1819
|
DEEPSEEK_HARNESS_NODE_CURRENT_MAJOR = 24;
|
|
1807
|
-
PROMPT_TIMEFRAME_MINUTES = {
|
|
1808
|
-
"1m": 1,
|
|
1809
|
-
"3m": 3,
|
|
1810
|
-
"5m": 5,
|
|
1811
|
-
"15m": 15,
|
|
1812
|
-
"30m": 30,
|
|
1813
|
-
"1h": 60,
|
|
1814
|
-
"2h": 120,
|
|
1815
|
-
"4h": 240,
|
|
1816
|
-
"6h": 360,
|
|
1817
|
-
"8h": 480,
|
|
1818
|
-
"12h": 720,
|
|
1819
|
-
"1d": 1440,
|
|
1820
|
-
"3d": 4320,
|
|
1821
|
-
"1w": 10080,
|
|
1822
|
-
"1M": 43200
|
|
1823
|
-
};
|
|
1824
1820
|
PROMPT_FIXED_DIGITS = 2;
|
|
1825
1821
|
PROMPT_SIGNIFICANT_DIGITS = 5;
|
|
1826
1822
|
PROMPT_NUMBER_MAX_DIGITS = 100;
|
|
1827
1823
|
PROMPT_PRICE_INTEGER_THRESHOLD = 1e5;
|
|
1828
1824
|
PROMPT_MARGIN_UTILIZATION_DECIMALS = 1;
|
|
1829
1825
|
PROMPT_SYMBOL_MAX_CHARS = 100;
|
|
1830
|
-
PROMPT_POSITION_SIZE_EPSILON = 1e-5;
|
|
1831
|
-
PROMPT_UNIT_SIZE_FALLBACK_USDC = 10;
|
|
1832
1826
|
PROMPT_PARTIAL_UNIT_ROUND_UP_FRACTION = 0.5;
|
|
1833
1827
|
HALF_UP_ROUNDING_OFFSET = 0.5;
|
|
1834
1828
|
PROMPT_ENTRY_PRICE_MATCH_ABS_TOLERANCE = 1e-8;
|
|
1835
1829
|
PROMPT_ENTRY_PRICE_MATCH_REL_TOLERANCE = 1e-6;
|
|
1836
|
-
PROMPT_LOOKBACK_LAST_RESORT_CANDLES = 50;
|
|
1837
|
-
PROMPT_INDICATOR_CANDLE_COUNT_FALLBACK = 250;
|
|
1838
1830
|
DECISION_OUTPUT_EXAMPLE_TRADABILITY = 5;
|
|
1839
1831
|
INDICATOR_RSI_PERIOD = 14;
|
|
1840
1832
|
INDICATOR_ATR_PERIOD = 14;
|
|
@@ -1913,8 +1905,6 @@ var init_constants = __esm({
|
|
|
1913
1905
|
HYPERLIQUID_USER_FILLS_PROVIDER_PAGE_CAP = 2e3;
|
|
1914
1906
|
HYPERLIQUID_META_AND_ASSET_CTXS_PARTS = 2;
|
|
1915
1907
|
HYPERLIQUID_SIDE_PAIR_LENGTH = 2;
|
|
1916
|
-
HYPERLIQUID_MISSING_MAX_LEVERAGE_FALLBACK = 40;
|
|
1917
|
-
HYPERLIQUID_DEFAULT_MARKET_SLIPPAGE_FRACTION = 0.05;
|
|
1918
1908
|
HYPERLIQUID_SIGNED_SIZE_MATCH_EXTRA_DECIMALS = 4;
|
|
1919
1909
|
HYPERLIQUID_OPEN_ORDERS_MAX_NESTING_DEPTH = 32;
|
|
1920
1910
|
ACCOUNT_PAYLOAD_MODE_SEARCH_MAX_DEPTH = 6;
|
|
@@ -4116,8 +4106,8 @@ while(($line=[Console]::In.ReadLine()) -ne $null) {
|
|
|
4116
4106
|
return { state: "busy" };
|
|
4117
4107
|
}
|
|
4118
4108
|
const raw = opened.size > PROCESS_LOCK_MAX_RECORD_BYTES ? "" : await handle.readFile("utf8");
|
|
4119
|
-
const
|
|
4120
|
-
if (!sameProcessLockFile(opened,
|
|
4109
|
+
const stat2 = await handle.stat();
|
|
4110
|
+
if (!sameProcessLockFile(opened, stat2)) return { state: "busy" };
|
|
4121
4111
|
let record5 = null;
|
|
4122
4112
|
try {
|
|
4123
4113
|
const parsed = JSON.parse(raw);
|
|
@@ -4126,22 +4116,22 @@ while(($line=[Console]::In.ReadLine()) -ne $null) {
|
|
|
4126
4116
|
record5 = null;
|
|
4127
4117
|
}
|
|
4128
4118
|
if (!record5 || record5.schema_version !== INFERENCE_HOST_PROCESS_LOCK_RECORD_SCHEMA_VERSION || !Number.isSafeInteger(record5.pid) || Number(record5.pid) < 1 || typeof record5.owner_token !== "string" || !record5.owner_token || typeof record5.process_identity !== "string" || !record5.process_identity || typeof record5.boot_identity !== "string" || !record5.boot_identity) {
|
|
4129
|
-
if (Date.now() -
|
|
4119
|
+
if (Date.now() - stat2.mtimeMs < PROCESS_LOCK_PUBLICATION_GRACE_MS) return { state: "busy" };
|
|
4130
4120
|
stale = true;
|
|
4131
|
-
return { state: "stale", handle, stat };
|
|
4121
|
+
return { state: "stale", handle, stat: stat2 };
|
|
4132
4122
|
}
|
|
4133
4123
|
const ownerPid = Number(record5.pid);
|
|
4134
4124
|
const storedIdentity = record5.process_identity;
|
|
4135
4125
|
const cacheKey = resolve(path);
|
|
4136
4126
|
if (await probes.currentBootIdentity() === record5.boot_identity && probes.isProcessAlive(ownerPid)) {
|
|
4137
4127
|
const cached2 = processLockObservationCache.get(cacheKey);
|
|
4138
|
-
const observedIdentity = cached2 && cached2.dev ===
|
|
4128
|
+
const observedIdentity = cached2 && cached2.dev === stat2.dev && cached2.ino === stat2.ino && cached2.pid === ownerPid && cached2.storedIdentity === storedIdentity && Date.now() - cached2.observedAtMs < HOST_CORE_POLICY.process_lock_identity_cache_ms ? cached2.observedIdentity : await probes.observeIdentity(ownerPid);
|
|
4139
4129
|
if (!observedIdentity) {
|
|
4140
4130
|
throw new Error("Inference host could not verify the existing lock owner identity.");
|
|
4141
4131
|
}
|
|
4142
4132
|
processLockObservationCache.set(cacheKey, {
|
|
4143
|
-
dev:
|
|
4144
|
-
ino:
|
|
4133
|
+
dev: stat2.dev,
|
|
4134
|
+
ino: stat2.ino,
|
|
4145
4135
|
pid: ownerPid,
|
|
4146
4136
|
storedIdentity,
|
|
4147
4137
|
observedIdentity,
|
|
@@ -4152,7 +4142,7 @@ while(($line=[Console]::In.ReadLine()) -ne $null) {
|
|
|
4152
4142
|
}
|
|
4153
4143
|
}
|
|
4154
4144
|
stale = true;
|
|
4155
|
-
return { state: "stale", handle, stat };
|
|
4145
|
+
return { state: "stale", handle, stat: stat2 };
|
|
4156
4146
|
} finally {
|
|
4157
4147
|
if (!stale) await handle.close().catch(() => void 0);
|
|
4158
4148
|
}
|
|
@@ -4818,7 +4808,7 @@ var init_updater = __esm({
|
|
|
4818
4808
|
try {
|
|
4819
4809
|
await ensureUpdaterPrivateDirectory(paths.root, paths.root, { platform: input.platform });
|
|
4820
4810
|
} catch (error48) {
|
|
4821
|
-
const reason = `update_directory_unsafe: ${error48 instanceof Error ? error48.message.slice(0, runtime_policy_generated_default.agent_cli.
|
|
4811
|
+
const reason = `update_directory_unsafe: ${error48 instanceof Error ? error48.message.slice(0, runtime_policy_generated_default.agent_cli.update_failure_reason_max_chars) : "unknown"}`;
|
|
4822
4812
|
await appendCliUpdateLog(paths, "cli_update_failed", { package_version: target.version, reason });
|
|
4823
4813
|
return { kind: "failed", reason };
|
|
4824
4814
|
}
|
|
@@ -20321,7 +20311,6 @@ var init_runtime_policy_generated2 = __esm({
|
|
|
20321
20311
|
client_close_fill_sync_retry_step_ms: 300,
|
|
20322
20312
|
leverage_update_debounce_ms: 250,
|
|
20323
20313
|
post_leverage_update_order_delay_ms: 250,
|
|
20324
|
-
ai_control_lookback_fallback_candles: 25,
|
|
20325
20314
|
takeover_telemetry_error_chars: 500,
|
|
20326
20315
|
takeover_telemetry_error_name_chars: 120,
|
|
20327
20316
|
takeover_telemetry_failure_chars: 300,
|
|
@@ -20715,7 +20704,6 @@ var init_runtime_policy_generated2 = __esm({
|
|
|
20715
20704
|
market_data_failure_debug_max_entries: 20,
|
|
20716
20705
|
request_string_compact_above_chars: 500,
|
|
20717
20706
|
prompt_preview_chars: 220,
|
|
20718
|
-
provider_failure_snapshot_max_age_seconds: 300,
|
|
20719
20707
|
local_provider_probe_timeout_ms: 2e3,
|
|
20720
20708
|
preflight_failure_reason_chars: 200,
|
|
20721
20709
|
host_error_note_chars: 160,
|
|
@@ -20765,6 +20753,9 @@ var init_runtime_policy_generated2 = __esm({
|
|
|
20765
20753
|
tradability: {
|
|
20766
20754
|
score_min: 1,
|
|
20767
20755
|
score_max: 10
|
|
20756
|
+
},
|
|
20757
|
+
defaults: {
|
|
20758
|
+
server_ai_max_slippage: 5
|
|
20768
20759
|
}
|
|
20769
20760
|
},
|
|
20770
20761
|
agent_cli: {
|
|
@@ -20788,7 +20779,6 @@ var init_runtime_policy_generated2 = __esm({
|
|
|
20788
20779
|
],
|
|
20789
20780
|
browser_login_verifier_bytes: 32,
|
|
20790
20781
|
update_failure_reason_max_chars: 160,
|
|
20791
|
-
update_directory_failure_reason_max_chars: 120,
|
|
20792
20782
|
update_plan_max_attempts: 3,
|
|
20793
20783
|
supervisor_max_failed_release_starts: 2
|
|
20794
20784
|
},
|
|
@@ -20819,6 +20809,7 @@ var init_runtime_policy_generated2 = __esm({
|
|
|
20819
20809
|
update_failure_reason_max_chars: 160,
|
|
20820
20810
|
launcher_poll_interval_ms: 100,
|
|
20821
20811
|
log_tail_default_lines: 100,
|
|
20812
|
+
log_rotate_bytes: 134217728,
|
|
20822
20813
|
worker_output_line_max_chars: 4096,
|
|
20823
20814
|
worker_stdout_tail_max_chars: 65536,
|
|
20824
20815
|
control_lock_wait_attempts: 400,
|
|
@@ -21251,11 +21242,6 @@ var init_runtime_policy_generated2 = __esm({
|
|
|
21251
21242
|
code_max_length: 24,
|
|
21252
21243
|
dashboard_default_limit: 20
|
|
21253
21244
|
},
|
|
21254
|
-
insights: {
|
|
21255
|
-
client_host: {
|
|
21256
|
-
device_read_default_result_bytes: 2e5
|
|
21257
|
-
}
|
|
21258
|
-
},
|
|
21259
21245
|
agent_tokens: {
|
|
21260
21246
|
browser_login_ttl_seconds: 600,
|
|
21261
21247
|
browser_login_poll_interval_seconds: 2
|
|
@@ -26099,7 +26085,12 @@ var init_mcp_client = __esm({
|
|
|
26099
26085
|
} catch (error48) {
|
|
26100
26086
|
if (timing) timing.cancelBody();
|
|
26101
26087
|
else await response.body?.cancel().catch(() => void 0);
|
|
26102
|
-
throw error48;
|
|
26088
|
+
if (error48 instanceof ExternalInferenceMcpError) throw error48;
|
|
26089
|
+
throw new ExternalInferenceMcpError(
|
|
26090
|
+
options.signal?.aborted ? "request_aborted" : "network_error",
|
|
26091
|
+
options.signal?.aborted ? "Insights MCP request was aborted." : "Insights MCP response body could not be read.",
|
|
26092
|
+
{ cause: error48 }
|
|
26093
|
+
);
|
|
26103
26094
|
}
|
|
26104
26095
|
timing?.enter("response_validation_ms");
|
|
26105
26096
|
const document2 = documents.find((candidate) => candidate.id === requestId);
|
|
@@ -32670,7 +32661,7 @@ async function logoutCodexSubscription(options) {
|
|
|
32670
32661
|
await session.close();
|
|
32671
32662
|
}
|
|
32672
32663
|
}
|
|
32673
|
-
var CODEX_INFERENCE_PERMISSION_PROFILE, CODEX_AGENT_PERMISSION_PROFILE, CODEX_REASONING_CONTENT_MAX_UTF8_BYTES, CODEX_REASONING_SUMMARY_MAX_UTF8_BYTES, HOST_RUNTIME_POLICY, CODEX_ACCOUNT_PLAN_TYPES, CODEX_AGENT_DYNAMIC_TOOLS, CodexAppServerError, objectOrNull, finiteToken, tokenUsageFromBreakdown, usageFromNotification, validPlanType, nonnegativeSafeIntegerOrNull, nonnegativeFiniteNumberOrNull, parseRateLimitWindow, RATE_LIMIT_REACHED_TYPES, DEFAULT_CODEX_QUOTA_COOLDOWN_MS, MAX_CODEX_QUOTA_COOLDOWN_MS, CODEX_TRANSIENT_RATE_LIMIT_COOLDOWN_MS, parseCreditsSnapshot, codexCreditsAvailable, parseRateLimitSnapshot, codexRateLimitRetryAtMs, codexAccountRateLimitReached, forbiddenMethod, forbiddenTerminalItem, forbiddenAgentMethod, forbiddenAgentTerminalItem, createCodexAgentToolSpecs, classifyCodexTurnFailure, scrubbedCodexEnvironment, killWindowsProcessTree, appServerArgs, GUARDIAN_SCRIPT, WINDOWS_RECEIPT_REPLACE_ERROR_CODES, MAX_RETIRED_RESPONSE_IDS, LATE_RESPONSE_SAFE_METHODS, replaceCodexGuardianReceiptFile, writeCodexGuardianSpawnIntent, parseGuardianReceipt, readCodexGuardianReceipt, waitForCodexGuardianState, defaultSpawn, CodexAppServerSession;
|
|
32664
|
+
var CODEX_INFERENCE_PERMISSION_PROFILE, CODEX_AGENT_PERMISSION_PROFILE, CODEX_REASONING_CONTENT_MAX_UTF8_BYTES, CODEX_REASONING_SUMMARY_MAX_UTF8_BYTES, utf8Prefix, reasoningContentPrefix, HOST_RUNTIME_POLICY, CODEX_ACCOUNT_PLAN_TYPES, CODEX_AGENT_DYNAMIC_TOOLS, CodexAppServerError, objectOrNull, finiteToken, tokenUsageFromBreakdown, usageFromNotification, validPlanType, nonnegativeSafeIntegerOrNull, nonnegativeFiniteNumberOrNull, parseRateLimitWindow, RATE_LIMIT_REACHED_TYPES, DEFAULT_CODEX_QUOTA_COOLDOWN_MS, MAX_CODEX_QUOTA_COOLDOWN_MS, CODEX_TRANSIENT_RATE_LIMIT_COOLDOWN_MS, parseCreditsSnapshot, codexCreditsAvailable, parseRateLimitSnapshot, codexRateLimitRetryAtMs, codexAccountRateLimitReached, forbiddenMethod, forbiddenTerminalItem, forbiddenAgentMethod, forbiddenAgentTerminalItem, createCodexAgentToolSpecs, classifyCodexTurnFailure, scrubbedCodexEnvironment, killWindowsProcessTree, appServerArgs, GUARDIAN_SCRIPT, WINDOWS_RECEIPT_REPLACE_ERROR_CODES, MAX_RETIRED_RESPONSE_IDS, LATE_RESPONSE_SAFE_METHODS, replaceCodexGuardianReceiptFile, writeCodexGuardianSpawnIntent, parseGuardianReceipt, readCodexGuardianReceipt, waitForCodexGuardianState, defaultSpawn, CodexAppServerSession;
|
|
32674
32665
|
var init_codex_app_server = __esm({
|
|
32675
32666
|
"lib/inference-host/codex-app-server.ts"() {
|
|
32676
32667
|
"use strict";
|
|
@@ -32684,6 +32675,18 @@ var init_codex_app_server = __esm({
|
|
|
32684
32675
|
CODEX_AGENT_PERMISSION_PROFILE = "vtx_inference_agent";
|
|
32685
32676
|
CODEX_REASONING_CONTENT_MAX_UTF8_BYTES = EXTERNAL_INFERENCE_LIMITS.max_reasoning_content_utf8_bytes;
|
|
32686
32677
|
CODEX_REASONING_SUMMARY_MAX_UTF8_BYTES = EXTERNAL_INFERENCE_LIMITS.max_reasoning_summary_utf8_bytes;
|
|
32678
|
+
utf8Prefix = (text, maxBytes) => {
|
|
32679
|
+
if (Buffer.byteLength(text) <= maxBytes) return text;
|
|
32680
|
+
let prefix = "";
|
|
32681
|
+
let bytes3 = 0;
|
|
32682
|
+
for (const character of text) {
|
|
32683
|
+
bytes3 += Buffer.byteLength(character);
|
|
32684
|
+
if (bytes3 > maxBytes) break;
|
|
32685
|
+
prefix += character;
|
|
32686
|
+
}
|
|
32687
|
+
return prefix;
|
|
32688
|
+
};
|
|
32689
|
+
reasoningContentPrefix = (text) => utf8Prefix(text, CODEX_REASONING_CONTENT_MAX_UTF8_BYTES);
|
|
32687
32690
|
HOST_RUNTIME_POLICY = runtime_policy_generated_default.external_inference.host_runtime;
|
|
32688
32691
|
CODEX_ACCOUNT_PLAN_TYPES = [
|
|
32689
32692
|
"free",
|
|
@@ -37657,6 +37660,11 @@ var init_runner = __esm({
|
|
|
37657
37660
|
} catch (error48) {
|
|
37658
37661
|
if (claimTiming) emitDiagnostic("claim_request_failed", {
|
|
37659
37662
|
claim_request_id: request.claim_request_id,
|
|
37663
|
+
failure_code: safeFailureCode(
|
|
37664
|
+
error48 instanceof ExternalInferenceMcpError ? error48.code : "",
|
|
37665
|
+
"claim_failed"
|
|
37666
|
+
),
|
|
37667
|
+
http_status_code: error48 instanceof ExternalInferenceMcpError ? error48.httpStatusCode : null,
|
|
37660
37668
|
client_timing: claimTiming
|
|
37661
37669
|
});
|
|
37662
37670
|
if (!this.options.signal?.aborted && request.schema_version === "external_inference_job_claim_v3" && error48 instanceof ExternalInferenceMcpError && error48.serverFailureCode === "schema_validation") {
|
|
@@ -38607,25 +38615,23 @@ var init_runner = __esm({
|
|
|
38607
38615
|
`${adapterId} response text exceeds the immutable provider-response UTF-8 byte limit.`
|
|
38608
38616
|
);
|
|
38609
38617
|
}
|
|
38610
|
-
|
|
38611
|
-
|
|
38612
|
-
|
|
38613
|
-
|
|
38614
|
-
);
|
|
38615
|
-
}
|
|
38616
|
-
if (outputContract.providerReasoningSummarySupported && outputContract.providerReasoningSummaryMaxUtf8Bytes !== null && adapterResult.reasoningSummary !== null && Buffer.byteLength(adapterResult.reasoningSummary, "utf8") > outputContract.providerReasoningSummaryMaxUtf8Bytes) {
|
|
38617
|
-
throw new InferenceHostRunnerError(
|
|
38618
|
-
"output_schema_reasoning_summary_too_large",
|
|
38619
|
-
"Codex reasoning summary exceeds the immutable provider-response UTF-8 byte limit."
|
|
38620
|
-
);
|
|
38621
|
-
}
|
|
38618
|
+
const reasoningWithin = (text, maxBytes) => {
|
|
38619
|
+
const prefix = text === null || maxBytes === null ? text : utf8Prefix(text, maxBytes);
|
|
38620
|
+
return prefix?.trim() ? prefix : null;
|
|
38621
|
+
};
|
|
38622
38622
|
const providerResponse = {
|
|
38623
38623
|
schema_version: outputContract.providerResponseSchemaVersion,
|
|
38624
38624
|
response_text: adapterResult.text,
|
|
38625
38625
|
finish_reason: finishReason,
|
|
38626
38626
|
refusal_status: refusalStatus,
|
|
38627
|
-
...outputContract.providerReasoningContentSupported ? { reasoning_content:
|
|
38628
|
-
|
|
38627
|
+
...outputContract.providerReasoningContentSupported ? { reasoning_content: reasoningWithin(
|
|
38628
|
+
adapterResult.reasoningContent,
|
|
38629
|
+
outputContract.providerReasoningContentMaxUtf8Bytes
|
|
38630
|
+
) } : {},
|
|
38631
|
+
...outputContract.providerReasoningSummarySupported ? { reasoning_summary: reasoningWithin(
|
|
38632
|
+
adapterResult.reasoningSummary,
|
|
38633
|
+
outputContract.providerReasoningSummaryMaxUtf8Bytes
|
|
38634
|
+
) } : {}
|
|
38629
38635
|
};
|
|
38630
38636
|
validateOutput(outputContract.providerResponseSchema, providerResponse);
|
|
38631
38637
|
sealedPlaintext = JSON.stringify(providerResponse);
|
|
@@ -40395,7 +40401,7 @@ var init_codex_adapter = __esm({
|
|
|
40395
40401
|
]);
|
|
40396
40402
|
recoveryCheckpointSchema = external_exports.strictObject({
|
|
40397
40403
|
schemaVersion: external_exports.literal("vtx_codex_attempt_recovery_v1"),
|
|
40398
|
-
attemptId:
|
|
40404
|
+
attemptId: identifierSchema,
|
|
40399
40405
|
inputSha256: external_exports.string().regex(/^[0-9a-f]{64}$/u),
|
|
40400
40406
|
codexHome: external_exports.string().min(1).max(CODEX_RECOVERY_RECEIPT_MAX_CHARS.PATH),
|
|
40401
40407
|
resourceRoot: external_exports.string().min(1).max(CODEX_RECOVERY_RECEIPT_MAX_CHARS.PATH),
|
|
@@ -40583,7 +40589,7 @@ var init_codex_adapter = __esm({
|
|
|
40583
40589
|
};
|
|
40584
40590
|
};
|
|
40585
40591
|
validateAttemptInput = (input) => {
|
|
40586
|
-
if (
|
|
40592
|
+
if (!identifierSchema.safeParse(input.attemptId).success || !/^[0-9a-f]{64}$/u.test(input.inputSha256)) {
|
|
40587
40593
|
throw new CodexAppServerError({
|
|
40588
40594
|
message: "Codex attempt identity is invalid.",
|
|
40589
40595
|
category: "adapter",
|
|
@@ -41242,7 +41248,7 @@ var init_codex_adapter = __esm({
|
|
|
41242
41248
|
return promise2;
|
|
41243
41249
|
}
|
|
41244
41250
|
async acknowledgeAttempt(attemptId) {
|
|
41245
|
-
if (
|
|
41251
|
+
if (!identifierSchema.safeParse(attemptId).success) {
|
|
41246
41252
|
throw new CodexAppServerError({
|
|
41247
41253
|
message: "Codex attempt identity is invalid.",
|
|
41248
41254
|
category: "adapter",
|
|
@@ -44207,7 +44213,7 @@ var init_pi_adapter = __esm({
|
|
|
44207
44213
|
if (!agent) input.onTerminalDispatchOutcome?.("confirmed_dispatched");
|
|
44208
44214
|
return { thread, tools, turn: {
|
|
44209
44215
|
text,
|
|
44210
|
-
reasoningContent: reasoning ?
|
|
44216
|
+
reasoningContent: reasoning ? reasoningContentPrefix(reasoning) : null,
|
|
44211
44217
|
reasoningSummary: null,
|
|
44212
44218
|
requestedModel: input.requestedModel,
|
|
44213
44219
|
effectiveModel,
|
|
@@ -45549,7 +45555,7 @@ var init_grok_state = __esm({
|
|
|
45549
45555
|
// lib/inference-host/grok-adapter.ts
|
|
45550
45556
|
import { randomUUID as randomUUID9 } from "node:crypto";
|
|
45551
45557
|
import { join as join13 } from "node:path";
|
|
45552
|
-
var HOST_RUNTIME_POLICY10, unwrap, list, nonempty, integer2, grokModelCapabilities, grokPromptUsage, agentProfile, modelState, assertSelection, GrokBuildAdapter;
|
|
45558
|
+
var HOST_RUNTIME_POLICY10, unwrap, list, nonempty, integer2, grokModelCapabilities, appendGrokThought, grokPromptUsage, agentProfile, modelState, assertSelection, GrokBuildAdapter;
|
|
45553
45559
|
var init_grok_adapter = __esm({
|
|
45554
45560
|
"lib/inference-host/grok-adapter.ts"() {
|
|
45555
45561
|
"use strict";
|
|
@@ -45593,6 +45599,11 @@ var init_grok_adapter = __esm({
|
|
|
45593
45599
|
isDefault: state2.currentModelId === model.modelId
|
|
45594
45600
|
}];
|
|
45595
45601
|
});
|
|
45602
|
+
appendGrokThought = (thought, chunk) => {
|
|
45603
|
+
if (!thought.open) return thought;
|
|
45604
|
+
const text = reasoningContentPrefix(thought.text + chunk);
|
|
45605
|
+
return { text, open: text.length === thought.text.length + chunk.length };
|
|
45606
|
+
};
|
|
45596
45607
|
grokPromptUsage = (value, expectedModel) => {
|
|
45597
45608
|
const usage = grokObject(value);
|
|
45598
45609
|
if (usage.usageIsIncomplete === true) throw new Error("grok_usage_incomplete");
|
|
@@ -45786,7 +45797,7 @@ var init_grok_adapter = __esm({
|
|
|
45786
45797
|
let session = null;
|
|
45787
45798
|
let sessionId = agent?.durableThread?.threadId ?? null;
|
|
45788
45799
|
let retained = Boolean(agent?.durableThread);
|
|
45789
|
-
let thought = "";
|
|
45800
|
+
let thought = { text: "", open: true };
|
|
45790
45801
|
let firstToken = null;
|
|
45791
45802
|
let activeThread = null;
|
|
45792
45803
|
try {
|
|
@@ -45925,7 +45936,7 @@ var init_grok_adapter = __esm({
|
|
|
45925
45936
|
const text2 = grokObject(update.content).text;
|
|
45926
45937
|
if (typeof text2 !== "string") return;
|
|
45927
45938
|
if (update.sessionUpdate === "agent_message_chunk" && firstToken === null) firstToken = Date.now() - startedAt;
|
|
45928
|
-
if (update.sessionUpdate === "agent_thought_chunk"
|
|
45939
|
+
if (update.sessionUpdate === "agent_thought_chunk") thought = appendGrokThought(thought, text2);
|
|
45929
45940
|
};
|
|
45930
45941
|
const promptId = randomUUID9();
|
|
45931
45942
|
const result = await session.request("session/prompt", {
|
|
@@ -45952,7 +45963,7 @@ var init_grok_adapter = __esm({
|
|
|
45952
45963
|
provider?.onTerminalDispatchOutcome?.("confirmed_dispatched");
|
|
45953
45964
|
return { thread: effectiveThread, turn: {
|
|
45954
45965
|
text,
|
|
45955
|
-
reasoningContent: thought || null,
|
|
45966
|
+
reasoningContent: thought.text || null,
|
|
45956
45967
|
reasoningSummary: null,
|
|
45957
45968
|
requestedModel: input.requestedModel,
|
|
45958
45969
|
effectiveModel: actualModel,
|
|
@@ -47191,11 +47202,13 @@ var init_service_launcher_state = __esm({
|
|
|
47191
47202
|
// lib/inference-host/service.ts
|
|
47192
47203
|
import { spawn as spawn11 } from "node:child_process";
|
|
47193
47204
|
import { randomUUID as randomUUID11 } from "node:crypto";
|
|
47194
|
-
import { createWriteStream, readFileSync as readFileSync2 } from "node:fs";
|
|
47195
|
-
import { access as access6, chmod as chmod4, mkdir as mkdir5, readFile as readFile12, rm as rm14, writeFile as writeFile5 } from "node:fs/promises";
|
|
47205
|
+
import { createReadStream, createWriteStream, readFileSync as readFileSync2 } from "node:fs";
|
|
47206
|
+
import { access as access6, appendFile as appendFile2, chmod as chmod4, mkdir as mkdir5, readFile as readFile12, rm as rm14, stat, truncate, writeFile as writeFile5 } from "node:fs/promises";
|
|
47196
47207
|
import { homedir as homedir4 } from "node:os";
|
|
47197
47208
|
import { dirname as dirname15, join as join16, resolve as resolve12 } from "node:path";
|
|
47198
|
-
|
|
47209
|
+
import { Transform } from "node:stream";
|
|
47210
|
+
import { pipeline } from "node:stream/promises";
|
|
47211
|
+
var SERVICE_NAME, SYSTEMD_UNIT, LAUNCHD_LABEL, SERVICE_POLICY, ATOMIC_REPLACEMENT_READ_ATTEMPTS, SERVICE_COOPERATIVE_STOP_SECONDS, pollAttemptsWithin, INFERENCE_HOST_SERVICE_DRAIN_COMMAND, INFERENCE_HOST_SERVICE_QUIESCE_COMMAND, InferenceHostBootstrapRestartRequiredError, inferenceHostServiceChildEnvironment, isWindowsSubsystemForLinux, inferenceHostServiceManifestPath, inferenceHostServiceDesiredPath, inferenceHostServiceLogPath, inferenceHostServiceRotatedLogPath, inferenceHostServiceRuntimePath, xmlEscape, plistEscape, systemdQuote, defaultRunCommand, probeInferenceHostLauncher, managerName, assertRuntimeEnvironment, withoutConcurrencyLimit, assertServicePath, manifestGeneration, assertWorker, assertManifest, assertServiceRuntimeState, assertDesiredState, readInferenceHostServiceManifest, readManifestAcrossAtomicReplacement, readInferenceHostServiceRuntime, readRuntimeAcrossAtomicReplacement, readInferenceHostServiceDesired, readDesiredAcrossAtomicReplacement, writeDesired, runtimeEnvironment, serviceBootstrapArguments, windowsOwnedCommandLine, vbScriptString, windowsServiceLauncher, windowsTaskXml, systemdUnit, launchAgentPlist, sameWorker, sameServiceDefinition, sameWorkerSet, InferenceHostServiceManager, serviceLogSinks, serviceLogSize, rotateServiceLog, writeServiceLog, appendServiceLog, spawnInferenceHostServiceChild, runInferenceHostServiceSupervisor;
|
|
47199
47212
|
var init_service = __esm({
|
|
47200
47213
|
"lib/inference-host/service.ts"() {
|
|
47201
47214
|
"use strict";
|
|
@@ -47247,6 +47260,7 @@ var init_service = __esm({
|
|
|
47247
47260
|
inferenceHostServiceManifestPath = (config2) => `${config2.supervisorStatePath}.service.json`;
|
|
47248
47261
|
inferenceHostServiceDesiredPath = (config2) => `${config2.supervisorStatePath}.service-desired.json`;
|
|
47249
47262
|
inferenceHostServiceLogPath = (config2) => `${config2.supervisorStatePath}.service.log`;
|
|
47263
|
+
inferenceHostServiceRotatedLogPath = (logPath) => `${logPath}.1`;
|
|
47250
47264
|
inferenceHostServiceRuntimePath = (config2) => `${config2.supervisorStatePath}.service-runtime.json`;
|
|
47251
47265
|
xmlEscape = (value) => value.replaceAll("&", "&").replaceAll("<", "<").replaceAll(">", ">").replaceAll('"', """).replaceAll("'", "'");
|
|
47252
47266
|
plistEscape = xmlEscape;
|
|
@@ -48286,10 +48300,16 @@ ${result.stderr}`)) {
|
|
|
48286
48300
|
async logs(lines = SERVICE_POLICY.log_tail_default_lines, instanceName) {
|
|
48287
48301
|
const manifest = await readInferenceHostServiceManifest(this.manifestPath());
|
|
48288
48302
|
const path = manifest?.log_path ?? this.logPath();
|
|
48289
|
-
|
|
48290
|
-
|
|
48291
|
-
|
|
48292
|
-
|
|
48303
|
+
const matching = async (file2) => {
|
|
48304
|
+
let contents;
|
|
48305
|
+
try {
|
|
48306
|
+
contents = await readFile12(file2, "utf8");
|
|
48307
|
+
} catch (error48) {
|
|
48308
|
+
if (error48.code === "ENOENT") return [];
|
|
48309
|
+
throw error48;
|
|
48310
|
+
}
|
|
48311
|
+
const logLines = contents.trimEnd() ? contents.trimEnd().split(/\r?\n/u) : [];
|
|
48312
|
+
return instanceName ? logLines.filter((line) => {
|
|
48293
48313
|
try {
|
|
48294
48314
|
const parsed = JSON.parse(line);
|
|
48295
48315
|
return parsed.instance_name === instanceName || Array.isArray(parsed.instances) && parsed.instances.includes(instanceName);
|
|
@@ -48297,12 +48317,11 @@ ${result.stderr}`)) {
|
|
|
48297
48317
|
return false;
|
|
48298
48318
|
}
|
|
48299
48319
|
}) : logLines;
|
|
48300
|
-
|
|
48320
|
+
};
|
|
48321
|
+
const current = await matching(path);
|
|
48322
|
+
const filtered = current.length >= lines ? current : [...await matching(inferenceHostServiceRotatedLogPath(path)), ...current];
|
|
48323
|
+
return filtered.length > 0 ? `${filtered.slice(-lines).join("\n")}
|
|
48301
48324
|
` : "";
|
|
48302
|
-
} catch (error48) {
|
|
48303
|
-
if (error48.code === "ENOENT") return "";
|
|
48304
|
-
throw error48;
|
|
48305
|
-
}
|
|
48306
48325
|
}
|
|
48307
48326
|
async uninstallInstance(instanceName) {
|
|
48308
48327
|
return await this.withControlLock(async () => {
|
|
@@ -48367,14 +48386,71 @@ ${result.stderr}`)) {
|
|
|
48367
48386
|
};
|
|
48368
48387
|
}
|
|
48369
48388
|
};
|
|
48370
|
-
|
|
48371
|
-
|
|
48372
|
-
|
|
48373
|
-
|
|
48374
|
-
|
|
48375
|
-
|
|
48376
|
-
|
|
48389
|
+
serviceLogSinks = /* @__PURE__ */ new Map();
|
|
48390
|
+
serviceLogSize = async (path) => await stat(path).then((entry) => entry.size, (error48) => {
|
|
48391
|
+
if (error48.code === "ENOENT") return 0;
|
|
48392
|
+
throw error48;
|
|
48393
|
+
});
|
|
48394
|
+
rotateServiceLog = async (path, size) => {
|
|
48395
|
+
const start = Math.max(0, size - SERVICE_POLICY.log_rotate_bytes);
|
|
48396
|
+
let aligned = start === 0;
|
|
48397
|
+
await pipeline(
|
|
48398
|
+
createReadStream(path, { start, end: size - 1 }),
|
|
48399
|
+
new Transform({
|
|
48400
|
+
transform(chunk, _encoding, callback) {
|
|
48401
|
+
if (aligned) {
|
|
48402
|
+
callback(null, chunk);
|
|
48403
|
+
return;
|
|
48404
|
+
}
|
|
48405
|
+
const newline = chunk.indexOf("\n");
|
|
48406
|
+
if (newline < 0) {
|
|
48407
|
+
callback();
|
|
48408
|
+
return;
|
|
48409
|
+
}
|
|
48410
|
+
aligned = true;
|
|
48411
|
+
callback(null, chunk.subarray(newline + 1));
|
|
48412
|
+
}
|
|
48413
|
+
}),
|
|
48414
|
+
createWriteStream(inferenceHostServiceRotatedLogPath(path), { flags: "w", mode: OWNER_ONLY_FILE_MODE })
|
|
48415
|
+
);
|
|
48416
|
+
await truncate(path, 0);
|
|
48417
|
+
};
|
|
48418
|
+
writeServiceLog = (path, text) => {
|
|
48419
|
+
let sink = serviceLogSinks.get(path);
|
|
48420
|
+
if (!sink) {
|
|
48421
|
+
sink = { tail: Promise.resolve(), bytes: null, rotateAtBytes: SERVICE_POLICY.log_rotate_bytes };
|
|
48422
|
+
serviceLogSinks.set(path, sink);
|
|
48423
|
+
}
|
|
48424
|
+
const state2 = sink;
|
|
48425
|
+
const write = state2.tail.then(async () => {
|
|
48426
|
+
if (state2.bytes === null) {
|
|
48427
|
+
await mkdir5(dirname15(path), { recursive: true, mode: OWNER_ONLY_DIRECTORY_MODE });
|
|
48428
|
+
state2.bytes = await serviceLogSize(path);
|
|
48429
|
+
}
|
|
48430
|
+
await appendFile2(path, text, { encoding: "utf8", mode: OWNER_ONLY_FILE_MODE });
|
|
48431
|
+
state2.bytes += Buffer.byteLength(text);
|
|
48432
|
+
if (state2.bytes < state2.rotateAtBytes) return;
|
|
48433
|
+
try {
|
|
48434
|
+
const size = await serviceLogSize(path);
|
|
48435
|
+
if (size >= SERVICE_POLICY.log_rotate_bytes) await rotateServiceLog(path, size);
|
|
48436
|
+
state2.bytes = size >= SERVICE_POLICY.log_rotate_bytes ? 0 : size;
|
|
48437
|
+
state2.rotateAtBytes = SERVICE_POLICY.log_rotate_bytes;
|
|
48438
|
+
} catch (error48) {
|
|
48439
|
+
state2.rotateAtBytes = state2.bytes + SERVICE_POLICY.log_rotate_bytes;
|
|
48440
|
+
await appendFile2(path, `${JSON.stringify({
|
|
48441
|
+
at: (/* @__PURE__ */ new Date()).toISOString(),
|
|
48442
|
+
event: "service_log_rotation_failed",
|
|
48443
|
+
error_code: String(error48.code ?? "unknown")
|
|
48444
|
+
})}
|
|
48445
|
+
`, { encoding: "utf8", mode: OWNER_ONLY_FILE_MODE }).catch(() => void 0);
|
|
48446
|
+
}
|
|
48377
48447
|
});
|
|
48448
|
+
state2.tail = write.catch(() => void 0);
|
|
48449
|
+
return write;
|
|
48450
|
+
};
|
|
48451
|
+
appendServiceLog = async (path, event, fields = {}) => {
|
|
48452
|
+
await writeServiceLog(path, `${JSON.stringify({ at: (/* @__PURE__ */ new Date()).toISOString(), event, ...fields })}
|
|
48453
|
+
`);
|
|
48378
48454
|
};
|
|
48379
48455
|
spawnInferenceHostServiceChild = async (manifest, worker, signal, onReady = () => {
|
|
48380
48456
|
}, quiesceSignal) => {
|
|
@@ -48389,7 +48465,12 @@ ${result.stderr}`)) {
|
|
|
48389
48465
|
worker.display_name
|
|
48390
48466
|
];
|
|
48391
48467
|
const startedAt = Date.now();
|
|
48392
|
-
const log =
|
|
48468
|
+
const log = (line) => {
|
|
48469
|
+
void writeServiceLog(manifest.log_path, line).catch(() => void 0);
|
|
48470
|
+
};
|
|
48471
|
+
const logSettled = async () => {
|
|
48472
|
+
await serviceLogSinks.get(manifest.log_path)?.tail;
|
|
48473
|
+
};
|
|
48393
48474
|
return await new Promise((resolvePromise, reject) => {
|
|
48394
48475
|
let stdout = "";
|
|
48395
48476
|
let cooperativeStopTimedOut = false;
|
|
@@ -48407,7 +48488,7 @@ ${result.stderr}`)) {
|
|
|
48407
48488
|
const parsed = JSON.parse(line);
|
|
48408
48489
|
if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
|
|
48409
48490
|
if (parsed.event === "runtime_started") onReady();
|
|
48410
|
-
log
|
|
48491
|
+
log(`${JSON.stringify({
|
|
48411
48492
|
...parsed,
|
|
48412
48493
|
instance_name: worker.instance_name
|
|
48413
48494
|
})}
|
|
@@ -48416,7 +48497,7 @@ ${result.stderr}`)) {
|
|
|
48416
48497
|
}
|
|
48417
48498
|
} catch {
|
|
48418
48499
|
}
|
|
48419
|
-
log
|
|
48500
|
+
log(`${JSON.stringify({
|
|
48420
48501
|
at: (/* @__PURE__ */ new Date()).toISOString(),
|
|
48421
48502
|
event: "worker_output",
|
|
48422
48503
|
instance_name: worker.instance_name,
|
|
@@ -48462,8 +48543,7 @@ ${result.stderr}`)) {
|
|
|
48462
48543
|
if (cooperativeStopTimer) clearTimeout(cooperativeStopTimer);
|
|
48463
48544
|
writeTaggedOutput("stdout", "", true);
|
|
48464
48545
|
writeTaggedOutput("stderr", "", true);
|
|
48465
|
-
|
|
48466
|
-
reject(error48);
|
|
48546
|
+
void logSettled().then(() => reject(error48));
|
|
48467
48547
|
});
|
|
48468
48548
|
child.once("exit", (code) => {
|
|
48469
48549
|
signal.removeEventListener("abort", onAbort);
|
|
@@ -48471,7 +48551,6 @@ ${result.stderr}`)) {
|
|
|
48471
48551
|
if (cooperativeStopTimer) clearTimeout(cooperativeStopTimer);
|
|
48472
48552
|
writeTaggedOutput("stdout", "", true);
|
|
48473
48553
|
writeTaggedOutput("stderr", "", true);
|
|
48474
|
-
log.end();
|
|
48475
48554
|
let drainReason = null;
|
|
48476
48555
|
for (const line of stdout.trim().split("\n").reverse()) {
|
|
48477
48556
|
try {
|
|
@@ -48485,12 +48564,13 @@ ${result.stderr}`)) {
|
|
|
48485
48564
|
} catch {
|
|
48486
48565
|
}
|
|
48487
48566
|
}
|
|
48488
|
-
|
|
48567
|
+
const uptimeMs = Date.now() - startedAt;
|
|
48568
|
+
void logSettled().then(() => resolvePromise({
|
|
48489
48569
|
exitCode: code ?? 1,
|
|
48490
|
-
uptimeMs
|
|
48570
|
+
uptimeMs,
|
|
48491
48571
|
drainReason,
|
|
48492
48572
|
cooperativeStopTimedOut
|
|
48493
|
-
});
|
|
48573
|
+
}));
|
|
48494
48574
|
});
|
|
48495
48575
|
});
|
|
48496
48576
|
};
|
|
@@ -51759,7 +51839,7 @@ Waiting for approval...
|
|
|
51759
51839
|
"started_at"
|
|
51760
51840
|
];
|
|
51761
51841
|
if (Object.keys(record5).sort().join("\0") !== exactKeys2.sort().join("\0") || record5.schema_version !== "vtx_inference_service_recovery_v1" || record5.phase !== "prepared" && record5.phase !== "reconciled" || typeof record5.transaction_id !== "string" || !/^[0-9a-f-]{36}$/u.test(record5.transaction_id) || typeof record5.instance_name !== "string" || typeof record5.manifest_generation !== "string" || typeof record5.restore_desired_running !== "boolean" || typeof record5.recovery_backup_path !== "string" || typeof record5.recovery_backup_sha256 !== "string" || !/^[0-9a-f]{64}$/u.test(record5.recovery_backup_sha256) || !Array.isArray(record5.cleanup_confirmed_attempt_ids) || record5.cleanup_confirmed_attempt_ids.some(
|
|
51762
|
-
(attemptId) =>
|
|
51842
|
+
(attemptId) => !identifierSchema.safeParse(attemptId).success
|
|
51763
51843
|
) || new Set(record5.cleanup_confirmed_attempt_ids).size !== record5.cleanup_confirmed_attempt_ids.length || [...record5.cleanup_confirmed_attempt_ids].sort().join("\0") !== record5.cleanup_confirmed_attempt_ids.join("\0") || typeof record5.started_at !== "string" || !Number.isFinite(Date.parse(record5.started_at)) || new Date(record5.started_at).toISOString() !== record5.started_at) {
|
|
51764
51844
|
throw new Error("Inference-host service recovery transaction is invalid.");
|
|
51765
51845
|
}
|
|
@@ -53996,7 +54076,7 @@ var init_network_debug = __esm({
|
|
|
53996
54076
|
return runtimeProviderFailureDebugEntries.slice();
|
|
53997
54077
|
};
|
|
53998
54078
|
getLatestRuntimeProviderFailureTelemetrySnapshot = (options = {}) => {
|
|
53999
|
-
const maxAgeMs =
|
|
54079
|
+
const maxAgeMs = runtime_policy_generated_default2.trading.engine.client_runtime.provider_failure_diagnostics_max_age_milliseconds;
|
|
54000
54080
|
const label2 = typeof options.label === "string" && options.label.trim() ? options.label.trim().toLowerCase() : null;
|
|
54001
54081
|
const traceId = typeof options.traceId === "string" && options.traceId.trim() ? options.traceId.trim() : null;
|
|
54002
54082
|
const now = Date.now();
|
|
@@ -87283,7 +87363,7 @@ var init_hyperliquid_signer = __esm({
|
|
|
87283
87363
|
});
|
|
87284
87364
|
|
|
87285
87365
|
// lib/runtime/hyperliquid-client.ts
|
|
87286
|
-
var HyperliquidExchangeRejectionError, durableMutationAuthorityArgs, assertFreshPreparedExecutionContext, normalizeSymbol, HYPERLIQUID_NONCE_STORAGE_KEY, HYPERLIQUID_NONCE_LOCK_NAME, lastGeneratedNonce, readBrowserStoredHyperliquidNonce, writeBrowserStoredHyperliquidNonce, browserNonceCoordinator, allocateHyperliquidNonce, hostNonceAllocator, allocateActionNonce, generateHyperliquidNonce, normalizeDecimalString, HYPERLIQUID_PRICE_SIGNIFICANT_FIGURES, HYPERLIQUID_INTEGER_PRICE_MINIMUM, shortestDecimalParts, formatHyperliquidPerpPriceGrid, formatHyperliquidTriggerPriceWire, hyperliquidOrderPriceRounding, formatHyperliquidOrderPriceWire, countSignificantDigits, countDecimalPlaces, validateHyperliquidPerpPriceWire, validateHyperliquidSizeWire, formatSizeWire, inferApiUrl, inferIsTestnet, postHyperliquidInfoRead, postHyperliquidInfo, fetchBrowserHyperliquidInfoPayload, fetchBrowserHyperliquidInfoRead, fetchBrowserHyperliquidInfoText, toFiniteNumber, OPEN_ORDER_NUMERIC_STRING, OPEN_ORDER_ID_STRING, parseCanonicalOpenOrderId, parseOpenOrderFiniteNumber, parseOpenOrderPositiveNumber, parseOpenOrderPresentationNumber, readOpenOrderField, firstFiniteNumber, parseFundingUsdcFromInfoPosition, isExchangeIsolatedOnly, computeHip3AssetId, getPerpDexIndexMap, buildAssetInfosFromMetaResponse, requireWalletAddress, assertPositiveInteger, assertPositiveNumber, normalizeOrderSide, normalizeHyperliquidClientOrderId, resolveAssets, findResolvedAsset, normalizeExecutionAssetMetadata, resolveHyperliquidAsset, resolveHyperliquidAssetIndex, decimalUnits, quantizeHyperliquidOrderSizeValue, hyperliquidSignedSizeMatchesRequestedSize, finitePositive, readDevicePrivateExecutionContext, quantizeHyperliquidOrderSize, fetchBrowserAvailableAssets, fetchBrowserAllMids, fetchBrowserSymbolMidPrice, fetchBrowserOpenOrders, parseCanonicalHyperliquidOrderStatusEvidence, fetchBrowserOrderStatusEvidence, fetchBrowserUserRole, fetchBrowserAccountState, fetchBrowserPosition, buildHyperliquidOrderWire, buildHyperliquidTriggerOrderWire, signHyperliquidPayload, signHyperliquidPreparedAction, buildHyperliquidCancelPayload, buildHyperliquidUpdateLeveragePayload, buildHyperliquidMarketOrderPayload, buildHyperliquidLimitOrderPayload, buildHyperliquidTriggerOrderPayload, buildHyperliquidOrderBatchPayload, buildHyperliquidModifyOrderPayload, extractHyperliquidExchangeError, resolveHyperliquidTriggerAcknowledgements, isDefinitiveHyperliquidExchangeResponse, extractDefinitiveHyperliquidOrderId, CANONICAL_POSITIVE_DECIMAL_PATTERN, extractCanonicalHyperliquidOrderStateAcknowledgement, extractCanonicalHyperliquidOrderStateAcknowledgements, extractCanonicalHyperliquidFilledOrderAcknowledgement, extractDefinitiveHyperliquidOrderMemberResults, buildHyperliquidOrderDiagnostics, loadClientExecutionReferenceEvidence, sha256Hex, extractSignedPayloadClientOrderId, extractSignedPayloadMutationCorrelation, assertDurableMutationMatchesSignedAction, exchangeRejectionReason, exchangeActionPriority, submitHyperliquidExchangePayload;
|
|
87366
|
+
var HyperliquidExchangeRejectionError, durableMutationAuthorityArgs, assertFreshPreparedExecutionContext, normalizeSymbol, HYPERLIQUID_NONCE_STORAGE_KEY, HYPERLIQUID_NONCE_LOCK_NAME, lastGeneratedNonce, readBrowserStoredHyperliquidNonce, writeBrowserStoredHyperliquidNonce, browserNonceCoordinator, allocateHyperliquidNonce, hostNonceAllocator, allocateActionNonce, generateHyperliquidNonce, normalizeDecimalString, HYPERLIQUID_PRICE_SIGNIFICANT_FIGURES, HYPERLIQUID_INTEGER_PRICE_MINIMUM, shortestDecimalParts, formatHyperliquidPerpPriceGrid, formatHyperliquidTriggerPriceWire, hyperliquidOrderPriceRounding, formatHyperliquidOrderPriceWire, countSignificantDigits, countDecimalPlaces, validateHyperliquidPerpPriceWire, validateHyperliquidSizeWire, formatSizeWire, inferApiUrl, inferIsTestnet, postHyperliquidInfoRead, postHyperliquidInfo, fetchBrowserHyperliquidInfoPayload, fetchBrowserHyperliquidInfoRead, fetchBrowserHyperliquidInfoText, coerceMarketMaxLeverage, toFiniteNumber, OPEN_ORDER_NUMERIC_STRING, OPEN_ORDER_ID_STRING, parseCanonicalOpenOrderId, parseOpenOrderFiniteNumber, parseOpenOrderPositiveNumber, parseOpenOrderPresentationNumber, readOpenOrderField, firstFiniteNumber, parseFundingUsdcFromInfoPosition, isExchangeIsolatedOnly, computeHip3AssetId, getPerpDexIndexMap, buildAssetInfosFromMetaResponse, requireWalletAddress, assertPositiveInteger, assertPositiveNumber, normalizeOrderSide, normalizeHyperliquidClientOrderId, resolveAssets, findResolvedAsset, normalizeExecutionAssetMetadata, resolveHyperliquidAsset, resolveHyperliquidAssetIndex, decimalUnits, quantizeHyperliquidOrderSizeValue, hyperliquidSignedSizeMatchesRequestedSize, finitePositive, readDevicePrivateExecutionContext, quantizeHyperliquidOrderSize, fetchBrowserAvailableAssets, fetchBrowserAllMids, fetchBrowserSymbolMidPrice, fetchBrowserOpenOrders, parseCanonicalHyperliquidOrderStatusEvidence, fetchBrowserOrderStatusEvidence, fetchBrowserUserRole, fetchBrowserAccountState, fetchBrowserPosition, buildHyperliquidOrderWire, buildHyperliquidTriggerOrderWire, signHyperliquidPayload, signHyperliquidPreparedAction, buildHyperliquidCancelPayload, buildHyperliquidUpdateLeveragePayload, buildHyperliquidMarketOrderPayload, buildHyperliquidLimitOrderPayload, buildHyperliquidTriggerOrderPayload, buildHyperliquidOrderBatchPayload, buildHyperliquidModifyOrderPayload, extractHyperliquidExchangeError, resolveHyperliquidTriggerAcknowledgements, isDefinitiveHyperliquidExchangeResponse, extractDefinitiveHyperliquidOrderId, CANONICAL_POSITIVE_DECIMAL_PATTERN, extractCanonicalHyperliquidOrderStateAcknowledgement, extractCanonicalHyperliquidOrderStateAcknowledgements, extractCanonicalHyperliquidFilledOrderAcknowledgement, extractDefinitiveHyperliquidOrderMemberResults, buildHyperliquidOrderDiagnostics, loadClientExecutionReferenceEvidence, sha256Hex, extractSignedPayloadClientOrderId, extractSignedPayloadMutationCorrelation, assertDurableMutationMatchesSignedAction, exchangeRejectionReason, exchangeActionPriority, submitHyperliquidExchangePayload;
|
|
87287
87367
|
var init_hyperliquid_client = __esm({
|
|
87288
87368
|
"lib/runtime/hyperliquid-client.ts"() {
|
|
87289
87369
|
"use strict";
|
|
@@ -87561,6 +87641,16 @@ var init_hyperliquid_client = __esm({
|
|
|
87561
87641
|
if (typeof bodyText !== "string") throw new Error("Hyperliquid returned no response text.");
|
|
87562
87642
|
return bodyText;
|
|
87563
87643
|
};
|
|
87644
|
+
coerceMarketMaxLeverage = (value, symbol2) => {
|
|
87645
|
+
if (value === null || value === void 0 || value === "" || value === 0 || typeof value === "boolean") {
|
|
87646
|
+
return 1;
|
|
87647
|
+
}
|
|
87648
|
+
const parsed = typeof value === "number" ? value : typeof value === "string" && /^\s*[+-]?\d+\s*$/.test(value) ? Number(value) : Number.NaN;
|
|
87649
|
+
if (!Number.isFinite(parsed)) {
|
|
87650
|
+
throw new Error(`Hyperliquid metadata for ${symbol2} has invalid maxLeverage.`);
|
|
87651
|
+
}
|
|
87652
|
+
return Math.max(1, Math.trunc(parsed));
|
|
87653
|
+
};
|
|
87564
87654
|
toFiniteNumber = (value, fallback = 0) => {
|
|
87565
87655
|
const parsed = typeof value === "number" ? value : Number(value);
|
|
87566
87656
|
return Number.isFinite(parsed) ? parsed : fallback;
|
|
@@ -87704,7 +87794,7 @@ var init_hyperliquid_client = __esm({
|
|
|
87704
87794
|
index_in_meta: indexInMeta,
|
|
87705
87795
|
perp_dex_index: options.perpDexIndex,
|
|
87706
87796
|
market_type: "perp",
|
|
87707
|
-
max_leverage:
|
|
87797
|
+
max_leverage: coerceMarketMaxLeverage(asset.maxLeverage, symbol2),
|
|
87708
87798
|
sz_decimals: szDecimals,
|
|
87709
87799
|
margin_mode: typeof asset.marginMode === "string" && asset.marginMode.trim() ? asset.marginMode.trim() : null,
|
|
87710
87800
|
only_isolated: asset.onlyIsolated === true,
|
|
@@ -87774,7 +87864,7 @@ var init_hyperliquid_client = __esm({
|
|
|
87774
87864
|
}
|
|
87775
87865
|
return {
|
|
87776
87866
|
asset_index: resolvedAssetId,
|
|
87777
|
-
max_leverage:
|
|
87867
|
+
max_leverage: coerceMarketMaxLeverage(asset.max_leverage, symbol2),
|
|
87778
87868
|
sz_decimals: Number(asset.sz_decimals),
|
|
87779
87869
|
margin_mode: asset.margin_mode ?? null,
|
|
87780
87870
|
only_isolated: asset.only_isolated === true
|
|
@@ -87792,7 +87882,7 @@ var init_hyperliquid_client = __esm({
|
|
|
87792
87882
|
}
|
|
87793
87883
|
return {
|
|
87794
87884
|
asset_index: resolvedAssetId,
|
|
87795
|
-
max_leverage:
|
|
87885
|
+
max_leverage: coerceMarketMaxLeverage(metadata.max_leverage, symbol2),
|
|
87796
87886
|
sz_decimals: Number(metadata.sz_decimals),
|
|
87797
87887
|
margin_mode: metadata.margin_mode ?? null,
|
|
87798
87888
|
only_isolated: metadata.only_isolated === true
|
|
@@ -88590,7 +88680,7 @@ var init_hyperliquid_client = __esm({
|
|
|
88590
88680
|
input = { ...input, publicRequestPriority: input.reduceOnly === true ? "trading_reduce" : "trading_execute" };
|
|
88591
88681
|
assertPositiveNumber(input.size, "Hyperliquid order size");
|
|
88592
88682
|
assertPositiveNumber(input.estimatedPrice, "Hyperliquid estimated price");
|
|
88593
|
-
const slippage = input.slippage == null ?
|
|
88683
|
+
const slippage = input.slippage == null ? runtime_policy_generated_default2.trading.defaults.server_ai_max_slippage / PERCENT_SCALE : Number(input.slippage);
|
|
88594
88684
|
if (!Number.isFinite(slippage) || slippage < 0) {
|
|
88595
88685
|
throw new Error("Hyperliquid slippage must be a non-negative number.");
|
|
88596
88686
|
}
|
|
@@ -91591,7 +91681,7 @@ var init_api2 = __esm({
|
|
|
91591
91681
|
if (!isRetryableClientRuntimeStatus(status)) {
|
|
91592
91682
|
return false;
|
|
91593
91683
|
}
|
|
91594
|
-
if (path === "/runtime/event") {
|
|
91684
|
+
if (path === "/runtime/event" || path === "/runtime/server-prompt-rescue") {
|
|
91595
91685
|
return false;
|
|
91596
91686
|
}
|
|
91597
91687
|
return true;
|
|
@@ -94732,7 +94822,9 @@ var init_hyperliquid_account_state_adapter = __esm({
|
|
|
94732
94822
|
);
|
|
94733
94823
|
const accountSummary = {
|
|
94734
94824
|
...normalizedSummary,
|
|
94735
|
-
|
|
94825
|
+
// Every read keeps its per-DEX pools, a chart-scoped Trade read too, so
|
|
94826
|
+
// the Trade page can measure the bot's venue equity (botVenueEquity).
|
|
94827
|
+
...{
|
|
94736
94828
|
perp_dex_accounts: perpsResult.dexPayloads.filter(({ payload }) => hasCompletePerpDexAccountMetrics(payload)).map(({ dex, payload }) => {
|
|
94737
94829
|
const summary = buildServerPromptRescueAccountSummary({
|
|
94738
94830
|
...payload,
|
|
@@ -107234,6 +107326,30 @@ var init_client_runtime_status_store = __esm({
|
|
|
107234
107326
|
}
|
|
107235
107327
|
});
|
|
107236
107328
|
|
|
107329
|
+
// lib/runtime/perp-dex-scope.ts
|
|
107330
|
+
var perpDexScopeForSymbols, profileEquityPerpDexScope;
|
|
107331
|
+
var init_perp_dex_scope = __esm({
|
|
107332
|
+
"lib/runtime/perp-dex-scope.ts"() {
|
|
107333
|
+
"use strict";
|
|
107334
|
+
init_define_VTX_EXO_POLICY();
|
|
107335
|
+
init_define_VTX_GROK_POLICY();
|
|
107336
|
+
init_define_VTX_PI_MODEL_POLICY();
|
|
107337
|
+
init_hyperliquid_market_symbol();
|
|
107338
|
+
perpDexScopeForSymbols = (symbols) => {
|
|
107339
|
+
const dexes = /* @__PURE__ */ new Set();
|
|
107340
|
+
for (const raw of symbols) {
|
|
107341
|
+
if (!String(raw ?? "").trim()) continue;
|
|
107342
|
+
if (!normalizeHyperliquidMarketSymbol(raw)) return void 0;
|
|
107343
|
+
dexes.add(getHyperliquidMarketDex(raw));
|
|
107344
|
+
}
|
|
107345
|
+
return dexes.size > 0 ? [...dexes].filter(Boolean) : void 0;
|
|
107346
|
+
};
|
|
107347
|
+
profileEquityPerpDexScope = (tradingSymbols, defaultTradingSymbols) => perpDexScopeForSymbols(
|
|
107348
|
+
(Array.isArray(tradingSymbols) && tradingSymbols.length > 0 ? tradingSymbols : defaultTradingSymbols ?? []).map((entry) => String(entry ?? "").trim()).filter(Boolean)
|
|
107349
|
+
);
|
|
107350
|
+
}
|
|
107351
|
+
});
|
|
107352
|
+
|
|
107237
107353
|
// lib/runtime/client-killswitch.ts
|
|
107238
107354
|
var toPositiveFinite2, toNonNegativeFinite, firstConfiguredSymbol, calculateClientKillswitchDrawdownPercent, evaluateClientKillswitch, closeClientKillswitchPositions;
|
|
107239
107355
|
var init_client_killswitch = __esm({
|
|
@@ -107245,6 +107361,7 @@ var init_client_killswitch = __esm({
|
|
|
107245
107361
|
init_api2();
|
|
107246
107362
|
init_constants();
|
|
107247
107363
|
init_browser_trading();
|
|
107364
|
+
init_perp_dex_scope();
|
|
107248
107365
|
init_hyperliquid_account_state_adapter();
|
|
107249
107366
|
toPositiveFinite2 = (value) => {
|
|
107250
107367
|
const parsed = Number(value);
|
|
@@ -107306,6 +107423,9 @@ var init_client_killswitch = __esm({
|
|
|
107306
107423
|
tickerPrice: 0,
|
|
107307
107424
|
leverage,
|
|
107308
107425
|
aggregatePerpDexs: true,
|
|
107426
|
+
// Only the DEXes the server measures the killswitch on; a trigger's close
|
|
107427
|
+
// re-reads every DEX before closing.
|
|
107428
|
+
perpDexScope: profileEquityPerpDexScope(settings.trading_symbols, input.config.default_trading_symbols),
|
|
107309
107429
|
forceRefresh: true,
|
|
107310
107430
|
sessionId: input.sessionId,
|
|
107311
107431
|
signal: input.signal
|
|
@@ -108163,21 +108283,33 @@ var init_ai_settings_helpers = __esm({
|
|
|
108163
108283
|
}
|
|
108164
108284
|
});
|
|
108165
108285
|
|
|
108286
|
+
// lib/candle-timeframes.ts
|
|
108287
|
+
var candleTimeframeSeconds, compareCandleTimeframes, sortCandleTimeframes;
|
|
108288
|
+
var init_candle_timeframes = __esm({
|
|
108289
|
+
"lib/candle-timeframes.ts"() {
|
|
108290
|
+
"use strict";
|
|
108291
|
+
init_define_VTX_EXO_POLICY();
|
|
108292
|
+
init_define_VTX_GROK_POLICY();
|
|
108293
|
+
init_define_VTX_PI_MODEL_POLICY();
|
|
108294
|
+
init_constants();
|
|
108295
|
+
candleTimeframeSeconds = (timeframe) => Object.prototype.hasOwnProperty.call(CANDLE_TIMEFRAME_SECONDS, timeframe) ? CANDLE_TIMEFRAME_SECONDS[timeframe] : void 0;
|
|
108296
|
+
compareCandleTimeframes = (left, right) => (candleTimeframeSeconds(left) ?? Number.MAX_SAFE_INTEGER) - (candleTimeframeSeconds(right) ?? Number.MAX_SAFE_INTEGER);
|
|
108297
|
+
sortCandleTimeframes = (timeframes) => [...timeframes].sort(compareCandleTimeframes);
|
|
108298
|
+
}
|
|
108299
|
+
});
|
|
108300
|
+
|
|
108166
108301
|
// lib/runtime/candle-prompt-contract.ts
|
|
108167
|
-
var
|
|
108302
|
+
var projectCandlePromptComponent;
|
|
108168
108303
|
var init_candle_prompt_contract = __esm({
|
|
108169
108304
|
"lib/runtime/candle-prompt-contract.ts"() {
|
|
108170
108305
|
"use strict";
|
|
108171
108306
|
init_define_VTX_EXO_POLICY();
|
|
108172
108307
|
init_define_VTX_GROK_POLICY();
|
|
108173
108308
|
init_define_VTX_PI_MODEL_POLICY();
|
|
108174
|
-
|
|
108175
|
-
TIMEFRAME_SECONDS = Object.fromEntries(
|
|
108176
|
-
Object.entries(PROMPT_TIMEFRAME_MINUTES).map(([timeframe, minutes]) => [timeframe, minutes * SECONDS_PER_MINUTE])
|
|
108177
|
-
);
|
|
108309
|
+
init_candle_timeframes();
|
|
108178
108310
|
projectCandlePromptComponent = (input) => {
|
|
108179
|
-
const intervalSeconds =
|
|
108180
|
-
if (
|
|
108311
|
+
const intervalSeconds = candleTimeframeSeconds(input.timeframe);
|
|
108312
|
+
if (intervalSeconds === void 0) {
|
|
108181
108313
|
throw new Error(`Unsupported candle timeframe: ${input.timeframe}`);
|
|
108182
108314
|
}
|
|
108183
108315
|
const asOfTimestamp = Math.trunc(Number(input.asOfTimestamp));
|
|
@@ -108992,6 +109124,87 @@ var init_client_account_report = __esm({
|
|
|
108992
109124
|
}
|
|
108993
109125
|
});
|
|
108994
109126
|
|
|
109127
|
+
// lib/api/server-host-prompt-rescue.ts
|
|
109128
|
+
async function requestServerHostPromptRescue(profileId, payload, options) {
|
|
109129
|
+
return postClientRuntime(
|
|
109130
|
+
"/runtime/server-prompt-rescue",
|
|
109131
|
+
profileId,
|
|
109132
|
+
buildClientRuntimeBody(payload, {
|
|
109133
|
+
analysis_run_id: payload.analysisRunId,
|
|
109134
|
+
cycle_id: payload.cycleId,
|
|
109135
|
+
symbol: payload.symbol,
|
|
109136
|
+
symbols: payload.symbols,
|
|
109137
|
+
request_sequence: payload.requestSequence,
|
|
109138
|
+
server_reason: payload.serverReason
|
|
109139
|
+
}, { includeForceTakeover: false }),
|
|
109140
|
+
options
|
|
109141
|
+
);
|
|
109142
|
+
}
|
|
109143
|
+
var init_server_host_prompt_rescue = __esm({
|
|
109144
|
+
"lib/api/server-host-prompt-rescue.ts"() {
|
|
109145
|
+
"use strict";
|
|
109146
|
+
init_define_VTX_EXO_POLICY();
|
|
109147
|
+
init_define_VTX_GROK_POLICY();
|
|
109148
|
+
init_define_VTX_PI_MODEL_POLICY();
|
|
109149
|
+
init_api2();
|
|
109150
|
+
}
|
|
109151
|
+
});
|
|
109152
|
+
|
|
109153
|
+
// lib/runtime/server-prompt-rescue-snapshot.ts
|
|
109154
|
+
var accountStateFromServerPromptRescueSnapshot;
|
|
109155
|
+
var init_server_prompt_rescue_snapshot = __esm({
|
|
109156
|
+
"lib/runtime/server-prompt-rescue-snapshot.ts"() {
|
|
109157
|
+
"use strict";
|
|
109158
|
+
init_define_VTX_EXO_POLICY();
|
|
109159
|
+
init_define_VTX_GROK_POLICY();
|
|
109160
|
+
init_define_VTX_PI_MODEL_POLICY();
|
|
109161
|
+
init_hyperliquid_market_symbol();
|
|
109162
|
+
accountStateFromServerPromptRescueSnapshot = (snapshot, symbol2) => {
|
|
109163
|
+
const capturedAtMs = Date.parse(snapshot.captured_at);
|
|
109164
|
+
if (!Number.isFinite(capturedAtMs)) {
|
|
109165
|
+
throw new Error("Server prompt rescue timestamp is invalid.");
|
|
109166
|
+
}
|
|
109167
|
+
const positions = snapshot.positions.map((position) => ({
|
|
109168
|
+
symbol: position.symbol,
|
|
109169
|
+
dex: position.dex,
|
|
109170
|
+
coin: position.coin ?? null,
|
|
109171
|
+
base_symbol: position.base_symbol ?? null,
|
|
109172
|
+
market_type: position.market_type,
|
|
109173
|
+
size: position.size,
|
|
109174
|
+
entry_price: position.entry_price ?? null,
|
|
109175
|
+
unrealized_pnl: position.unrealized_pnl ?? null,
|
|
109176
|
+
realized_pnl: position.realized_pnl ?? null,
|
|
109177
|
+
leverage: position.leverage ?? null,
|
|
109178
|
+
margin_used: position.margin_used ?? null,
|
|
109179
|
+
liquidation_price: position.liquidation_price ?? null,
|
|
109180
|
+
funding_usdc: position.funding_usdc ?? null
|
|
109181
|
+
}));
|
|
109182
|
+
return {
|
|
109183
|
+
evidence: {
|
|
109184
|
+
source: "live",
|
|
109185
|
+
fetchedAtMs: capturedAtMs,
|
|
109186
|
+
observedAtMs: Date.now(),
|
|
109187
|
+
cacheAgeMs: 0,
|
|
109188
|
+
freshnessLimitMs: null
|
|
109189
|
+
},
|
|
109190
|
+
accountSummary: snapshot.account_summary,
|
|
109191
|
+
availableToTrade: {
|
|
109192
|
+
symbol: normalizeHyperliquidMarketSymbol(symbol2),
|
|
109193
|
+
available_to_trade_buy: 0,
|
|
109194
|
+
available_to_trade_sell: 0,
|
|
109195
|
+
max_trade_size_buy: 0,
|
|
109196
|
+
max_trade_size_sell: 0,
|
|
109197
|
+
mark_price: 0,
|
|
109198
|
+
source: "fallback"
|
|
109199
|
+
},
|
|
109200
|
+
positions,
|
|
109201
|
+
...snapshot.taker_rate == null ? {} : { takerRate: snapshot.taker_rate },
|
|
109202
|
+
...snapshot.effective_taker_rates == null ? {} : { effectiveTakerRates: { ...snapshot.effective_taker_rates } }
|
|
109203
|
+
};
|
|
109204
|
+
};
|
|
109205
|
+
}
|
|
109206
|
+
});
|
|
109207
|
+
|
|
108995
109208
|
// lib/runtime/google-egress.ts
|
|
108996
109209
|
function googleEgressPolicyForModel(policy2, model) {
|
|
108997
109210
|
if (!policy2?.enabled) return void 0;
|
|
@@ -113389,21 +113602,23 @@ __export(local_analysis_exports, {
|
|
|
113389
113602
|
buildLocalRuntimePromptArtifacts: () => buildLocalRuntimePromptArtifacts,
|
|
113390
113603
|
buildPromptBehaviorStateArtifacts: () => buildPromptBehaviorStateArtifacts,
|
|
113391
113604
|
buildPromptBehaviorStateValue: () => buildPromptBehaviorStateValue,
|
|
113605
|
+
capacityUnitSize: () => capacityUnitSize,
|
|
113392
113606
|
derivePromptVisibleSections: () => derivePromptVisibleSections,
|
|
113393
113607
|
isClientRuntimeAgentInstructionEmpty: () => isClientRuntimeAgentInstructionEmpty,
|
|
113394
113608
|
isClientRuntimeAiSchedulePaused: () => isClientRuntimeAiSchedulePaused,
|
|
113395
113609
|
isClientRuntimeAiScheduleStillActive: () => isClientRuntimeAiScheduleStillActive,
|
|
113396
113610
|
isServerDispatchAccountStateStale: () => isServerDispatchAccountStateStale,
|
|
113611
|
+
perpDexScopeForSymbols: () => perpDexScopeForSymbols,
|
|
113612
|
+
profileEquityPerpDexScope: () => profileEquityPerpDexScope,
|
|
113397
113613
|
resolveEffectivePromptRuntimeProvenance: () => resolveEffectivePromptRuntimeProvenance,
|
|
113398
113614
|
resolveExternalInferenceRuntimeTimeoutSeconds: () => resolveExternalInferenceRuntimeTimeoutSeconds,
|
|
113399
113615
|
resolveLocalRuntimeSecretProvider: () => resolveLocalRuntimeSecretProvider,
|
|
113400
113616
|
resolveLocalRuntimeSecretRequirements: () => resolveLocalRuntimeSecretRequirements,
|
|
113401
113617
|
resolveNativeValuesForModel: () => resolveNativeValuesForModel,
|
|
113402
113618
|
runLocalRuntimeCycle: () => runLocalRuntimeCycle,
|
|
113403
|
-
serverPerpDexScope: () => serverPerpDexScope,
|
|
113404
113619
|
summarizeReviewFailureExplanation: () => summarizeReviewFailureExplanation
|
|
113405
113620
|
});
|
|
113406
|
-
var CYCLE_TIMEOUT_FLOOR_MS, DECISION_SETTLEMENT_RESERVE_MAX_BUDGET_DIVISOR, MIN_AGENT_INSTRUCTION_RETRY_AFTER_MS, PROMPT_PARITY_ERROR_DETAIL_MAX_CHARS, EXTERNAL_INFERENCE_RUNTIME_POLL_INTERVAL_MS, REVIEW_PROVIDER_SERVER_ERROR_STATUSES, TRUNCATION_ELLIPSIS2, normalizeNativeValues, assertPromptModelController, resolveRuntimeReasoningControlsForModel, modelScopedKey, resolveNativeValuesForModel, observeRuntimeCycle, observeAccountState, aiOrderSlippageFraction,
|
|
113621
|
+
var CYCLE_TIMEOUT_FLOOR_MS, DECISION_SETTLEMENT_RESERVE_MAX_BUDGET_DIVISOR, MIN_AGENT_INSTRUCTION_RETRY_AFTER_MS, PROMPT_PARITY_ERROR_DETAIL_MAX_CHARS, EXTERNAL_INFERENCE_RUNTIME_POLL_INTERVAL_MS, REVIEW_PROVIDER_SERVER_ERROR_STATUSES, TRUNCATION_ELLIPSIS2, normalizeNativeValues, assertPromptModelController, resolveRuntimeReasoningControlsForModel, modelScopedKey, resolveNativeValuesForModel, observeRuntimeCycle, observeAccountState, aiOrderSlippageFraction, serverBehaviorStateArtifacts, ClientRuntimeAgentInstructionEmpty, isClientRuntimeAgentInstructionEmpty, ClientRuntimeAiSchedulePaused, ClientRuntimeAiScheduleStillActive, isClientRuntimeAiScheduleStillActive, ServerDispatchAccountStateStale, isServerDispatchAccountStateStale, isClientRuntimeAiSchedulePaused, buildClaimedAgentRuntimeCycleResult, resolveRuntimeMarginModePreference, resolveRuntimeLeveragePreference, resolveBooleanSetting2, CLIENT_RUNTIME_LIVE_CONTEXT_UNAVAILABLE_ERRORS, BEHAVIOR_STATE_UNAVAILABLE_ERROR, CriticalBehaviorStateError, clampNumber, resolveExternalInferenceRuntimeTimeoutSeconds, toPositiveFinite3, compactSnippet, hashRuntimeDebugText, EFFECTIVE_INPUT_MANIFEST_SCHEMA_VERSION, PROMPT_ASSEMBLY_DEFINITION_VERSION, RUNTIME_SOURCE_DEFINITION_VERSION, DECISION_INPUT_DEFINITION_VERSION, CONTEXT_ENVELOPE_DEFINITION_VERSION, CLIENT_RUNTIME_SOURCE_VERSION, CLIENT_MAIN_PROMPT_RENDERER, SERVER_MAIN_PROMPT_RENDERER, CLIENT_REVIEW_PROMPT_RENDERER, SERVER_REVIEW_PROMPT_RENDERER, resolveEffectivePromptRuntimeProvenance, canonicalManifestValue, canonicalManifestJson, sha256ManifestHex, effectiveInputComponent, buildEffectiveInputManifest, derivePromptVisibleSections, decodeDecisionTracePayload, extractDecisionSymbolTrace, formatDecisionSymbolTrace, formatActionableDecisionSymbols, normalizePromptSymbols, JSON_MODEL_OUTPUT_FENCE_PATTERN, STRICT_MODEL_OUTPUT_KEYS, currentModelOutputValidationErrors, currentModelOutputMatchesContract, projectCurrentModelDecisionContent, modelOutputValidationError, buildMissingDecisionHold, buildDecisionPlansFromResponse, buildReviewCandidatePlansFromResponse, forceUnavailableSymbolsToHold, extractTemplatePlaceholders, requireReviewPrimaryUserPromptTemplate, containsCompetingBehaviorStateMarkup, containsCompetingMainBehaviorStateMarkup, requireStrategyReviewTemplates, preflightStrategyReviewPromptContract, extractRuntimeReasoningSelection, isAbortError, isRuntimeTimeoutAbortReason, REVIEW_FAILURE_SENSITIVE_DB_TOKENS, REVIEW_FAILURE_SCHEMA_DISCLOSURE_TOKENS, REVIEW_FAILURE_SQL_STATEMENT_PATTERN, REVIEW_FAILURE_TRACEBACK_PATTERN, isSensitiveReviewFailureDetail, summarizeReviewFailureExplanation, buildReviewFailureHoldReason, createAbortError2, settleRuntimeCyclePromise, unwrapRuntimeCycleSettledResult, normalizeDecisionLabel, normalizeRuntimeSymbol, PromptContractFetchError, isLivePromptContextUnavailableError, buildFailClosedHoldResult, buildPromptConstructionFailureResult, buildLivePromptContextUnavailableFailureResult, pickFirstString, normalizeRuntimeStringList, requirePositiveRuntimeLimit, resolveRuntimeTradingScope, normalizeRuntimeProviderAlias, resolveCatalogModelEntry, createClientRuntimeProviderSetupError, createProviderSetupRejectionError, evaluateModelEligibility, extractReviewRuntimeReasoningSelection, isUsableRuntimeSettingsFallback, resolveRuntimeSettings, formatRuntimeDurationMs, normalizeRuntimeTimingNote, appendRuntimeTimingEvent, reportPromptParityTelemetry, resolveLocalRuntimeSecretRequirements, resolveLocalRuntimeSecretProvider, toEpochSeconds, REQUIRED_AI_INDICATOR_KEYS, sortTradingTimeframes, normalizePromptIdentityTimestamp, resolveCompletedCandleBoundary, normalizeAiIndicatorFlags, getPromptLookback, computeSma, computeEma, computeRsi, computeAtr, computeMacd, computeBollingerBands, getIndicatorValue, buildPromptCandlesComponent, buildPromptCandlesPayload, formatUtcTimestampWithWeekday, formatUtcNowWithWeekday, formatPromptPrice, capacityUnitSize, computePromptUnitsUsedForPosition, buildPromptAccountStatusValue, buildPromptPositionsValue, sanitizePromptSymbol, fillTimeMs, fillSize, normalizeFillSide, normalizeFillOrderId, normalizeFillRiskOrderIdentity, fillStartPosition, fillSortValue, sortFillsAscending, sortFillsDescending, inferEntryFromStartPositionChain, inferEntryFromCurrentPositionSize, calculateCurrentPositionState, calculatePositionEntryTimes, countPositionAdds, latestPositionRiskIncreaseTimeMs, latestPositionRiskIncreaseEvidence, compactPromptRiskIncrease, roundPositiveDecimalHalfUp, compactPromptLastTrade, ENTRY_TRADE_FIELDS, PREVIOUS_DECISION_FIELDS, PREVIOUS_CAMPAIGN_FIELDS, hasExactKeys2, isNonnegativeInteger, isFiniteNumber, isExactEnumString, isNonemptyPromptText, isCampaignReasoningText, projectBackendDecisionMemoryItem, requireRenderedStrategyBehaviorState, canonicalFillSideForRiskEvidence, isValidRiskEvidenceFill, isValidCampaignBoundaryFill, normalizeFillHistoryCoverage, resolveFillHistoryCoverageForSymbol, buildPromptBehaviorStateArtifacts, buildPromptBehaviorStateValue, shouldCompareServerPromptParity, buildLocalRuntimePromptArtifacts, createRuntimeId2, asRecord, buildRuntimeConstraintRejectionMessage, hasDeviceProviderSecret, requireNonEmptyStringField, requirePositiveIntegerField, compareContractVersion, parsePromptContractTimestamp, assertPromptContractCompatibility, assertPromptContractTemporalBounds, sleepWithAbort, requireAgentPollRetryAfterMs, materializeClaimedClientRuntimeAgentInstruction, attachClientRuntimeErrorProvenance, isExternalRuntimeProviderResult, invokeClientExternalInference, assertPromptContractBindingTupleEqual, assertPromptContractScopeMatch, fetchBoundPromptContracts, formatTemplateWithNamedVariables, carryReturnedModelCalls, runLocalRuntimeCycle;
|
|
113407
113622
|
var init_local_analysis = __esm({
|
|
113408
113623
|
"lib/runtime/local-analysis.ts"() {
|
|
113409
113624
|
"use strict";
|
|
@@ -113416,6 +113631,7 @@ var init_local_analysis = __esm({
|
|
|
113416
113631
|
init_profile_model_fallbacks();
|
|
113417
113632
|
init_api2();
|
|
113418
113633
|
init_ai_settings_helpers();
|
|
113634
|
+
init_candle_timeframes();
|
|
113419
113635
|
init_candle_prompt_contract();
|
|
113420
113636
|
init_vault();
|
|
113421
113637
|
init_decision_contract();
|
|
@@ -113423,6 +113639,9 @@ var init_local_analysis = __esm({
|
|
|
113423
113639
|
init_execution_guard_contract();
|
|
113424
113640
|
init_hyperliquid_account_state_adapter();
|
|
113425
113641
|
init_client_account_report();
|
|
113642
|
+
init_hyperliquid_public_read();
|
|
113643
|
+
init_server_host_prompt_rescue();
|
|
113644
|
+
init_server_prompt_rescue_snapshot();
|
|
113426
113645
|
init_network_debug();
|
|
113427
113646
|
init_abort();
|
|
113428
113647
|
init_error_surface_contract();
|
|
@@ -113442,6 +113661,8 @@ var init_local_analysis = __esm({
|
|
|
113442
113661
|
init_native_request_parameters();
|
|
113443
113662
|
init_hyperliquid_market_symbol();
|
|
113444
113663
|
init_external_inference_contract();
|
|
113664
|
+
init_perp_dex_scope();
|
|
113665
|
+
init_perp_dex_scope();
|
|
113445
113666
|
init_model_controller_provenance();
|
|
113446
113667
|
init_ai_schedule();
|
|
113447
113668
|
init_runtime_policy_generated2();
|
|
@@ -113527,16 +113748,6 @@ var init_local_analysis = __esm({
|
|
|
113527
113748
|
});
|
|
113528
113749
|
};
|
|
113529
113750
|
aiOrderSlippageFraction = (config2, executionMode) => executionMode === "server" ? Number(config2.server_ai_max_slippage) / PERCENT_SCALE : clampNumber(void 0, config2.default_max_slippage) / PERCENT_SCALE;
|
|
113530
|
-
serverPerpDexScope = (symbols, executionMode) => {
|
|
113531
|
-
if (executionMode !== "server") return void 0;
|
|
113532
|
-
const dexes = /* @__PURE__ */ new Set();
|
|
113533
|
-
for (const raw of symbols) {
|
|
113534
|
-
if (!String(raw ?? "").trim()) continue;
|
|
113535
|
-
if (!normalizeHyperliquidMarketSymbol(raw)) return void 0;
|
|
113536
|
-
dexes.add(getHyperliquidMarketDex(raw));
|
|
113537
|
-
}
|
|
113538
|
-
return dexes.size > 0 ? [...dexes].filter(Boolean) : void 0;
|
|
113539
|
-
};
|
|
113540
113751
|
serverBehaviorStateArtifacts = (derived) => {
|
|
113541
113752
|
const rendered = derived.behavior_state;
|
|
113542
113753
|
if (derived.behavior_state_owner !== "server" || typeof rendered !== "string" || !rendered.trim()) {
|
|
@@ -113618,7 +113829,7 @@ var init_local_analysis = __esm({
|
|
|
113618
113829
|
tickerPrice: 0,
|
|
113619
113830
|
leverage,
|
|
113620
113831
|
aggregatePerpDexs: true,
|
|
113621
|
-
perpDexScope:
|
|
113832
|
+
perpDexScope: perpDexScopeForSymbols(symbols),
|
|
113622
113833
|
feeSymbols: symbols,
|
|
113623
113834
|
includeEffectiveTakerRate: true,
|
|
113624
113835
|
sessionId: String(runtimeInput.sessionId || "").trim(),
|
|
@@ -115142,12 +115353,11 @@ ${reviewOutputContract}`;
|
|
|
115142
115353
|
"ema_50",
|
|
115143
115354
|
"ema_200"
|
|
115144
115355
|
];
|
|
115145
|
-
|
|
115146
|
-
sortTradingTimeframes = (timeframes) => Array.from(
|
|
115356
|
+
sortTradingTimeframes = (timeframes) => sortCandleTimeframes(Array.from(
|
|
115147
115357
|
new Set(
|
|
115148
115358
|
timeframes.map((value) => String(value || "").trim()).filter(Boolean)
|
|
115149
115359
|
)
|
|
115150
|
-
)
|
|
115360
|
+
));
|
|
115151
115361
|
normalizePromptIdentityTimestamp = (value) => {
|
|
115152
115362
|
const timestamp = String(value ?? "").trim();
|
|
115153
115363
|
const timestampMs = Date.parse(timestamp);
|
|
@@ -115157,13 +115367,13 @@ ${reviewOutputContract}`;
|
|
|
115157
115367
|
if (!input.cycleCutoff || !Array.isArray(input.component?.c)) {
|
|
115158
115368
|
return null;
|
|
115159
115369
|
}
|
|
115160
|
-
const
|
|
115370
|
+
const durationSeconds = candleTimeframeSeconds(input.timeframe);
|
|
115161
115371
|
const lastCompletedRow = input.component.c.at(-1);
|
|
115162
115372
|
const openedAtSeconds = Number(lastCompletedRow?.[0]);
|
|
115163
|
-
if (
|
|
115373
|
+
if (durationSeconds === void 0 || !Number.isFinite(openedAtSeconds) || openedAtSeconds <= 0) {
|
|
115164
115374
|
return null;
|
|
115165
115375
|
}
|
|
115166
|
-
const boundaryMs = (openedAtSeconds +
|
|
115376
|
+
const boundaryMs = (openedAtSeconds + durationSeconds) * MS_PER_SECOND;
|
|
115167
115377
|
const cutoffMs = Date.parse(input.cycleCutoff);
|
|
115168
115378
|
if (!Number.isFinite(boundaryMs) || !Number.isFinite(cutoffMs) || boundaryMs > cutoffMs) {
|
|
115169
115379
|
return null;
|
|
@@ -115213,11 +115423,11 @@ ${reviewOutputContract}`;
|
|
|
115213
115423
|
return clampLookback(parsed);
|
|
115214
115424
|
}
|
|
115215
115425
|
}
|
|
115216
|
-
const fallback = Number(defaultLookbacks[timeframe]);
|
|
115217
|
-
if (Number.isFinite(fallback)
|
|
115218
|
-
|
|
115426
|
+
const fallback = Number(defaultLookbacks?.[timeframe]);
|
|
115427
|
+
if (!Number.isFinite(fallback) || fallback <= 0) {
|
|
115428
|
+
throw new Error(`Missing required config key: ai_dashboard.defaults.analysis_lookback_fallbacks.${timeframe}`);
|
|
115219
115429
|
}
|
|
115220
|
-
return clampLookback(
|
|
115430
|
+
return clampLookback(fallback);
|
|
115221
115431
|
};
|
|
115222
115432
|
computeSma = (values, period) => {
|
|
115223
115433
|
if (period <= 0 || period > values.length) {
|
|
@@ -115521,16 +115731,23 @@ ${reviewOutputContract}`;
|
|
|
115521
115731
|
}
|
|
115522
115732
|
return roundPromptSignificant(numeric2, PROMPT_SIGNIFICANT_DIGITS);
|
|
115523
115733
|
};
|
|
115734
|
+
capacityUnitSize = (tradeSize, configuredTradeAmount) => {
|
|
115735
|
+
if (Number.isFinite(tradeSize) && tradeSize > 0) return tradeSize;
|
|
115736
|
+
const configured2 = Number(configuredTradeAmount);
|
|
115737
|
+
if (!Number.isFinite(configured2) || configured2 <= 0) {
|
|
115738
|
+
throw new Error("Missing required client runtime config: default_ai_trade_amount");
|
|
115739
|
+
}
|
|
115740
|
+
return configured2;
|
|
115741
|
+
};
|
|
115524
115742
|
computePromptUnitsUsedForPosition = (size, entryPrice, unitSize) => {
|
|
115525
115743
|
const sizeFloat = Number(size);
|
|
115526
115744
|
const entryPriceFloat = Number(entryPrice);
|
|
115527
115745
|
if (!Number.isFinite(sizeFloat) || sizeFloat === 0) {
|
|
115528
115746
|
return 0;
|
|
115529
115747
|
}
|
|
115530
|
-
const normalizedUnitSize = Number.isFinite(unitSize) && unitSize > 0 ? unitSize : PROMPT_UNIT_SIZE_FALLBACK_USDC;
|
|
115531
115748
|
const notional = Math.abs(sizeFloat * (Number.isFinite(entryPriceFloat) ? entryPriceFloat : 0));
|
|
115532
|
-
let unitsUsed = roundPromptNonnegativeUnits(notional /
|
|
115533
|
-
if (unitsUsed < 1 && notional >
|
|
115749
|
+
let unitsUsed = roundPromptNonnegativeUnits(notional / unitSize);
|
|
115750
|
+
if (unitsUsed < 1 && notional > unitSize * PROMPT_PARTIAL_UNIT_ROUND_UP_FRACTION) {
|
|
115534
115751
|
unitsUsed = 1;
|
|
115535
115752
|
}
|
|
115536
115753
|
if (unitsUsed < 1) {
|
|
@@ -115716,7 +115933,7 @@ ${reviewOutputContract}`;
|
|
|
115716
115933
|
sortFillsAscending = (fills) => [...fills].sort((left, right) => fillTimeMs(left) - fillTimeMs(right) || Number(left.tid ?? 0) - Number(right.tid ?? 0) || fillSortValue(left) - fillSortValue(right));
|
|
115717
115934
|
sortFillsDescending = (fills) => [...fills].sort((left, right) => fillTimeMs(right) - fillTimeMs(left) || Number(right.tid ?? 0) - Number(left.tid ?? 0) || fillSortValue(right) - fillSortValue(left));
|
|
115718
115935
|
inferEntryFromStartPositionChain = (fillsForSymbol, currentPositionSize) => {
|
|
115719
|
-
const epsilon =
|
|
115936
|
+
const epsilon = POSITION_SIZE_EPSILON;
|
|
115720
115937
|
if (!fillsForSymbol.length || !Number.isFinite(currentPositionSize) || Math.abs(currentPositionSize) < epsilon) {
|
|
115721
115938
|
return { entryTimestampMs: null, entryOrderId: null };
|
|
115722
115939
|
}
|
|
@@ -115764,7 +115981,7 @@ ${reviewOutputContract}`;
|
|
|
115764
115981
|
return { entryTimestampMs: null, entryOrderId: null };
|
|
115765
115982
|
};
|
|
115766
115983
|
inferEntryFromCurrentPositionSize = (fillsForSymbol, currentPositionSize) => {
|
|
115767
|
-
const epsilon =
|
|
115984
|
+
const epsilon = POSITION_SIZE_EPSILON;
|
|
115768
115985
|
if (!fillsForSymbol.length || Math.abs(currentPositionSize) < epsilon) {
|
|
115769
115986
|
return { entryTimestampMs: null, entryOrderId: null };
|
|
115770
115987
|
}
|
|
@@ -115786,7 +116003,7 @@ ${reviewOutputContract}`;
|
|
|
115786
116003
|
return { entryTimestampMs: null, entryOrderId: null };
|
|
115787
116004
|
};
|
|
115788
116005
|
calculateCurrentPositionState = (fillsForSymbol) => {
|
|
115789
|
-
const epsilon =
|
|
116006
|
+
const epsilon = POSITION_SIZE_EPSILON;
|
|
115790
116007
|
if (!fillsForSymbol.length) {
|
|
115791
116008
|
return { entryTimestampMs: null, entryOrderId: null, currentPos: 0 };
|
|
115792
116009
|
}
|
|
@@ -115825,7 +116042,7 @@ ${reviewOutputContract}`;
|
|
|
115825
116042
|
return { entryTimestampMs, entryOrderId, currentPos };
|
|
115826
116043
|
};
|
|
115827
116044
|
calculatePositionEntryTimes = (fills) => {
|
|
115828
|
-
const epsilon =
|
|
116045
|
+
const epsilon = POSITION_SIZE_EPSILON;
|
|
115829
116046
|
const fillsBySymbol = /* @__PURE__ */ new Map();
|
|
115830
116047
|
for (const fill of fills) {
|
|
115831
116048
|
const symbol2 = String(fill.coin ?? fill.symbol ?? "").trim();
|
|
@@ -115994,7 +116211,7 @@ ${reviewOutputContract}`;
|
|
|
115994
116211
|
}
|
|
115995
116212
|
priorPosition += normalizeFillSide(fill) === "B" ? size : -size;
|
|
115996
116213
|
}
|
|
115997
|
-
const oppositeExposure = isLong && priorPosition < -
|
|
116214
|
+
const oppositeExposure = isLong && priorPosition < -POSITION_SIZE_EPSILON || !isLong && priorPosition > POSITION_SIZE_EPSILON;
|
|
115998
116215
|
return {
|
|
115999
116216
|
timestampMs: latestTimestampMs,
|
|
116000
116217
|
actionKind: oppositeExposure ? "flip" : "entry"
|
|
@@ -116006,8 +116223,8 @@ ${reviewOutputContract}`;
|
|
|
116006
116223
|
}
|
|
116007
116224
|
const timeframeCandidates = timeframes.map((rawTimeframe) => {
|
|
116008
116225
|
const timeframe = String(rawTimeframe || "").trim();
|
|
116009
|
-
const
|
|
116010
|
-
return timeframe &&
|
|
116226
|
+
const durationSeconds = candleTimeframeSeconds(timeframe);
|
|
116227
|
+
return timeframe && durationSeconds !== void 0 ? { timeframe, durationSeconds } : null;
|
|
116011
116228
|
}).filter((item) => item != null).sort((left, right) => left.durationSeconds - right.durationSeconds);
|
|
116012
116229
|
const shortest = timeframeCandidates[0];
|
|
116013
116230
|
if (!shortest) {
|
|
@@ -117433,10 +117650,11 @@ ${behaviorJson}
|
|
|
117433
117650
|
const sortedTimeframes = sortTradingTimeframes(timeframes);
|
|
117434
117651
|
const activeIndicators = normalizeAiIndicatorFlags(config2.default_ai_indicators, settings.ai_indicators);
|
|
117435
117652
|
const lookbackSettings = settings.analysis_lookback;
|
|
117436
|
-
const effectiveDefaultLookbacks =
|
|
117437
|
-
|
|
117438
|
-
|
|
117439
|
-
|
|
117653
|
+
const effectiveDefaultLookbacks = config2.default_analysis_lookback_fallbacks;
|
|
117654
|
+
const indicatorCandleCount = Number(config2.indicator_candle_count);
|
|
117655
|
+
if (!Number.isSafeInteger(indicatorCandleCount) || indicatorCandleCount < 1) {
|
|
117656
|
+
throw new Error("Missing required client runtime config: indicator_candle_count");
|
|
117657
|
+
}
|
|
117440
117658
|
let initialPromptMetadata = null;
|
|
117441
117659
|
if (input.mode === "trader" && settings.main_model_enabled === false) {
|
|
117442
117660
|
const promptMetadataStartedAtMs = Date.now();
|
|
@@ -117533,6 +117751,7 @@ ${behaviorJson}
|
|
|
117533
117751
|
const getLatestTotalUnrealizedPnl = () => _latestTotalUnrealizedPnl;
|
|
117534
117752
|
const getAccountStateResolvedAtMs = () => _accountStateResolvedAtMs;
|
|
117535
117753
|
const accountStateStartedAtMs = Date.now();
|
|
117754
|
+
let promptRescueSequence = 0;
|
|
117536
117755
|
observeRuntimeCycle(input, { stage: "market_context" });
|
|
117537
117756
|
const browserAccountStateTask = fetchBrowserAccountState2({
|
|
117538
117757
|
publicRequestPriority: "trading_analysis",
|
|
@@ -117542,7 +117761,7 @@ ${behaviorJson}
|
|
|
117542
117761
|
tickerPrice: 0,
|
|
117543
117762
|
leverage: resolveRuntimeLeveragePreference(settings, config2),
|
|
117544
117763
|
aggregatePerpDexs: true,
|
|
117545
|
-
perpDexScope:
|
|
117764
|
+
perpDexScope: perpDexScopeForSymbols(symbols),
|
|
117546
117765
|
feeSymbols: symbols,
|
|
117547
117766
|
includeEffectiveTakerRate: true,
|
|
117548
117767
|
// A Server bot's cycle reads the account authoritatively, as the Python
|
|
@@ -117550,6 +117769,36 @@ ${behaviorJson}
|
|
|
117550
117769
|
forceRefresh: input.executionMode === "server",
|
|
117551
117770
|
sessionId,
|
|
117552
117771
|
signal: timeoutController.signal
|
|
117772
|
+
}).catch(async (error48) => {
|
|
117773
|
+
if (input.executionMode !== "server" || !(error48 instanceof HyperliquidPublicReadError)) throw error48;
|
|
117774
|
+
promptRescueSequence += 1;
|
|
117775
|
+
try {
|
|
117776
|
+
const rescued = await requestServerHostPromptRescue(profileId, {
|
|
117777
|
+
sessionId,
|
|
117778
|
+
deviceId,
|
|
117779
|
+
schedulerInstanceId: String(input.schedulerInstanceId || "").trim(),
|
|
117780
|
+
mode: input.mode,
|
|
117781
|
+
analysisRunId: String(input.analysisRunId || "").trim() || cycleId,
|
|
117782
|
+
cycleId,
|
|
117783
|
+
symbol: localFallbackSymbol,
|
|
117784
|
+
symbols,
|
|
117785
|
+
requestSequence: promptRescueSequence,
|
|
117786
|
+
serverReason: error48.code
|
|
117787
|
+
}, {
|
|
117788
|
+
schedulerInstanceId: String(input.schedulerInstanceId || "").trim(),
|
|
117789
|
+
signal: timeoutController.signal
|
|
117790
|
+
});
|
|
117791
|
+
appendRuntimeDebugEvent({ label: "account_state_prompt_rescued", note: `job=${rescued.job_id} reason=${error48.code}` });
|
|
117792
|
+
return accountStateFromServerPromptRescueSnapshot(rescued.snapshot, localFallbackSymbol);
|
|
117793
|
+
} catch (rescueError) {
|
|
117794
|
+
if (timeoutController.signal.aborted) throw rescueError;
|
|
117795
|
+
appendRuntimeDebugEvent({
|
|
117796
|
+
label: "account_state_prompt_rescue_unavailable",
|
|
117797
|
+
note: rescueError instanceof Error ? rescueError.message : String(rescueError),
|
|
117798
|
+
outcome: "error"
|
|
117799
|
+
});
|
|
117800
|
+
throw error48;
|
|
117801
|
+
}
|
|
117553
117802
|
}).then((state2) => {
|
|
117554
117803
|
observeAccountState(input, state2);
|
|
117555
117804
|
latestPositions = state2.positions;
|
|
@@ -117654,7 +117903,7 @@ ${behaviorJson}
|
|
|
117654
117903
|
marketTimeframe,
|
|
117655
117904
|
effectiveDefaultLookbacks,
|
|
117656
117905
|
config2.max_analysis_lookback
|
|
117657
|
-
),
|
|
117906
|
+
), indicatorCandleCount),
|
|
117658
117907
|
"hyperliquid",
|
|
117659
117908
|
marketSymbol,
|
|
117660
117909
|
marketTimeframe,
|
|
@@ -118125,7 +118374,7 @@ ${stringifyPromptJson(candlesPayload)}
|
|
|
118125
118374
|
cutoffMs: behaviorMemoryCutoffMs,
|
|
118126
118375
|
symbols: promptSymbols,
|
|
118127
118376
|
perpDexAccounts: accountSummary.perp_dex_accounts,
|
|
118128
|
-
unitSize: metadataTradeSize,
|
|
118377
|
+
unitSize: capacityUnitSize(metadataTradeSize, config2.default_ai_trade_amount),
|
|
118129
118378
|
effectiveTakerRates,
|
|
118130
118379
|
maxTradesGlobal,
|
|
118131
118380
|
maxTradesPerExchange,
|
|
@@ -119635,7 +119884,6 @@ var init_engine = __esm({
|
|
|
119635
119884
|
return null;
|
|
119636
119885
|
}
|
|
119637
119886
|
const snapshot = getLatestRuntimeProviderFailureTelemetrySnapshot({
|
|
119638
|
-
maxAgeMs: CLIENT_RUNTIME_POLICY.provider_failure_diagnostics_max_age_milliseconds,
|
|
119639
119887
|
label: providerLabel,
|
|
119640
119888
|
traceId
|
|
119641
119889
|
});
|
|
@@ -120153,6 +120401,8 @@ var init_engine = __esm({
|
|
|
120153
120401
|
this._stopPromise = null;
|
|
120154
120402
|
this._scheduledSuspendPromise = null;
|
|
120155
120403
|
this._loopIntervalMs = null;
|
|
120404
|
+
// When this runtime last checked in for Copy Trading (_processClientCopyTrading).
|
|
120405
|
+
this._lastClientCopyCheckInAtMs = null;
|
|
120156
120406
|
this._heartbeatIntervalMs = null;
|
|
120157
120407
|
this._leaseStaleAfterMs = null;
|
|
120158
120408
|
this._heartbeatOfflineAfterMs = null;
|
|
@@ -122548,6 +122798,18 @@ var init_engine = __esm({
|
|
|
122548
122798
|
this._analysisAbortReason = null;
|
|
122549
122799
|
const analysisAbortController = new AbortController();
|
|
122550
122800
|
this._analysisAbortController = analysisAbortController;
|
|
122801
|
+
let copyTradingCheckedIn = false;
|
|
122802
|
+
const checkInCopyTrading = async (config2) => {
|
|
122803
|
+
copyTradingCheckedIn = true;
|
|
122804
|
+
this._lastClientCopyCheckInAtMs = Date.now();
|
|
122805
|
+
await this._processClientCopyTrading({
|
|
122806
|
+
profileId,
|
|
122807
|
+
runtimeSessionId: sessionId,
|
|
122808
|
+
runtimeDeviceId: deviceId,
|
|
122809
|
+
config: config2,
|
|
122810
|
+
signal: analysisAbortController.signal
|
|
122811
|
+
});
|
|
122812
|
+
};
|
|
122551
122813
|
let decisionSubmitted = false;
|
|
122552
122814
|
let cycleModelCalls = [];
|
|
122553
122815
|
let cycleModelCallsReported = false;
|
|
@@ -122821,13 +123083,7 @@ var init_engine = __esm({
|
|
|
122821
123083
|
}
|
|
122822
123084
|
if (runtimeMode === "trader" && !cancelled()) {
|
|
122823
123085
|
try {
|
|
122824
|
-
await this.
|
|
122825
|
-
profileId,
|
|
122826
|
-
runtimeSessionId: sessionId,
|
|
122827
|
-
runtimeDeviceId: deviceId,
|
|
122828
|
-
config: await this.getExecutionConfig(profileId),
|
|
122829
|
-
signal: analysisAbortController.signal
|
|
122830
|
-
});
|
|
123086
|
+
await checkInCopyTrading(await this.getExecutionConfig(profileId));
|
|
122831
123087
|
} catch (copyTradingError) {
|
|
122832
123088
|
appendRuntimeDebugEvent({
|
|
122833
123089
|
label: "ai_schedule_paused_copy_poll_failed",
|
|
@@ -123011,14 +123267,7 @@ var init_engine = __esm({
|
|
|
123011
123267
|
if (this._primaryAnalysisDisabled) {
|
|
123012
123268
|
this._nextRunAtMs = null;
|
|
123013
123269
|
}
|
|
123014
|
-
|
|
123015
|
-
await this._processClientCopyTrading({
|
|
123016
|
-
profileId,
|
|
123017
|
-
runtimeSessionId: sessionId,
|
|
123018
|
-
runtimeDeviceId: deviceId,
|
|
123019
|
-
config: config2,
|
|
123020
|
-
signal: analysisAbortController.signal
|
|
123021
|
-
});
|
|
123270
|
+
await checkInCopyTrading(await this.getExecutionConfig(profileId));
|
|
123022
123271
|
}
|
|
123023
123272
|
this._lastError = null;
|
|
123024
123273
|
this._notifyListeners();
|
|
@@ -123545,13 +123794,7 @@ var init_engine = __esm({
|
|
|
123545
123794
|
if (this._windowHandoffRequested) {
|
|
123546
123795
|
return;
|
|
123547
123796
|
}
|
|
123548
|
-
await
|
|
123549
|
-
profileId,
|
|
123550
|
-
runtimeSessionId: sessionId,
|
|
123551
|
-
runtimeDeviceId: deviceId,
|
|
123552
|
-
config: config2,
|
|
123553
|
-
signal: analysisAbortController.signal
|
|
123554
|
-
});
|
|
123797
|
+
await checkInCopyTrading(config2);
|
|
123555
123798
|
this._executionModeMismatchConsecutiveCount = 0;
|
|
123556
123799
|
if (executionFailures.length > 0) {
|
|
123557
123800
|
cycleOutcome = "failed";
|
|
@@ -123752,6 +123995,17 @@ var init_engine = __esm({
|
|
|
123752
123995
|
if (this._isExecuting) {
|
|
123753
123996
|
this._isExecuting = false;
|
|
123754
123997
|
}
|
|
123998
|
+
if (runtimeMode === "trader" && this._expectedExecutionMode !== "server" && !copyTradingCheckedIn && this._state === "running" && !this._isStopping && !this._windowHandoffRequested && !this._killswitchLatched && !this._executionFinalizationRequired && !this._scheduledSuspendPromise && !analysisAbortController.signal.aborted && this._profileId === profileId && this._sessionId === sessionId && this._deviceId === deviceId && (this._lastClientCopyCheckInAtMs === null || this._loopIntervalMs === null || Date.now() - this._lastClientCopyCheckInAtMs >= this._loopIntervalMs)) {
|
|
123999
|
+
try {
|
|
124000
|
+
await checkInCopyTrading(await this.getExecutionConfig(profileId));
|
|
124001
|
+
} catch (copyTradingError) {
|
|
124002
|
+
appendRuntimeDebugEvent({
|
|
124003
|
+
label: "copy_trading_cycle_end_check_in_failed",
|
|
124004
|
+
note: getSanitizedRuntimeErrorMessage(copyTradingError) || "Copy Trading check-in failed.",
|
|
124005
|
+
outcome: "error"
|
|
124006
|
+
});
|
|
124007
|
+
}
|
|
124008
|
+
}
|
|
123755
124009
|
if (this._analysisAbortController === analysisAbortController) {
|
|
123756
124010
|
this._analysisAbortController = null;
|
|
123757
124011
|
}
|
|
@@ -126772,7 +127026,11 @@ async function runVtxCli(argv2, env = process.env) {
|
|
|
126772
127026
|
}
|
|
126773
127027
|
throw new Error(`Unsupported command: ${[group, command].filter(Boolean).join(" ") || "(none)"}`);
|
|
126774
127028
|
} catch (error48) {
|
|
126775
|
-
|
|
127029
|
+
if (error48 instanceof HeadlessRuntimeTakeoverRequiredError) {
|
|
127030
|
+
return { exitCode: AGENT_CLI_TAKEOVER_REQUIRED_EXIT_CODE, stdout: "", stderr: `${error48.message}
|
|
127031
|
+
` };
|
|
127032
|
+
}
|
|
127033
|
+
const message = error48 instanceof AgentClientError ? error48.message : error48 instanceof Error ? error48.message : "Unknown CLI error";
|
|
126776
127034
|
return { exitCode: 1, stdout: "", stderr: `${message}
|
|
126777
127035
|
` };
|
|
126778
127036
|
}
|