@vtxmacro/cli 2026.10.20 → 2026.10.21
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 +4 -3
- package/bin/vtx-mcp.js +5 -4
- package/bin/vtx-service-bootstrap.js +5 -4
- package/bin/vtx-service-launcher.js +4 -3
- package/bin/vtx.js +756 -296
- 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.21", 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
|
|
|
@@ -514,7 +514,6 @@ var init_runtime_policy_generated = __esm({
|
|
|
514
514
|
hidden_ticker_update_interval_ms: 16,
|
|
515
515
|
client_close_fill_sync_attempts: 3,
|
|
516
516
|
client_close_fill_sync_retry_step_ms: 300,
|
|
517
|
-
leverage_update_debounce_ms: 250,
|
|
518
517
|
post_leverage_update_order_delay_ms: 250,
|
|
519
518
|
takeover_telemetry_error_chars: 500,
|
|
520
519
|
takeover_telemetry_error_name_chars: 120,
|
|
@@ -658,7 +657,8 @@ var init_runtime_policy_generated = __esm({
|
|
|
658
657
|
debug_event_lines: 120
|
|
659
658
|
},
|
|
660
659
|
help_page: {
|
|
661
|
-
hash_scroll_settle_ms: 250
|
|
660
|
+
hash_scroll_settle_ms: 250,
|
|
661
|
+
app_docs_retry_seconds: 3
|
|
662
662
|
},
|
|
663
663
|
history_page: {
|
|
664
664
|
preferences_save_debounce_ms: 500,
|
|
@@ -1340,7 +1340,8 @@ var init_runtime_policy_generated = __esm({
|
|
|
1340
1340
|
app_host: {
|
|
1341
1341
|
profiles_refresh_interval_seconds: 60,
|
|
1342
1342
|
running_report_interval_seconds: 5,
|
|
1343
|
-
|
|
1343
|
+
page_start_wait_seconds: 45,
|
|
1344
|
+
page_start_poll_seconds: 1,
|
|
1344
1345
|
profiles_read_timeout_seconds: 30
|
|
1345
1346
|
}
|
|
1346
1347
|
},
|
|
@@ -1465,7 +1466,7 @@ var init_runtime_policy_generated = __esm({
|
|
|
1465
1466
|
});
|
|
1466
1467
|
|
|
1467
1468
|
// lib/constants.ts
|
|
1468
|
-
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, USD_DISPLAY_DECIMALS, 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_ROW_WEIGHTED_INFO_REQUESTS, HYPERLIQUID_INFO_ROWS_PER_EXTRA_WEIGHT, 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_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;
|
|
1469
|
+
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, PROMPT_RESCUE_ASKS_PER_CYCLE_BUILD, USD_DISPLAY_DECIMALS, 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_RELATIVE_VOLUME_DIGITS, BINARY_RADIX, 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_ROW_WEIGHTED_INFO_REQUESTS, HYPERLIQUID_INFO_ROWS_PER_EXTRA_WEIGHT, 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_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;
|
|
1469
1470
|
var init_constants = __esm({
|
|
1470
1471
|
"lib/constants.ts"() {
|
|
1471
1472
|
"use strict";
|
|
@@ -1558,6 +1559,7 @@ var init_constants = __esm({
|
|
|
1558
1559
|
HTTP_STATUS_MAX = 599;
|
|
1559
1560
|
HTTP_CLIENT_ERROR_MIN = 400;
|
|
1560
1561
|
HTTP_SERVER_ERROR_MIN = 500;
|
|
1562
|
+
PROMPT_RESCUE_ASKS_PER_CYCLE_BUILD = 2;
|
|
1561
1563
|
USD_DISPLAY_DECIMALS = 2;
|
|
1562
1564
|
AI_COST_ESTIMATE_PERIOD_DAYS = 30;
|
|
1563
1565
|
SECONDS_PER_AI_COST_ESTIMATE_PERIOD = SECONDS_PER_DAY * AI_COST_ESTIMATE_PERIOD_DAYS;
|
|
@@ -1830,6 +1832,8 @@ var init_constants = __esm({
|
|
|
1830
1832
|
PROMPT_FIXED_DIGITS = 2;
|
|
1831
1833
|
PROMPT_SIGNIFICANT_DIGITS = 5;
|
|
1832
1834
|
PROMPT_NUMBER_MAX_DIGITS = 100;
|
|
1835
|
+
PROMPT_RELATIVE_VOLUME_DIGITS = 2;
|
|
1836
|
+
BINARY_RADIX = 2;
|
|
1833
1837
|
PROMPT_PRICE_INTEGER_THRESHOLD = 1e5;
|
|
1834
1838
|
PROMPT_MARGIN_UTILIZATION_DECIMALS = 1;
|
|
1835
1839
|
PROMPT_SYMBOL_MAX_CHARS = 100;
|
|
@@ -20328,7 +20332,6 @@ var init_runtime_policy_generated2 = __esm({
|
|
|
20328
20332
|
hidden_ticker_update_interval_ms: 16,
|
|
20329
20333
|
client_close_fill_sync_attempts: 3,
|
|
20330
20334
|
client_close_fill_sync_retry_step_ms: 300,
|
|
20331
|
-
leverage_update_debounce_ms: 250,
|
|
20332
20335
|
post_leverage_update_order_delay_ms: 250,
|
|
20333
20336
|
takeover_telemetry_error_chars: 500,
|
|
20334
20337
|
takeover_telemetry_error_name_chars: 120,
|
|
@@ -20472,7 +20475,8 @@ var init_runtime_policy_generated2 = __esm({
|
|
|
20472
20475
|
debug_event_lines: 120
|
|
20473
20476
|
},
|
|
20474
20477
|
help_page: {
|
|
20475
|
-
hash_scroll_settle_ms: 250
|
|
20478
|
+
hash_scroll_settle_ms: 250,
|
|
20479
|
+
app_docs_retry_seconds: 3
|
|
20476
20480
|
},
|
|
20477
20481
|
history_page: {
|
|
20478
20482
|
preferences_save_debounce_ms: 500,
|
|
@@ -21154,7 +21158,8 @@ var init_runtime_policy_generated2 = __esm({
|
|
|
21154
21158
|
app_host: {
|
|
21155
21159
|
profiles_refresh_interval_seconds: 60,
|
|
21156
21160
|
running_report_interval_seconds: 5,
|
|
21157
|
-
|
|
21161
|
+
page_start_wait_seconds: 45,
|
|
21162
|
+
page_start_poll_seconds: 1,
|
|
21158
21163
|
profiles_read_timeout_seconds: 30
|
|
21159
21164
|
}
|
|
21160
21165
|
},
|
|
@@ -52886,6 +52891,66 @@ var init_protection_storage = __esm({
|
|
|
52886
52891
|
}
|
|
52887
52892
|
});
|
|
52888
52893
|
|
|
52894
|
+
// lib/android-app.ts
|
|
52895
|
+
var ANDROID_APP_PACKAGES, ANDROID_APP_REFERRER_SCHEME, ANDROID_APP_LAUNCH_STORAGE_KEY, ANDROID_APP_HOST_FRAGMENT_PARAM, knownLaunch, storedLaunch, referrerPackage, hostFragment, remember, androidAppLaunch, isAndroidAppPage;
|
|
52896
|
+
var init_android_app = __esm({
|
|
52897
|
+
"lib/android-app.ts"() {
|
|
52898
|
+
"use strict";
|
|
52899
|
+
init_define_VTX_EXO_POLICY();
|
|
52900
|
+
init_define_VTX_GROK_POLICY();
|
|
52901
|
+
init_define_VTX_PI_MODEL_POLICY();
|
|
52902
|
+
ANDROID_APP_PACKAGES = ["com.vtxmacro.android", "com.vtxmacro.android.debug"];
|
|
52903
|
+
ANDROID_APP_REFERRER_SCHEME = "android-app://";
|
|
52904
|
+
ANDROID_APP_LAUNCH_STORAGE_KEY = "vtx_android_app_launch";
|
|
52905
|
+
ANDROID_APP_HOST_FRAGMENT_PARAM = "vtx_app_host";
|
|
52906
|
+
storedLaunch = () => {
|
|
52907
|
+
try {
|
|
52908
|
+
const parsed = JSON.parse(window.sessionStorage.getItem(ANDROID_APP_LAUNCH_STORAGE_KEY) || "null");
|
|
52909
|
+
if (!parsed || !ANDROID_APP_PACKAGES.includes(parsed.packageName)) return null;
|
|
52910
|
+
return { packageName: parsed.packageName, hostDeviceId: typeof parsed.hostDeviceId === "string" ? parsed.hostDeviceId : null };
|
|
52911
|
+
} catch {
|
|
52912
|
+
return null;
|
|
52913
|
+
}
|
|
52914
|
+
};
|
|
52915
|
+
referrerPackage = () => {
|
|
52916
|
+
const referrer = document.referrer;
|
|
52917
|
+
if (!referrer.startsWith(ANDROID_APP_REFERRER_SCHEME)) return null;
|
|
52918
|
+
const packageName = referrer.slice(ANDROID_APP_REFERRER_SCHEME.length).replace(/\/$/, "");
|
|
52919
|
+
return ANDROID_APP_PACKAGES.includes(packageName) ? packageName : null;
|
|
52920
|
+
};
|
|
52921
|
+
hostFragment = () => new URLSearchParams(window.location.hash.replace(/^#/, "")).get(ANDROID_APP_HOST_FRAGMENT_PARAM);
|
|
52922
|
+
remember = (launch) => {
|
|
52923
|
+
knownLaunch = launch;
|
|
52924
|
+
try {
|
|
52925
|
+
window.sessionStorage.setItem(ANDROID_APP_LAUNCH_STORAGE_KEY, JSON.stringify(launch));
|
|
52926
|
+
} catch {
|
|
52927
|
+
}
|
|
52928
|
+
const fragment = new URLSearchParams(window.location.hash.replace(/^#/, ""));
|
|
52929
|
+
if (fragment.has(ANDROID_APP_HOST_FRAGMENT_PARAM)) {
|
|
52930
|
+
fragment.delete(ANDROID_APP_HOST_FRAGMENT_PARAM);
|
|
52931
|
+
const rest = fragment.toString();
|
|
52932
|
+
window.history.replaceState(window.history.state, "", `${window.location.pathname}${window.location.search}${rest ? `#${rest}` : ""}`);
|
|
52933
|
+
}
|
|
52934
|
+
return launch;
|
|
52935
|
+
};
|
|
52936
|
+
androidAppLaunch = () => {
|
|
52937
|
+
if (typeof window === "undefined") return null;
|
|
52938
|
+
if (knownLaunch !== void 0) {
|
|
52939
|
+
const named = knownLaunch && !knownLaunch.hostDeviceId ? hostFragment() : null;
|
|
52940
|
+
return named && knownLaunch ? remember({ ...knownLaunch, hostDeviceId: named }) : knownLaunch;
|
|
52941
|
+
}
|
|
52942
|
+
const stored = storedLaunch();
|
|
52943
|
+
const packageName = referrerPackage();
|
|
52944
|
+
if (!packageName) {
|
|
52945
|
+
knownLaunch = stored;
|
|
52946
|
+
return knownLaunch;
|
|
52947
|
+
}
|
|
52948
|
+
return remember({ packageName, hostDeviceId: hostFragment() || stored?.hostDeviceId || null });
|
|
52949
|
+
};
|
|
52950
|
+
isAndroidAppPage = () => androidAppLaunch() !== null;
|
|
52951
|
+
}
|
|
52952
|
+
});
|
|
52953
|
+
|
|
52889
52954
|
// lib/api/browser-api-url.ts
|
|
52890
52955
|
function resolveBrowserApiUrl(hostname3, protocol, publicApiUrl, development, privateSecondOctets) {
|
|
52891
52956
|
if (development) {
|
|
@@ -53006,6 +53071,7 @@ var init_shared = __esm({
|
|
|
53006
53071
|
init_define_VTX_EXO_POLICY();
|
|
53007
53072
|
init_define_VTX_GROK_POLICY();
|
|
53008
53073
|
init_define_VTX_PI_MODEL_POLICY();
|
|
53074
|
+
init_android_app();
|
|
53009
53075
|
init_browser_api_url();
|
|
53010
53076
|
init_runtime_policy_generated2();
|
|
53011
53077
|
init_constants();
|
|
@@ -53181,6 +53247,7 @@ var init_shared = __esm({
|
|
|
53181
53247
|
return `web-${action}-${suffix}`;
|
|
53182
53248
|
};
|
|
53183
53249
|
getErrorMessage = (error48, defaultMessage) => {
|
|
53250
|
+
if (typeof error48?.detail_in_android_app === "string" && isAndroidAppPage()) return error48.detail_in_android_app;
|
|
53184
53251
|
const extractRateLimitMessage = (raw) => {
|
|
53185
53252
|
if (!/rate\s*limit|429|cooling\s*down/i.test(raw)) return null;
|
|
53186
53253
|
const match = raw.match(/cooling\s*down\s*for\s*([0-9]+(?:\.[0-9]+)?)s/i);
|
|
@@ -54864,40 +54931,6 @@ var init_client_host_commands = __esm({
|
|
|
54864
54931
|
}
|
|
54865
54932
|
});
|
|
54866
54933
|
|
|
54867
|
-
// lib/api/insights-access-center.ts
|
|
54868
|
-
var init_insights_access_center = __esm({
|
|
54869
|
-
"lib/api/insights-access-center.ts"() {
|
|
54870
|
-
"use strict";
|
|
54871
|
-
init_define_VTX_EXO_POLICY();
|
|
54872
|
-
init_define_VTX_GROK_POLICY();
|
|
54873
|
-
init_define_VTX_PI_MODEL_POLICY();
|
|
54874
|
-
init_shared();
|
|
54875
|
-
}
|
|
54876
|
-
});
|
|
54877
|
-
|
|
54878
|
-
// lib/api/updates.ts
|
|
54879
|
-
var init_updates = __esm({
|
|
54880
|
-
"lib/api/updates.ts"() {
|
|
54881
|
-
"use strict";
|
|
54882
|
-
init_define_VTX_EXO_POLICY();
|
|
54883
|
-
init_define_VTX_GROK_POLICY();
|
|
54884
|
-
init_define_VTX_PI_MODEL_POLICY();
|
|
54885
|
-
init_shared();
|
|
54886
|
-
init_constants();
|
|
54887
|
-
}
|
|
54888
|
-
});
|
|
54889
|
-
|
|
54890
|
-
// lib/api/profile-emoji.ts
|
|
54891
|
-
var init_profile_emoji = __esm({
|
|
54892
|
-
"lib/api/profile-emoji.ts"() {
|
|
54893
|
-
"use strict";
|
|
54894
|
-
init_define_VTX_EXO_POLICY();
|
|
54895
|
-
init_define_VTX_GROK_POLICY();
|
|
54896
|
-
init_define_VTX_PI_MODEL_POLICY();
|
|
54897
|
-
init_shared();
|
|
54898
|
-
}
|
|
54899
|
-
});
|
|
54900
|
-
|
|
54901
54934
|
// lib/runtime/host-storage.ts
|
|
54902
54935
|
function configureRuntimeHostStorage(storage3) {
|
|
54903
54936
|
configuredStorage = storage3;
|
|
@@ -55144,6 +55177,107 @@ var init_server_runtime_lease = __esm({
|
|
|
55144
55177
|
}
|
|
55145
55178
|
});
|
|
55146
55179
|
|
|
55180
|
+
// lib/api/logout.ts
|
|
55181
|
+
var init_logout = __esm({
|
|
55182
|
+
"lib/api/logout.ts"() {
|
|
55183
|
+
"use strict";
|
|
55184
|
+
init_define_VTX_EXO_POLICY();
|
|
55185
|
+
init_define_VTX_GROK_POLICY();
|
|
55186
|
+
init_define_VTX_PI_MODEL_POLICY();
|
|
55187
|
+
init_android_app();
|
|
55188
|
+
init_server_runtime_lease();
|
|
55189
|
+
init_shared();
|
|
55190
|
+
}
|
|
55191
|
+
});
|
|
55192
|
+
|
|
55193
|
+
// lib/api/insights-access-center.ts
|
|
55194
|
+
var init_insights_access_center = __esm({
|
|
55195
|
+
"lib/api/insights-access-center.ts"() {
|
|
55196
|
+
"use strict";
|
|
55197
|
+
init_define_VTX_EXO_POLICY();
|
|
55198
|
+
init_define_VTX_GROK_POLICY();
|
|
55199
|
+
init_define_VTX_PI_MODEL_POLICY();
|
|
55200
|
+
init_shared();
|
|
55201
|
+
}
|
|
55202
|
+
});
|
|
55203
|
+
|
|
55204
|
+
// lib/api/updates.ts
|
|
55205
|
+
var init_updates = __esm({
|
|
55206
|
+
"lib/api/updates.ts"() {
|
|
55207
|
+
"use strict";
|
|
55208
|
+
init_define_VTX_EXO_POLICY();
|
|
55209
|
+
init_define_VTX_GROK_POLICY();
|
|
55210
|
+
init_define_VTX_PI_MODEL_POLICY();
|
|
55211
|
+
init_shared();
|
|
55212
|
+
init_constants();
|
|
55213
|
+
}
|
|
55214
|
+
});
|
|
55215
|
+
|
|
55216
|
+
// lib/api/profile-emoji.ts
|
|
55217
|
+
var init_profile_emoji = __esm({
|
|
55218
|
+
"lib/api/profile-emoji.ts"() {
|
|
55219
|
+
"use strict";
|
|
55220
|
+
init_define_VTX_EXO_POLICY();
|
|
55221
|
+
init_define_VTX_GROK_POLICY();
|
|
55222
|
+
init_define_VTX_PI_MODEL_POLICY();
|
|
55223
|
+
init_shared();
|
|
55224
|
+
}
|
|
55225
|
+
});
|
|
55226
|
+
|
|
55227
|
+
// app/(app)/trade/tradeRefreshPolicy.ts
|
|
55228
|
+
function parseTradeRefreshPolicy(raw) {
|
|
55229
|
+
const source = raw && typeof raw === "object" ? raw : {};
|
|
55230
|
+
const parsed = {};
|
|
55231
|
+
for (const key of TRADE_REFRESH_POLICY_KEYS) {
|
|
55232
|
+
const value = Number(source[key]);
|
|
55233
|
+
if (!Number.isFinite(value) || value <= 0) {
|
|
55234
|
+
throw new Error(`Missing required runtime policy ui.trade_refresh_policy.${key}`);
|
|
55235
|
+
}
|
|
55236
|
+
parsed[key] = value;
|
|
55237
|
+
}
|
|
55238
|
+
if (parsed.account_read_backoff_min_ms > parsed.account_read_backoff_max_ms) {
|
|
55239
|
+
throw new Error("Invalid runtime policy ui.trade_refresh_policy: account_read_backoff_min_ms exceeds account_read_backoff_max_ms");
|
|
55240
|
+
}
|
|
55241
|
+
return parsed;
|
|
55242
|
+
}
|
|
55243
|
+
var TRADE_REFRESH_POLICY_KEYS, TRADE_REFRESH_POLICY;
|
|
55244
|
+
var init_tradeRefreshPolicy = __esm({
|
|
55245
|
+
"app/(app)/trade/tradeRefreshPolicy.ts"() {
|
|
55246
|
+
"use strict";
|
|
55247
|
+
init_define_VTX_EXO_POLICY();
|
|
55248
|
+
init_define_VTX_GROK_POLICY();
|
|
55249
|
+
init_define_VTX_PI_MODEL_POLICY();
|
|
55250
|
+
init_constants();
|
|
55251
|
+
init_runtime_policy_generated2();
|
|
55252
|
+
TRADE_REFRESH_POLICY_KEYS = [
|
|
55253
|
+
"server_config_stream_timeout_ms",
|
|
55254
|
+
"config_retry_interval_ms",
|
|
55255
|
+
"copy_trading_status_poll_ms",
|
|
55256
|
+
"post_execution_refresh_delay_ms",
|
|
55257
|
+
"account_read_backoff_min_ms",
|
|
55258
|
+
"account_read_backoff_max_ms",
|
|
55259
|
+
"account_read_backoff_exponent_max",
|
|
55260
|
+
"ai_start_grace_min_ms"
|
|
55261
|
+
];
|
|
55262
|
+
TRADE_REFRESH_POLICY = parseTradeRefreshPolicy(
|
|
55263
|
+
runtime_policy_generated_default2.ui?.trade_refresh_policy
|
|
55264
|
+
);
|
|
55265
|
+
}
|
|
55266
|
+
});
|
|
55267
|
+
|
|
55268
|
+
// lib/api/account-summary.ts
|
|
55269
|
+
var init_account_summary = __esm({
|
|
55270
|
+
"lib/api/account-summary.ts"() {
|
|
55271
|
+
"use strict";
|
|
55272
|
+
init_define_VTX_EXO_POLICY();
|
|
55273
|
+
init_define_VTX_GROK_POLICY();
|
|
55274
|
+
init_define_VTX_PI_MODEL_POLICY();
|
|
55275
|
+
init_tradeRefreshPolicy();
|
|
55276
|
+
init_constants();
|
|
55277
|
+
init_shared();
|
|
55278
|
+
}
|
|
55279
|
+
});
|
|
55280
|
+
|
|
55147
55281
|
// lib/runtime/hyperliquid-account-mode-contract.ts
|
|
55148
55282
|
function resolveExactHyperliquidAccountMode(userAbstraction, ...dexEvidence) {
|
|
55149
55283
|
const mode = extractCanonicalHyperliquidAccountMode(userAbstraction);
|
|
@@ -55744,7 +55878,7 @@ var init_hyperliquid_order_status = __esm({
|
|
|
55744
55878
|
});
|
|
55745
55879
|
|
|
55746
55880
|
// lib/runtime/hyperliquid-public-read.ts
|
|
55747
|
-
var policy, weights, recoveryPolicy, budgets, unpersistedBudgets, cache, pending2, PREFIX, priorityRank, createHyperliquidPublicPriorityScope, promoteHyperliquidPublicPriority, hostTransport, abortError2, checkAbort, wait, waitUnlessPromoted, storage, loadBudget, saveBudget, withBudgetLock, HyperliquidPublicReadError, getHyperliquidPublicReadBudget, cooldownError, recoveryWaitError, nonTradingWeightCap, nonTradingWaitMs, fallbackDelayMs, admit, settleRowWeightedReservation, cooldown, finishHyperliquidRecoveryRequest, assertHyperliquidRecoveryDispatch, validateHyperliquidRecoveryDispatch, cacheTtlMs, eligibleCache, reserveHyperliquidPublicReads, releaseHyperliquidPublicReadReservation, admitHyperliquidExchangeRequest, recordHyperliquidExchangeResponse, readHyperliquidPublicInfo;
|
|
55881
|
+
var policy, weights, recoveryPolicy, budgets, unpersistedBudgets, cache, pending2, PREFIX, priorityRank, createHyperliquidPublicPriorityScope, promoteHyperliquidPublicPriority, hostTransport, hyperliquidPrivateInfoHeldOff, abortError2, checkAbort, wait, waitUnlessPromoted, storage, loadBudget, saveBudget, withBudgetLock, HyperliquidPublicReadError, getHyperliquidPublicReadBudget, cooldownError, recoveryWaitError, nonTradingWeightCap, nonTradingWaitMs, fallbackDelayMs, admit, settleRowWeightedReservation, cooldown, finishHyperliquidRecoveryRequest, assertHyperliquidRecoveryDispatch, validateHyperliquidRecoveryDispatch, cacheTtlMs, eligibleCache, reserveHyperliquidPublicReads, releaseHyperliquidPublicReadReservation, admitHyperliquidExchangeRequest, recordHyperliquidExchangeResponse, readHyperliquidPublicInfo;
|
|
55748
55882
|
var init_hyperliquid_public_read = __esm({
|
|
55749
55883
|
"lib/runtime/hyperliquid-public-read.ts"() {
|
|
55750
55884
|
"use strict";
|
|
@@ -55770,6 +55904,7 @@ var init_hyperliquid_public_read = __esm({
|
|
|
55770
55904
|
scope.followers?.forEach((promote) => promote(priority));
|
|
55771
55905
|
};
|
|
55772
55906
|
hostTransport = null;
|
|
55907
|
+
hyperliquidPrivateInfoHeldOff = async () => await hostTransport?.privateInfoHeldOff?.() === true;
|
|
55773
55908
|
abortError2 = (signal) => getSanitizedRuntimeAbortReason(signal, "Aborted");
|
|
55774
55909
|
checkAbort = (signal) => {
|
|
55775
55910
|
if (signal?.aborted) throw abortError2(signal);
|
|
@@ -56517,7 +56652,8 @@ var init_runtime_error_reason_rules = __esm({
|
|
|
56517
56652
|
{ contains: "order was not sent" },
|
|
56518
56653
|
{ any: [
|
|
56519
56654
|
{ contains: "signing key is not authorized for the configured wallet" },
|
|
56520
|
-
{ contains: "hyperliquid confirmed that the signing key is not authorized" }
|
|
56655
|
+
{ contains: "hyperliquid confirmed that the signing key is not authorized" },
|
|
56656
|
+
{ contains: "hyperliquid has not approved this key for this profile's wallet" }
|
|
56521
56657
|
] }
|
|
56522
56658
|
] } },
|
|
56523
56659
|
{ reason_code: "credentials_missing", when: { all: [
|
|
@@ -56581,7 +56717,8 @@ var init_runtime_error_reason_rules = __esm({
|
|
|
56581
56717
|
] } },
|
|
56582
56718
|
{ reason_code: "hyperliquid_wallet_not_authorized", when: { any: [
|
|
56583
56719
|
{ contains: "hyperliquid api wallet is not authorized" },
|
|
56584
|
-
{ contains: "hyperliquid signing key is not authorized for this wallet" }
|
|
56720
|
+
{ contains: "hyperliquid signing key is not authorized for this wallet" },
|
|
56721
|
+
{ contains: "hyperliquid has not approved this key for this profile's wallet" }
|
|
56585
56722
|
] } },
|
|
56586
56723
|
{ reason_code: "ai_service_rate_limit", when: { any: [
|
|
56587
56724
|
{ all: [
|
|
@@ -56747,6 +56884,21 @@ var init_runtime_error_reason_rules2 = __esm({
|
|
|
56747
56884
|
}
|
|
56748
56885
|
});
|
|
56749
56886
|
|
|
56887
|
+
// lib/runtime/signing-key-messages.ts
|
|
56888
|
+
var SIGNING_KEY_NOT_APPROVED, SIGNING_KEY_INVALID, SIGNING_KEY_THEN_START, SIGNING_KEY_NOT_APPROVED_THEN_START;
|
|
56889
|
+
var init_signing_key_messages = __esm({
|
|
56890
|
+
"lib/runtime/signing-key-messages.ts"() {
|
|
56891
|
+
"use strict";
|
|
56892
|
+
init_define_VTX_EXO_POLICY();
|
|
56893
|
+
init_define_VTX_GROK_POLICY();
|
|
56894
|
+
init_define_VTX_PI_MODEL_POLICY();
|
|
56895
|
+
SIGNING_KEY_NOT_APPROVED = "Hyperliquid has not approved this key for this profile's wallet. API wallets expire, so it may have run out. On Hyperliquid, open More > API and authorize an API wallet for this wallet, then paste its private key in System > Hyperliquid Configuration > Private Key (Secret) and save.";
|
|
56896
|
+
SIGNING_KEY_INVALID = "This is not a valid private key. Paste the API wallet's private key from Hyperliquid (0x followed by 64 characters).";
|
|
56897
|
+
SIGNING_KEY_THEN_START = "Then start the bot.";
|
|
56898
|
+
SIGNING_KEY_NOT_APPROVED_THEN_START = `${SIGNING_KEY_NOT_APPROVED} ${SIGNING_KEY_THEN_START}`;
|
|
56899
|
+
}
|
|
56900
|
+
});
|
|
56901
|
+
|
|
56750
56902
|
// lib/runtime/error-surface-contract.ts
|
|
56751
56903
|
var RUNTIME_SERVICE_UNAVAILABLE_TOKENS, RUNTIME_APP_BOOTSTRAP_UNAVAILABLE_TOKENS, RUNTIME_BROWSER_FETCH_FAILURE_TOKENS, SENSITIVE_DB_TOKENS, SCHEMA_DISCLOSURE_TOKENS, SQL_STATEMENT_PATTERN, TRACEBACK_PATTERN, DB_SESSION_STATE_PATTERNS, RUNTIME_MARKET_DATA_FAILURE_TOKENS, RUNTIME_CYCLE_DEADLINE_TOKENS, RUNTIME_TIMEOUT_TOKENS, RUNTIME_GENERIC_TIMEOUT_MESSAGE, LEGACY_RUNTIME_TIMEOUT_PATTERN, RUNTIME_PROVIDER_NETWORK_FAILURE_TOKENS, RUNTIME_EXPLICIT_CORS_TOKENS, RUNTIME_MODEL_UNAVAILABLE_TOKENS, RUNTIME_REASONING_CONTROL_REJECTION_TOKENS, RUNTIME_CANONICAL_PREFIX_TOKENS, RUNTIME_PROVIDER_RETRY_STATUS_PATTERN, RUNTIME_SERVICE_UNAVAILABLE_STATUSES, RUNTIME_MISSING_CONFIG_PATTERN, DEFAULT_RUNTIME_RETRY_SECONDS, normalizeRuntimeRetrySeconds, hasRuntimeRetrySeconds, runtimeRetryPhrase, applyRuntimeRetrySeconds, RUNTIME_PROVIDER_FAILURE_PATTERN, RUNTIME_HYPERLIQUID_RATE_LIMIT_PATTERN, RUNTIME_HYPERLIQUID_INFO_429_PATTERN, RUNTIME_HYPERLIQUID_REQUEST_TYPE_PATTERN, RUNTIME_HYPERLIQUID_WALLET_NOT_AUTHORIZED_PATTERN, runtimePausePrefix, ensureRuntimeWarningPrefix, stripRuntimeWarningPrefix, isRuntimeAppBootstrapUnavailableError, isSensitiveRuntimeErrorDetail, extractRuntimeProviderError, extractHttpStatusCode, formatHyperliquidRateLimitMessage, providerStatusLabel, PROVIDER_ATTEMPT_SUMMARY_ITEM, PROVIDER_ATTEMPT_SUMMARY_PATTERN, PROVIDER_ATTEMPT_STATUS_PATTERN, isCanonicalProviderAttemptSummary, providerAttemptSummaryStatuses, normalizeRuntimeErrorMessage, RUNTIME_ERROR_REASON_PREDICATES, deriveRuntimeErrorReasonCode, EXECUTION_DISPATCH_RISK_RANK, selectPrimaryExecutionFailure, EXECUTION_ERROR_DEFAULTS, isExecutionErrorReasonCode, RuntimeExecutionError, projectExecutionErrorContract, projectRuntimeErrorSurfaceContract;
|
|
56752
56904
|
var init_error_surface_contract = __esm({
|
|
@@ -56759,6 +56911,7 @@ var init_error_surface_contract = __esm({
|
|
|
56759
56911
|
init_status_contract();
|
|
56760
56912
|
init_runtime_redaction();
|
|
56761
56913
|
init_runtime_error_reason_rules2();
|
|
56914
|
+
init_signing_key_messages();
|
|
56762
56915
|
RUNTIME_SERVICE_UNAVAILABLE_TOKENS = [
|
|
56763
56916
|
"503",
|
|
56764
56917
|
"service unavailable",
|
|
@@ -57058,7 +57211,7 @@ var init_error_surface_contract = __esm({
|
|
|
57058
57211
|
return formatHyperliquidRateLimitMessage({ message, pausePrefix, retrySeconds });
|
|
57059
57212
|
}
|
|
57060
57213
|
if (RUNTIME_HYPERLIQUID_WALLET_NOT_AUTHORIZED_PATTERN.test(message)) {
|
|
57061
|
-
return `${pausePrefix}:
|
|
57214
|
+
return `${pausePrefix}: ${SIGNING_KEY_NOT_APPROVED_THEN_START}`;
|
|
57062
57215
|
}
|
|
57063
57216
|
if (statusCode == null && isRuntimeAppBootstrapUnavailableError(message)) {
|
|
57064
57217
|
return `${pausePrefix}: VTX could not load this profile's runtime settings because the server returned 503. ${runtimeRetryPhrase(retrySeconds)}`;
|
|
@@ -57215,7 +57368,7 @@ var init_error_surface_contract = __esm({
|
|
|
57215
57368
|
} else if (resolvedReason === "signer_validation_unavailable") {
|
|
57216
57369
|
message = `\u26A0\uFE0F The ${orderLabel} was not sent: VTX could not verify this profile's signing-key authorization because required Hyperliquid account data was temporarily unavailable. No order was submitted, and the signing key was not rejected. VTX will try again automatically if the trader is running; no action is required.`;
|
|
57217
57370
|
} else if (resolvedReason === "wallet_not_authorized") {
|
|
57218
|
-
message = `\u26A0\uFE0F The ${orderLabel} was not sent:
|
|
57371
|
+
message = `\u26A0\uFE0F The ${orderLabel} was not sent: ${SIGNING_KEY_NOT_APPROVED}`;
|
|
57219
57372
|
} else if (resolvedReason === "credentials_missing") {
|
|
57220
57373
|
message = `\u26A0\uFE0F The ${orderLabel} was not sent: a wallet address and authorized signing key are required for trading.`;
|
|
57221
57374
|
} else if (resolvedReason === "local_safety_block") {
|
|
@@ -91685,9 +91838,11 @@ var init_api2 = __esm({
|
|
|
91685
91838
|
init_market_data();
|
|
91686
91839
|
init_screener();
|
|
91687
91840
|
init_client_host_commands();
|
|
91841
|
+
init_logout();
|
|
91688
91842
|
init_insights_access_center();
|
|
91689
91843
|
init_updates();
|
|
91690
91844
|
init_profile_emoji();
|
|
91845
|
+
init_account_summary();
|
|
91691
91846
|
init_server_runtime_lease();
|
|
91692
91847
|
clientRuntimeSecretHeaders = (profileId) => {
|
|
91693
91848
|
const headers = getProfileHeaders({}, profileId);
|
|
@@ -92322,6 +92477,7 @@ var init_hyperliquid_signer_binding = __esm({
|
|
|
92322
92477
|
init_hyperliquid_client();
|
|
92323
92478
|
init_hyperliquid_exchange_rejections();
|
|
92324
92479
|
init_error_surface_contract();
|
|
92480
|
+
init_signing_key_messages();
|
|
92325
92481
|
DeviceSigningKeyError = class extends RuntimeExecutionError {
|
|
92326
92482
|
constructor(message, reasonCode, deviceSigningKeyFailure) {
|
|
92327
92483
|
super(message, reasonCode);
|
|
@@ -92393,7 +92549,7 @@ var init_hyperliquid_signer_binding = __esm({
|
|
|
92393
92549
|
);
|
|
92394
92550
|
} catch {
|
|
92395
92551
|
throw new DeviceSigningKeyError(
|
|
92396
|
-
|
|
92552
|
+
SIGNING_KEY_INVALID,
|
|
92397
92553
|
"credentials_missing",
|
|
92398
92554
|
"device_signing_key_invalid"
|
|
92399
92555
|
);
|
|
@@ -92412,7 +92568,7 @@ var init_hyperliquid_signer_binding = __esm({
|
|
|
92412
92568
|
const cached2 = validatedSignerBindings.get(cacheKey);
|
|
92413
92569
|
if (cached2 && cached2.generation === generation) return cached2.binding;
|
|
92414
92570
|
}
|
|
92415
|
-
const
|
|
92571
|
+
const remember2 = (binding) => {
|
|
92416
92572
|
if (signerBindingCache && generation !== null) validatedSignerBindings.set(cacheKey, { generation, binding });
|
|
92417
92573
|
return binding;
|
|
92418
92574
|
};
|
|
@@ -92433,7 +92589,7 @@ var init_hyperliquid_signer_binding = __esm({
|
|
|
92433
92589
|
}
|
|
92434
92590
|
const signerRole = String(roleResponse.role || "").trim().toLowerCase();
|
|
92435
92591
|
if (signerRole === "user" && signerAddress === walletAddress) {
|
|
92436
|
-
return
|
|
92592
|
+
return remember2({
|
|
92437
92593
|
signerAddress,
|
|
92438
92594
|
walletAddress,
|
|
92439
92595
|
signerRole: "user"
|
|
@@ -92445,7 +92601,7 @@ var init_hyperliquid_signer_binding = __esm({
|
|
|
92445
92601
|
["user"]
|
|
92446
92602
|
);
|
|
92447
92603
|
if (masterWallet === walletAddress) {
|
|
92448
|
-
return
|
|
92604
|
+
return remember2({
|
|
92449
92605
|
signerAddress,
|
|
92450
92606
|
walletAddress,
|
|
92451
92607
|
signerRole: "agent"
|
|
@@ -92453,7 +92609,7 @@ var init_hyperliquid_signer_binding = __esm({
|
|
|
92453
92609
|
}
|
|
92454
92610
|
}
|
|
92455
92611
|
throw new DeviceSigningKeyError(
|
|
92456
|
-
|
|
92612
|
+
SIGNING_KEY_NOT_APPROVED,
|
|
92457
92613
|
"wallet_not_authorized",
|
|
92458
92614
|
"device_signing_key_unauthorized"
|
|
92459
92615
|
);
|
|
@@ -108732,6 +108888,183 @@ var init_profile_model_cascade = __esm({
|
|
|
108732
108888
|
}
|
|
108733
108889
|
});
|
|
108734
108890
|
|
|
108891
|
+
// lib/runtime/prompt-variable-validation-contract.ts
|
|
108892
|
+
var ESCAPED_OPEN_BRACE, ESCAPED_CLOSE_BRACE, PROMPT_PLACEHOLDER_PATTERN, ESCAPED_BRACE_PAIR_PATTERN, readPromptTemplate, restoreEscapedBraces, countAtMost, countBelow, locatePlaceholders, isPromptVariableName, renderPromptTemplate, promptTemplatePlaceholderSpans, promptTemplatePlaceholders, promptTemplateVariables, NEWS_PROMPT_VARIABLES, REFERENCE_CANDLES_PROMPT_VARIABLE, ALLOWED_PROMPT_VARIABLES, OPTIONAL_BLANK_PROMPT_VARIABLES, coercePromptVariableValue, isMissingPromptVariableValue, validatePromptVariables;
|
|
108893
|
+
var init_prompt_variable_validation_contract = __esm({
|
|
108894
|
+
"lib/runtime/prompt-variable-validation-contract.ts"() {
|
|
108895
|
+
"use strict";
|
|
108896
|
+
init_define_VTX_EXO_POLICY();
|
|
108897
|
+
init_define_VTX_GROK_POLICY();
|
|
108898
|
+
init_define_VTX_PI_MODEL_POLICY();
|
|
108899
|
+
ESCAPED_OPEN_BRACE = "__VTX_PROMPT_OPEN_BRACE__";
|
|
108900
|
+
ESCAPED_CLOSE_BRACE = "__VTX_PROMPT_CLOSE_BRACE__";
|
|
108901
|
+
PROMPT_PLACEHOLDER_PATTERN = /\{([a-zA-Z0-9_]+)\}/g;
|
|
108902
|
+
ESCAPED_BRACE_PAIR_PATTERN = /\{\{|\}\}/g;
|
|
108903
|
+
readPromptTemplate = (template) => {
|
|
108904
|
+
const prepared = template.replaceAll("{{", ESCAPED_OPEN_BRACE).replaceAll("}}", ESCAPED_CLOSE_BRACE);
|
|
108905
|
+
return {
|
|
108906
|
+
prepared,
|
|
108907
|
+
placeholders: Array.from(prepared.matchAll(PROMPT_PLACEHOLDER_PATTERN), (match) => ({
|
|
108908
|
+
name: match[1],
|
|
108909
|
+
start: match.index,
|
|
108910
|
+
end: match.index + match[0].length
|
|
108911
|
+
}))
|
|
108912
|
+
};
|
|
108913
|
+
};
|
|
108914
|
+
restoreEscapedBraces = (text) => text.replaceAll(ESCAPED_OPEN_BRACE, "{").replaceAll(ESCAPED_CLOSE_BRACE, "}");
|
|
108915
|
+
countAtMost = (ascending, value) => {
|
|
108916
|
+
let low = 0;
|
|
108917
|
+
let high = ascending.length;
|
|
108918
|
+
while (low < high) {
|
|
108919
|
+
const middle = low + high >>> 1;
|
|
108920
|
+
if (ascending[middle] <= value) low = middle + 1;
|
|
108921
|
+
else high = middle;
|
|
108922
|
+
}
|
|
108923
|
+
return low;
|
|
108924
|
+
};
|
|
108925
|
+
countBelow = (ascending, value) => {
|
|
108926
|
+
let low = 0;
|
|
108927
|
+
let high = ascending.length;
|
|
108928
|
+
while (low < high) {
|
|
108929
|
+
const middle = low + high >>> 1;
|
|
108930
|
+
if (ascending[middle] < value) low = middle + 1;
|
|
108931
|
+
else high = middle;
|
|
108932
|
+
}
|
|
108933
|
+
return low;
|
|
108934
|
+
};
|
|
108935
|
+
locatePlaceholders = (template) => {
|
|
108936
|
+
const { prepared, placeholders } = readPromptTemplate(template);
|
|
108937
|
+
const markerStarts = [];
|
|
108938
|
+
const markerEnds = [];
|
|
108939
|
+
const addedLengths = [];
|
|
108940
|
+
let added = 0;
|
|
108941
|
+
for (const pair of template.matchAll(ESCAPED_BRACE_PAIR_PATTERN)) {
|
|
108942
|
+
const marker = pair[0] === "{{" ? ESCAPED_OPEN_BRACE : ESCAPED_CLOSE_BRACE;
|
|
108943
|
+
markerStarts.push(pair.index + added);
|
|
108944
|
+
added += marker.length - pair[0].length;
|
|
108945
|
+
markerEnds.push(pair.index + pair[0].length + added);
|
|
108946
|
+
addedLengths.push(added);
|
|
108947
|
+
}
|
|
108948
|
+
return {
|
|
108949
|
+
prepared,
|
|
108950
|
+
located: placeholders.map((placeholder) => {
|
|
108951
|
+
const markersBefore = countAtMost(markerEnds, placeholder.start);
|
|
108952
|
+
if (countBelow(markerStarts, placeholder.end) !== markersBefore) {
|
|
108953
|
+
return { placeholder, sourceStart: null };
|
|
108954
|
+
}
|
|
108955
|
+
const offset = markersBefore > 0 ? addedLengths[markersBefore - 1] : 0;
|
|
108956
|
+
return { placeholder, sourceStart: placeholder.start - offset };
|
|
108957
|
+
})
|
|
108958
|
+
};
|
|
108959
|
+
};
|
|
108960
|
+
isPromptVariableName = (name) => !/^[0-9]/.test(name);
|
|
108961
|
+
renderPromptTemplate = (template, contextVars) => {
|
|
108962
|
+
if (typeof template !== "string" || !template) {
|
|
108963
|
+
return "";
|
|
108964
|
+
}
|
|
108965
|
+
const safeContext = contextVars && typeof contextVars === "object" ? contextVars : {};
|
|
108966
|
+
const { prepared, placeholders } = readPromptTemplate(template);
|
|
108967
|
+
const rendered = [];
|
|
108968
|
+
let cursor = 0;
|
|
108969
|
+
for (const placeholder of placeholders) {
|
|
108970
|
+
rendered.push(prepared.slice(cursor, placeholder.start));
|
|
108971
|
+
const value = Object.prototype.hasOwnProperty.call(safeContext, placeholder.name) ? safeContext[placeholder.name] : void 0;
|
|
108972
|
+
rendered.push(value === null || value === void 0 ? "" : String(value));
|
|
108973
|
+
cursor = placeholder.end;
|
|
108974
|
+
}
|
|
108975
|
+
rendered.push(prepared.slice(cursor));
|
|
108976
|
+
return restoreEscapedBraces(rendered.join(""));
|
|
108977
|
+
};
|
|
108978
|
+
promptTemplatePlaceholderSpans = (template) => {
|
|
108979
|
+
if (typeof template !== "string" || !template) {
|
|
108980
|
+
return [];
|
|
108981
|
+
}
|
|
108982
|
+
const spans = [];
|
|
108983
|
+
for (const { placeholder, sourceStart } of locatePlaceholders(template).located) {
|
|
108984
|
+
if (sourceStart !== null) {
|
|
108985
|
+
spans.push({
|
|
108986
|
+
name: placeholder.name,
|
|
108987
|
+
start: sourceStart,
|
|
108988
|
+
end: sourceStart + (placeholder.end - placeholder.start)
|
|
108989
|
+
});
|
|
108990
|
+
}
|
|
108991
|
+
}
|
|
108992
|
+
return spans;
|
|
108993
|
+
};
|
|
108994
|
+
promptTemplatePlaceholders = (template) => promptTemplatePlaceholderSpans(template).map((placeholder) => placeholder.name);
|
|
108995
|
+
promptTemplateVariables = (template) => promptTemplatePlaceholders(template).filter(isPromptVariableName);
|
|
108996
|
+
NEWS_PROMPT_VARIABLES = ["news_benzinga", "news_telegram"];
|
|
108997
|
+
REFERENCE_CANDLES_PROMPT_VARIABLE = "reference_candles";
|
|
108998
|
+
ALLOWED_PROMPT_VARIABLES = /* @__PURE__ */ new Set([
|
|
108999
|
+
"current_time",
|
|
109000
|
+
"candles",
|
|
109001
|
+
REFERENCE_CANDLES_PROMPT_VARIABLE,
|
|
109002
|
+
"market_stats",
|
|
109003
|
+
"account_status",
|
|
109004
|
+
"calendar",
|
|
109005
|
+
"behavior_state",
|
|
109006
|
+
"positions",
|
|
109007
|
+
"performance",
|
|
109008
|
+
"market_regime",
|
|
109009
|
+
...NEWS_PROMPT_VARIABLES,
|
|
109010
|
+
"size",
|
|
109011
|
+
"leverage",
|
|
109012
|
+
"interval"
|
|
109013
|
+
]);
|
|
109014
|
+
OPTIONAL_BLANK_PROMPT_VARIABLES = /* @__PURE__ */ new Set([
|
|
109015
|
+
"calendar",
|
|
109016
|
+
REFERENCE_CANDLES_PROMPT_VARIABLE,
|
|
109017
|
+
...NEWS_PROMPT_VARIABLES
|
|
109018
|
+
]);
|
|
109019
|
+
coercePromptVariableValue = (value) => {
|
|
109020
|
+
if (value === null || value === void 0) {
|
|
109021
|
+
return "";
|
|
109022
|
+
}
|
|
109023
|
+
if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
|
|
109024
|
+
return value;
|
|
109025
|
+
}
|
|
109026
|
+
if (Array.isArray(value) || typeof value === "object" && value !== null) {
|
|
109027
|
+
return JSON.stringify(value);
|
|
109028
|
+
}
|
|
109029
|
+
return String(value);
|
|
109030
|
+
};
|
|
109031
|
+
isMissingPromptVariableValue = (value) => {
|
|
109032
|
+
if (value === null || value === void 0) {
|
|
109033
|
+
return true;
|
|
109034
|
+
}
|
|
109035
|
+
if (typeof value === "string") {
|
|
109036
|
+
return value.trim().length === 0;
|
|
109037
|
+
}
|
|
109038
|
+
return false;
|
|
109039
|
+
};
|
|
109040
|
+
validatePromptVariables = ({
|
|
109041
|
+
template,
|
|
109042
|
+
contextVars
|
|
109043
|
+
}) => {
|
|
109044
|
+
const normalized = {};
|
|
109045
|
+
for (const [key, value] of Object.entries(contextVars)) {
|
|
109046
|
+
if (!ALLOWED_PROMPT_VARIABLES.has(key)) {
|
|
109047
|
+
throw new Error(`Unknown prompt variable key: ${key}`);
|
|
109048
|
+
}
|
|
109049
|
+
normalized[key] = coercePromptVariableValue(value);
|
|
109050
|
+
}
|
|
109051
|
+
const required2 = new Set(promptTemplateVariables(String(template ?? "")));
|
|
109052
|
+
for (const key of Array.from(required2).sort()) {
|
|
109053
|
+
if (!ALLOWED_PROMPT_VARIABLES.has(key)) {
|
|
109054
|
+
throw new Error(`Unknown prompt variable placeholder in template: ${key}`);
|
|
109055
|
+
}
|
|
109056
|
+
if (!Object.prototype.hasOwnProperty.call(normalized, key)) {
|
|
109057
|
+
throw new Error(`Missing required prompt variable: ${key}`);
|
|
109058
|
+
}
|
|
109059
|
+
if (!OPTIONAL_BLANK_PROMPT_VARIABLES.has(key) && isMissingPromptVariableValue(normalized[key])) {
|
|
109060
|
+
throw new Error(`Missing required prompt variable value: ${key}`);
|
|
109061
|
+
}
|
|
109062
|
+
}
|
|
109063
|
+
return normalized;
|
|
109064
|
+
};
|
|
109065
|
+
}
|
|
109066
|
+
});
|
|
109067
|
+
|
|
108735
109068
|
// lib/ai-settings-helpers.ts
|
|
108736
109069
|
var sortAiSettings;
|
|
108737
109070
|
var init_ai_settings_helpers = __esm({
|
|
@@ -108741,6 +109074,7 @@ var init_ai_settings_helpers = __esm({
|
|
|
108741
109074
|
init_define_VTX_GROK_POLICY();
|
|
108742
109075
|
init_define_VTX_PI_MODEL_POLICY();
|
|
108743
109076
|
init_perp_dex_scope();
|
|
109077
|
+
init_prompt_variable_validation_contract();
|
|
108744
109078
|
sortAiSettings = (settings) => {
|
|
108745
109079
|
if (!settings || typeof settings !== "object") return settings;
|
|
108746
109080
|
const normalized = { ...settings };
|
|
@@ -108883,6 +109217,7 @@ var init_ai_settings_helpers = __esm({
|
|
|
108883
109217
|
"trading_timeframes",
|
|
108884
109218
|
"max_trading_timeframes",
|
|
108885
109219
|
"ai_indicators",
|
|
109220
|
+
"reference_candles_settings",
|
|
108886
109221
|
// 3) Trading limits
|
|
108887
109222
|
"trading_interval",
|
|
108888
109223
|
"leverage",
|
|
@@ -109058,7 +109393,7 @@ var init_candle_timeframes = __esm({
|
|
|
109058
109393
|
});
|
|
109059
109394
|
|
|
109060
109395
|
// lib/runtime/candle-prompt-contract.ts
|
|
109061
|
-
var projectCandlePromptComponent;
|
|
109396
|
+
var AI_INDICATOR_ROW_COLUMNS, AI_INDICATOR_KEYS, EMA_INDICATOR_KEYS, CANDLE_BASE_ROW_COLUMNS, candlesRowColumns, projectCandlePromptComponent, readCandleNumber, closedCandleCount, calculateRelativeVolumeSeries;
|
|
109062
109397
|
var init_candle_prompt_contract = __esm({
|
|
109063
109398
|
"lib/runtime/candle-prompt-contract.ts"() {
|
|
109064
109399
|
"use strict";
|
|
@@ -109066,6 +109401,31 @@ var init_candle_prompt_contract = __esm({
|
|
|
109066
109401
|
init_define_VTX_GROK_POLICY();
|
|
109067
109402
|
init_define_VTX_PI_MODEL_POLICY();
|
|
109068
109403
|
init_candle_timeframes();
|
|
109404
|
+
init_constants();
|
|
109405
|
+
AI_INDICATOR_ROW_COLUMNS = {
|
|
109406
|
+
rsi: ["rsi"],
|
|
109407
|
+
macd: ["macd_line", "macd_signal", "macd_hist"],
|
|
109408
|
+
bollinger: ["bb_upper", "bb_lower"],
|
|
109409
|
+
atr: ["atr"],
|
|
109410
|
+
ema_9: ["ema_9"],
|
|
109411
|
+
ema_21: ["ema_21"],
|
|
109412
|
+
ema_50: ["ema_50"],
|
|
109413
|
+
ema_200: ["ema_200"],
|
|
109414
|
+
rv: ["rv"]
|
|
109415
|
+
};
|
|
109416
|
+
AI_INDICATOR_KEYS = Object.keys(AI_INDICATOR_ROW_COLUMNS);
|
|
109417
|
+
EMA_INDICATOR_KEYS = Object.keys(PROMPT_EMA_PERIODS);
|
|
109418
|
+
CANDLE_BASE_ROW_COLUMNS = ["ts", "o", "h", "l", "c", "v"];
|
|
109419
|
+
candlesRowColumns = (activeIndicators) => {
|
|
109420
|
+
const flags = activeIndicators ?? {};
|
|
109421
|
+
const columns = [...CANDLE_BASE_ROW_COLUMNS];
|
|
109422
|
+
for (const key of AI_INDICATOR_KEYS) {
|
|
109423
|
+
if (flags[key]) {
|
|
109424
|
+
columns.push(...AI_INDICATOR_ROW_COLUMNS[key]);
|
|
109425
|
+
}
|
|
109426
|
+
}
|
|
109427
|
+
return columns;
|
|
109428
|
+
};
|
|
109069
109429
|
projectCandlePromptComponent = (input) => {
|
|
109070
109430
|
const intervalSeconds = candleTimeframeSeconds(input.timeframe);
|
|
109071
109431
|
if (intervalSeconds === void 0) {
|
|
@@ -109114,6 +109474,51 @@ var init_candle_prompt_contract = __esm({
|
|
|
109114
109474
|
projected.l = rows[rows.length - 1];
|
|
109115
109475
|
return projected;
|
|
109116
109476
|
};
|
|
109477
|
+
readCandleNumber = (value) => {
|
|
109478
|
+
if (typeof value === "number") {
|
|
109479
|
+
return value;
|
|
109480
|
+
}
|
|
109481
|
+
if (typeof value === "string" && value.trim()) {
|
|
109482
|
+
const numeric2 = Number(value);
|
|
109483
|
+
return Number.isNaN(numeric2) ? void 0 : numeric2;
|
|
109484
|
+
}
|
|
109485
|
+
return void 0;
|
|
109486
|
+
};
|
|
109487
|
+
closedCandleCount = (input) => {
|
|
109488
|
+
const intervalSeconds = candleTimeframeSeconds(input.timeframe);
|
|
109489
|
+
const lastOpenTimestamp = input.openTimestamps.at(-1);
|
|
109490
|
+
if (intervalSeconds === void 0 || lastOpenTimestamp === void 0) {
|
|
109491
|
+
return 0;
|
|
109492
|
+
}
|
|
109493
|
+
const lastIsClosed = lastOpenTimestamp + intervalSeconds <= input.asOfTimestamp;
|
|
109494
|
+
return lastIsClosed ? input.openTimestamps.length : input.openTimestamps.length - 1;
|
|
109495
|
+
};
|
|
109496
|
+
calculateRelativeVolumeSeries = (input) => {
|
|
109497
|
+
const series = Array(input.candles.length).fill(null);
|
|
109498
|
+
const baseline = input.baselineDollarVolume;
|
|
109499
|
+
const recentCandles = input.recentCandles;
|
|
109500
|
+
if (typeof baseline !== "number" || !(baseline > 0) || !Number.isInteger(recentCandles) || recentCandles <= 0) {
|
|
109501
|
+
return series;
|
|
109502
|
+
}
|
|
109503
|
+
const closed = Math.min(Math.max(Math.trunc(Number(input.closedCount)) || 0, 0), input.candles.length);
|
|
109504
|
+
if (closed < recentCandles) {
|
|
109505
|
+
return series;
|
|
109506
|
+
}
|
|
109507
|
+
const dollarVolumes = [];
|
|
109508
|
+
for (const candle of input.candles.slice(0, closed)) {
|
|
109509
|
+
const close = readCandleNumber(candle?.close);
|
|
109510
|
+
const volume = readCandleNumber(candle?.volume);
|
|
109511
|
+
if (close === void 0 || volume === void 0) {
|
|
109512
|
+
return series;
|
|
109513
|
+
}
|
|
109514
|
+
dollarVolumes.push(close * volume);
|
|
109515
|
+
}
|
|
109516
|
+
for (let index = recentCandles - 1; index < closed; index += 1) {
|
|
109517
|
+
const windowDollarVolume = dollarVolumes.slice(index - recentCandles + 1, index + 1).reduce((sum, value) => sum + value, 0);
|
|
109518
|
+
series[index] = Number.isFinite(windowDollarVolume) && windowDollarVolume >= 0 ? windowDollarVolume / baseline : null;
|
|
109519
|
+
}
|
|
109520
|
+
return series;
|
|
109521
|
+
};
|
|
109117
109522
|
}
|
|
109118
109523
|
});
|
|
109119
109524
|
|
|
@@ -109899,6 +110304,7 @@ async function requestServerHostPromptRescue(profileId, payload, options) {
|
|
|
109899
110304
|
options
|
|
109900
110305
|
);
|
|
109901
110306
|
}
|
|
110307
|
+
var SERVER_PROMPT_RESCUE_NODE_OUTAGE_REASON;
|
|
109902
110308
|
var init_server_host_prompt_rescue = __esm({
|
|
109903
110309
|
"lib/api/server-host-prompt-rescue.ts"() {
|
|
109904
110310
|
"use strict";
|
|
@@ -109906,6 +110312,7 @@ var init_server_host_prompt_rescue = __esm({
|
|
|
109906
110312
|
init_define_VTX_GROK_POLICY();
|
|
109907
110313
|
init_define_VTX_PI_MODEL_POLICY();
|
|
109908
110314
|
init_api2();
|
|
110315
|
+
SERVER_PROMPT_RESCUE_NODE_OUTAGE_REASON = "private_node_unavailable";
|
|
109909
110316
|
}
|
|
109910
110317
|
});
|
|
109911
110318
|
|
|
@@ -113256,89 +113663,8 @@ var init_provider_client = __esm({
|
|
|
113256
113663
|
}
|
|
113257
113664
|
});
|
|
113258
113665
|
|
|
113259
|
-
// lib/runtime/prompt-variable-validation-contract.ts
|
|
113260
|
-
var PROMPT_VARIABLE_PATTERN, NEWS_PROMPT_VARIABLES, ALLOWED_PROMPT_VARIABLES, OPTIONAL_BLANK_PROMPT_VARIABLES, coercePromptVariableValue, isMissingPromptVariableValue, validatePromptVariables;
|
|
113261
|
-
var init_prompt_variable_validation_contract = __esm({
|
|
113262
|
-
"lib/runtime/prompt-variable-validation-contract.ts"() {
|
|
113263
|
-
"use strict";
|
|
113264
|
-
init_define_VTX_EXO_POLICY();
|
|
113265
|
-
init_define_VTX_GROK_POLICY();
|
|
113266
|
-
init_define_VTX_PI_MODEL_POLICY();
|
|
113267
|
-
PROMPT_VARIABLE_PATTERN = /(?<!\{)\{([a-zA-Z_][a-zA-Z0-9_]*)\}(?!\})/g;
|
|
113268
|
-
NEWS_PROMPT_VARIABLES = ["news_benzinga", "news_telegram"];
|
|
113269
|
-
ALLOWED_PROMPT_VARIABLES = /* @__PURE__ */ new Set([
|
|
113270
|
-
"current_time",
|
|
113271
|
-
"candles",
|
|
113272
|
-
"market_stats",
|
|
113273
|
-
"account_status",
|
|
113274
|
-
"calendar",
|
|
113275
|
-
"behavior_state",
|
|
113276
|
-
"positions",
|
|
113277
|
-
"performance",
|
|
113278
|
-
"market_regime",
|
|
113279
|
-
...NEWS_PROMPT_VARIABLES,
|
|
113280
|
-
"size",
|
|
113281
|
-
"leverage",
|
|
113282
|
-
"interval"
|
|
113283
|
-
]);
|
|
113284
|
-
OPTIONAL_BLANK_PROMPT_VARIABLES = /* @__PURE__ */ new Set([
|
|
113285
|
-
"calendar",
|
|
113286
|
-
...NEWS_PROMPT_VARIABLES
|
|
113287
|
-
]);
|
|
113288
|
-
coercePromptVariableValue = (value) => {
|
|
113289
|
-
if (value === null || value === void 0) {
|
|
113290
|
-
return "";
|
|
113291
|
-
}
|
|
113292
|
-
if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
|
|
113293
|
-
return value;
|
|
113294
|
-
}
|
|
113295
|
-
if (Array.isArray(value) || typeof value === "object" && value !== null) {
|
|
113296
|
-
return JSON.stringify(value);
|
|
113297
|
-
}
|
|
113298
|
-
return String(value);
|
|
113299
|
-
};
|
|
113300
|
-
isMissingPromptVariableValue = (value) => {
|
|
113301
|
-
if (value === null || value === void 0) {
|
|
113302
|
-
return true;
|
|
113303
|
-
}
|
|
113304
|
-
if (typeof value === "string") {
|
|
113305
|
-
return value.trim().length === 0;
|
|
113306
|
-
}
|
|
113307
|
-
return false;
|
|
113308
|
-
};
|
|
113309
|
-
validatePromptVariables = ({
|
|
113310
|
-
template,
|
|
113311
|
-
contextVars
|
|
113312
|
-
}) => {
|
|
113313
|
-
const normalized = {};
|
|
113314
|
-
for (const [key, value] of Object.entries(contextVars)) {
|
|
113315
|
-
if (!ALLOWED_PROMPT_VARIABLES.has(key)) {
|
|
113316
|
-
throw new Error(`Unknown prompt variable key: ${key}`);
|
|
113317
|
-
}
|
|
113318
|
-
normalized[key] = coercePromptVariableValue(value);
|
|
113319
|
-
}
|
|
113320
|
-
const required2 = /* @__PURE__ */ new Set();
|
|
113321
|
-
for (const match of template.matchAll(PROMPT_VARIABLE_PATTERN)) {
|
|
113322
|
-
required2.add(match[1]);
|
|
113323
|
-
}
|
|
113324
|
-
for (const key of required2) {
|
|
113325
|
-
if (!ALLOWED_PROMPT_VARIABLES.has(key)) {
|
|
113326
|
-
throw new Error(`Unknown prompt variable placeholder in template: ${key}`);
|
|
113327
|
-
}
|
|
113328
|
-
if (!Object.prototype.hasOwnProperty.call(normalized, key)) {
|
|
113329
|
-
throw new Error(`Missing required prompt variable: ${key}`);
|
|
113330
|
-
}
|
|
113331
|
-
if (!OPTIONAL_BLANK_PROMPT_VARIABLES.has(key) && isMissingPromptVariableValue(normalized[key])) {
|
|
113332
|
-
throw new Error(`Missing required prompt variable value: ${key}`);
|
|
113333
|
-
}
|
|
113334
|
-
}
|
|
113335
|
-
return normalized;
|
|
113336
|
-
};
|
|
113337
|
-
}
|
|
113338
|
-
});
|
|
113339
|
-
|
|
113340
113666
|
// lib/runtime/prompt-contract.ts
|
|
113341
|
-
var PROMPT_PLACEHOLDER_MAP, DATA_FORMAT_TAG_ALIASES, buildDecisionInstructionVariables,
|
|
113667
|
+
var PROMPT_PLACEHOLDER_MAP, DATA_FORMAT_TAG_ALIASES, buildDecisionInstructionVariables, renderCandleIndicatorDefinitions, NEWS_COLUMN_DESCRIPTIONS, isNewsPromptTag, newsTagBlock, newsRowColumns, renderNewsLegendLine, behaviorStateHasObjectField, candleBlockPayload, candlesHaveLiveField, templateReferencesTag, templateTagOrder, renderDataFormatLegend, replaceEmbeddedDataFormatLegend, SIZE_AMOUNT_USDC_LABEL_PATTERN, labelSizeAmountInUsd, canonicalizePromptPlaceholders, normalizePromptWhitespace, formatInstructionTemplate, constructPromptSystemTemplate;
|
|
113342
113668
|
var init_prompt_contract = __esm({
|
|
113343
113669
|
"lib/runtime/prompt-contract.ts"() {
|
|
113344
113670
|
"use strict";
|
|
@@ -113346,6 +113672,8 @@ var init_prompt_contract = __esm({
|
|
|
113346
113672
|
init_define_VTX_GROK_POLICY();
|
|
113347
113673
|
init_define_VTX_PI_MODEL_POLICY();
|
|
113348
113674
|
init_prompt_variable_validation_contract();
|
|
113675
|
+
init_prompt_variable_validation_contract();
|
|
113676
|
+
init_candle_prompt_contract();
|
|
113349
113677
|
init_constants();
|
|
113350
113678
|
PROMPT_PLACEHOLDER_MAP = {};
|
|
113351
113679
|
DATA_FORMAT_TAG_ALIASES = {};
|
|
@@ -113370,38 +113698,22 @@ var init_prompt_contract = __esm({
|
|
|
113370
113698
|
max_trades: Math.trunc(maxTrades)
|
|
113371
113699
|
};
|
|
113372
113700
|
};
|
|
113373
|
-
candlesRowColumns = (activeIndicators) => {
|
|
113374
|
-
const flags = activeIndicators ?? {};
|
|
113375
|
-
const cols = ["ts", "o", "h", "l", "c", "v"];
|
|
113376
|
-
if (flags.rsi) cols.push("rsi");
|
|
113377
|
-
if (flags.macd) cols.push("macd_line", "macd_signal", "macd_hist");
|
|
113378
|
-
if (flags.bollinger) cols.push("bb_upper", "bb_lower");
|
|
113379
|
-
if (flags.atr) cols.push("atr");
|
|
113380
|
-
if (flags.ema_9) cols.push("ema_9");
|
|
113381
|
-
if (flags.ema_21) cols.push("ema_21");
|
|
113382
|
-
if (flags.ema_50) cols.push("ema_50");
|
|
113383
|
-
if (flags.ema_200) cols.push("ema_200");
|
|
113384
|
-
return cols;
|
|
113385
|
-
};
|
|
113386
113701
|
renderCandleIndicatorDefinitions = (activeIndicators, indicatorSchemas) => {
|
|
113387
113702
|
const flags = activeIndicators ?? {};
|
|
113388
113703
|
const schemas = indicatorSchemas ?? {};
|
|
113389
|
-
const
|
|
113390
|
-
for (const key of
|
|
113704
|
+
const schemaKeys = [];
|
|
113705
|
+
for (const key of AI_INDICATOR_KEYS) {
|
|
113391
113706
|
if (!flags[key]) continue;
|
|
113392
|
-
const
|
|
113393
|
-
if (!
|
|
113394
|
-
throw new Error(`Missing prompts config key: instructions.data_format.candle_indicators.${key}`);
|
|
113395
|
-
}
|
|
113396
|
-
definitions.push(definition);
|
|
113707
|
+
const schemaKey = EMA_INDICATOR_KEYS.includes(key) ? "ema" : key;
|
|
113708
|
+
if (!schemaKeys.includes(schemaKey)) schemaKeys.push(schemaKey);
|
|
113397
113709
|
}
|
|
113398
|
-
|
|
113399
|
-
const definition = String(schemas
|
|
113710
|
+
const definitions = schemaKeys.map((schemaKey) => {
|
|
113711
|
+
const definition = String(schemas[schemaKey] ?? "").trim();
|
|
113400
113712
|
if (!definition) {
|
|
113401
|
-
throw new Error(
|
|
113713
|
+
throw new Error(`Missing prompts config key: instructions.data_format.candle_indicators.${schemaKey}`);
|
|
113402
113714
|
}
|
|
113403
|
-
|
|
113404
|
-
}
|
|
113715
|
+
return definition;
|
|
113716
|
+
});
|
|
113405
113717
|
return definitions.length > 0 ? `; indicators: ${definitions.join("; ")}` : "";
|
|
113406
113718
|
};
|
|
113407
113719
|
NEWS_COLUMN_DESCRIPTIONS = {
|
|
@@ -113448,41 +113760,47 @@ var init_prompt_contract = __esm({
|
|
|
113448
113760
|
return false;
|
|
113449
113761
|
}
|
|
113450
113762
|
};
|
|
113451
|
-
|
|
113452
|
-
const rawSummary = String(
|
|
113453
|
-
const match = rawSummary.match(
|
|
113763
|
+
candleBlockPayload = (summary, tag, allowBareJson) => {
|
|
113764
|
+
const rawSummary = String(summary ?? "").trim();
|
|
113765
|
+
const match = rawSummary.match(new RegExp(`<${tag}>\\s*([\\s\\S]*?)\\s*<\\/${tag}>`, "i"));
|
|
113766
|
+
if (!match && !allowBareJson) return null;
|
|
113454
113767
|
const rawPayload = match?.[1] ?? rawSummary;
|
|
113455
113768
|
try {
|
|
113456
113769
|
const payload = JSON.parse(rawPayload);
|
|
113457
|
-
if (!payload || typeof payload !== "object" || Array.isArray(payload)) return
|
|
113458
|
-
return
|
|
113459
|
-
if (!symbolPayload || typeof symbolPayload !== "object" || Array.isArray(symbolPayload)) {
|
|
113460
|
-
return false;
|
|
113461
|
-
}
|
|
113462
|
-
const data4 = symbolPayload.data;
|
|
113463
|
-
if (!data4 || typeof data4 !== "object" || Array.isArray(data4)) return false;
|
|
113464
|
-
return Object.values(data4).some(
|
|
113465
|
-
(component) => Boolean(
|
|
113466
|
-
component && typeof component === "object" && !Array.isArray(component) && Object.prototype.hasOwnProperty.call(component, "l")
|
|
113467
|
-
)
|
|
113468
|
-
);
|
|
113469
|
-
});
|
|
113770
|
+
if (!payload || typeof payload !== "object" || Array.isArray(payload)) return null;
|
|
113771
|
+
return payload;
|
|
113470
113772
|
} catch {
|
|
113471
|
-
return
|
|
113773
|
+
return null;
|
|
113472
113774
|
}
|
|
113473
113775
|
};
|
|
113776
|
+
candlesHaveLiveField = (candlesSummary, tag = "candles", allowBareJson = true) => {
|
|
113777
|
+
const payload = candleBlockPayload(candlesSummary, tag, allowBareJson);
|
|
113778
|
+
if (!payload) return false;
|
|
113779
|
+
return Object.values(payload).some((symbolPayload) => {
|
|
113780
|
+
if (!symbolPayload || typeof symbolPayload !== "object" || Array.isArray(symbolPayload)) {
|
|
113781
|
+
return false;
|
|
113782
|
+
}
|
|
113783
|
+
const data4 = symbolPayload.data;
|
|
113784
|
+
if (!data4 || typeof data4 !== "object" || Array.isArray(data4)) return false;
|
|
113785
|
+
return Object.values(data4).some(
|
|
113786
|
+
(component) => Boolean(
|
|
113787
|
+
component && typeof component === "object" && !Array.isArray(component) && Object.prototype.hasOwnProperty.call(component, "l")
|
|
113788
|
+
)
|
|
113789
|
+
);
|
|
113790
|
+
});
|
|
113791
|
+
};
|
|
113474
113792
|
templateReferencesTag = (template, tag) => {
|
|
113475
113793
|
const canonicalTag = DATA_FORMAT_TAG_ALIASES[tag] ?? tag;
|
|
113476
113794
|
const aliases = /* @__PURE__ */ new Set([tag, canonicalTag]);
|
|
113477
113795
|
for (const [alias, canonical] of Object.entries(DATA_FORMAT_TAG_ALIASES)) {
|
|
113478
113796
|
if (canonical === canonicalTag) aliases.add(alias);
|
|
113479
113797
|
}
|
|
113480
|
-
return
|
|
113798
|
+
return promptTemplatePlaceholders(template).some((name) => aliases.has(name));
|
|
113481
113799
|
};
|
|
113482
113800
|
templateTagOrder = (template) => {
|
|
113483
113801
|
const ordered = [];
|
|
113484
|
-
for (const
|
|
113485
|
-
const tag = DATA_FORMAT_TAG_ALIASES[
|
|
113802
|
+
for (const name of promptTemplatePlaceholders(template)) {
|
|
113803
|
+
const tag = DATA_FORMAT_TAG_ALIASES[name] ?? name;
|
|
113486
113804
|
if (!ordered.includes(tag)) ordered.push(tag);
|
|
113487
113805
|
}
|
|
113488
113806
|
return ordered;
|
|
@@ -113515,6 +113833,29 @@ var init_prompt_contract = __esm({
|
|
|
113515
113833
|
legend = legend.replaceAll(candleLiveFieldToken, liveField);
|
|
113516
113834
|
legend = legend.replaceAll(candleLiveGuidanceToken, liveGuidance);
|
|
113517
113835
|
}
|
|
113836
|
+
const referenceLiveFieldToken = "{reference_candle_live_field}";
|
|
113837
|
+
const referenceLiveGuidanceToken = "{reference_candle_live_guidance}";
|
|
113838
|
+
const referenceBlockPresent = candleBlockPayload(
|
|
113839
|
+
options.referenceCandlesSummary,
|
|
113840
|
+
REFERENCE_CANDLES_PROMPT_VARIABLE,
|
|
113841
|
+
false
|
|
113842
|
+
) !== null;
|
|
113843
|
+
if (legend.includes(referenceLiveFieldToken) || legend.includes(referenceLiveGuidanceToken)) {
|
|
113844
|
+
let referenceLiveField = "";
|
|
113845
|
+
let referenceLiveGuidance = "";
|
|
113846
|
+
if (candlesHaveLiveField(options.referenceCandlesSummary, REFERENCE_CANDLES_PROMPT_VARIABLE, false)) {
|
|
113847
|
+
referenceLiveField = String(options.candleLiveFieldSchema ?? "").trim();
|
|
113848
|
+
referenceLiveGuidance = String(options.candleLiveGuidance ?? "").trim();
|
|
113849
|
+
if (!referenceLiveField) {
|
|
113850
|
+
throw new Error("Missing prompts config key: instructions.data_format.candle_live_field");
|
|
113851
|
+
}
|
|
113852
|
+
if (!referenceLiveGuidance) {
|
|
113853
|
+
throw new Error("Missing prompts config key: instructions.data_format.candle_live_guidance");
|
|
113854
|
+
}
|
|
113855
|
+
}
|
|
113856
|
+
legend = legend.replaceAll(referenceLiveFieldToken, referenceLiveField);
|
|
113857
|
+
legend = legend.replaceAll(referenceLiveGuidanceToken, referenceLiveGuidance);
|
|
113858
|
+
}
|
|
113518
113859
|
const behaviorLastTradeToken = "{behavior_last_trade}";
|
|
113519
113860
|
if (legend.includes(behaviorLastTradeToken)) {
|
|
113520
113861
|
let behaviorLastTrade = "";
|
|
@@ -113608,6 +113949,28 @@ var init_prompt_contract = __esm({
|
|
|
113608
113949
|
);
|
|
113609
113950
|
}
|
|
113610
113951
|
}
|
|
113952
|
+
if (tag === REFERENCE_CANDLES_PROMPT_VARIABLE) {
|
|
113953
|
+
const referenceColumnsToken = "{reference_candle_columns}";
|
|
113954
|
+
if (!line.includes(referenceColumnsToken)) {
|
|
113955
|
+
throw new Error(
|
|
113956
|
+
"Missing prompts placeholder: instructions.data_format.legend reference_candles line requires {reference_candle_columns}"
|
|
113957
|
+
);
|
|
113958
|
+
}
|
|
113959
|
+
line = line.replaceAll(
|
|
113960
|
+
referenceColumnsToken,
|
|
113961
|
+
candlesRowColumns(options.referenceIndicatorFlags).join(",")
|
|
113962
|
+
);
|
|
113963
|
+
line = line.replaceAll(
|
|
113964
|
+
"{reference_candle_indicator_definitions}",
|
|
113965
|
+
renderCandleIndicatorDefinitions(
|
|
113966
|
+
options.referenceIndicatorFlags,
|
|
113967
|
+
options.candleIndicatorSchemas
|
|
113968
|
+
)
|
|
113969
|
+
);
|
|
113970
|
+
if (shouldFilter && !referenceBlockPresent) {
|
|
113971
|
+
continue;
|
|
113972
|
+
}
|
|
113973
|
+
}
|
|
113611
113974
|
if (isNewsPromptTag(tag)) {
|
|
113612
113975
|
line = renderNewsLegendLine(line, options.newsSummary, tag);
|
|
113613
113976
|
if (shouldFilter && !newsTagBlock(options.newsSummary, tag)) {
|
|
@@ -113676,6 +114039,25 @@ var init_prompt_contract = __esm({
|
|
|
113676
114039
|
}
|
|
113677
114040
|
return replacedLines.join("\n").trim();
|
|
113678
114041
|
};
|
|
114042
|
+
SIZE_AMOUNT_USDC_LABEL_PATTERN = / USDC(?![\p{L}\p{N}_])/uy;
|
|
114043
|
+
labelSizeAmountInUsd = (template) => {
|
|
114044
|
+
const rewritten = [];
|
|
114045
|
+
let cursor = 0;
|
|
114046
|
+
for (const { name, end } of promptTemplatePlaceholderSpans(template)) {
|
|
114047
|
+
if (name !== "size") {
|
|
114048
|
+
continue;
|
|
114049
|
+
}
|
|
114050
|
+
SIZE_AMOUNT_USDC_LABEL_PATTERN.lastIndex = end;
|
|
114051
|
+
const label2 = SIZE_AMOUNT_USDC_LABEL_PATTERN.exec(template);
|
|
114052
|
+
if (!label2) {
|
|
114053
|
+
continue;
|
|
114054
|
+
}
|
|
114055
|
+
rewritten.push(template.slice(cursor, label2.index), " USD");
|
|
114056
|
+
cursor = label2.index + label2[0].length;
|
|
114057
|
+
}
|
|
114058
|
+
rewritten.push(template.slice(cursor));
|
|
114059
|
+
return rewritten.join("");
|
|
114060
|
+
};
|
|
113679
114061
|
canonicalizePromptPlaceholders = (template) => {
|
|
113680
114062
|
if (typeof template !== "string" || !template) {
|
|
113681
114063
|
return { template: "", changed: false };
|
|
@@ -113688,7 +114070,7 @@ var init_prompt_contract = __esm({
|
|
|
113688
114070
|
changed = true;
|
|
113689
114071
|
}
|
|
113690
114072
|
}
|
|
113691
|
-
const usdTemplate = updated
|
|
114073
|
+
const usdTemplate = labelSizeAmountInUsd(updated);
|
|
113692
114074
|
changed ||= usdTemplate !== updated;
|
|
113693
114075
|
updated = usdTemplate;
|
|
113694
114076
|
return { template: updated, changed };
|
|
@@ -113699,16 +114081,6 @@ var init_prompt_contract = __esm({
|
|
|
113699
114081
|
}
|
|
113700
114082
|
return text.replace(/\r\n/g, "\n").replace(/[\t ]{2,}\n/g, "\n").replace(/\n{3,}/g, "\n\n").trim();
|
|
113701
114083
|
};
|
|
113702
|
-
renderPromptTemplate = (template, contextVars) => {
|
|
113703
|
-
const escapedOpen = "__VTX_PROMPT_OPEN_BRACE__";
|
|
113704
|
-
const escapedClose = "__VTX_PROMPT_CLOSE_BRACE__";
|
|
113705
|
-
const prepared = template.replaceAll("{{", escapedOpen).replaceAll("}}", escapedClose);
|
|
113706
|
-
const rendered = prepared.replace(/\{([a-zA-Z0-9_]+)\}/g, (_match, key) => {
|
|
113707
|
-
const value = contextVars[key];
|
|
113708
|
-
return value === null || value === void 0 ? "" : String(value);
|
|
113709
|
-
});
|
|
113710
|
-
return rendered.replaceAll(escapedOpen, "{").replaceAll(escapedClose, "}");
|
|
113711
|
-
};
|
|
113712
114084
|
formatInstructionTemplate = (template, vars) => {
|
|
113713
114085
|
const escapedOpen = "__VTX_INSTR_OPEN_BRACE__";
|
|
113714
114086
|
const escapedClose = "__VTX_INSTR_CLOSE_BRACE__";
|
|
@@ -113771,7 +114143,9 @@ ${jsonInstruction}`.trim();
|
|
|
113771
114143
|
behaviorPreviousDecisionSchema: instructions.data_format?.behavior_previous_decision,
|
|
113772
114144
|
behaviorPreviousCampaignSchema: instructions.data_format?.behavior_previous_campaign,
|
|
113773
114145
|
behaviorEntryTradeSchema: instructions.data_format?.behavior_entry_trade,
|
|
113774
|
-
candleIndicatorSchemas: instructions.data_format?.candle_indicators
|
|
114146
|
+
candleIndicatorSchemas: instructions.data_format?.candle_indicators,
|
|
114147
|
+
referenceCandlesSummary: options.referenceCandlesSummary,
|
|
114148
|
+
referenceIndicatorFlags: options.referenceIndicatorFlags
|
|
113775
114149
|
});
|
|
113776
114150
|
const hasDataFormatInstructions = /^[ \t]*DATA FORMAT(?: INSTRUCTIONS)?:/m.test(template);
|
|
113777
114151
|
if (legend && !hasDataFormatInstructions) {
|
|
@@ -113788,7 +114162,9 @@ ${legend}`.trim();
|
|
|
113788
114162
|
behaviorPreviousDecisionSchema: instructions.data_format?.behavior_previous_decision,
|
|
113789
114163
|
behaviorPreviousCampaignSchema: instructions.data_format?.behavior_previous_campaign,
|
|
113790
114164
|
behaviorEntryTradeSchema: instructions.data_format?.behavior_entry_trade,
|
|
113791
|
-
candleIndicatorSchemas: instructions.data_format?.candle_indicators
|
|
114165
|
+
candleIndicatorSchemas: instructions.data_format?.candle_indicators,
|
|
114166
|
+
referenceCandlesSummary: options.referenceCandlesSummary,
|
|
114167
|
+
referenceIndicatorFlags: options.referenceIndicatorFlags
|
|
113792
114168
|
});
|
|
113793
114169
|
template = replaceEmbeddedDataFormatLegend(template, canonicalLegend, legend);
|
|
113794
114170
|
}
|
|
@@ -113974,7 +114350,7 @@ var init_behavior_memory_prompt_observability = __esm({
|
|
|
113974
114350
|
});
|
|
113975
114351
|
|
|
113976
114352
|
// lib/runtime/prompt-number-contract.ts
|
|
113977
|
-
var finiteNumber3, roundPromptFixed, roundPromptSignificant, roundPromptNonnegativeUnits;
|
|
114353
|
+
var finiteNumber3, roundPromptFixed, roundPromptSignificant, roundPromptRelativeVolume, roundPromptNonnegativeUnits;
|
|
113978
114354
|
var init_prompt_number_contract = __esm({
|
|
113979
114355
|
"lib/runtime/prompt-number-contract.ts"() {
|
|
113980
114356
|
"use strict";
|
|
@@ -114008,6 +114384,27 @@ var init_prompt_number_contract = __esm({
|
|
|
114008
114384
|
const rounded = Number(numeric2.toPrecision(digits));
|
|
114009
114385
|
return Object.is(rounded, -0) ? 0 : rounded;
|
|
114010
114386
|
};
|
|
114387
|
+
roundPromptRelativeVolume = (value) => {
|
|
114388
|
+
if (value === null || value === void 0 || typeof value === "boolean") {
|
|
114389
|
+
return null;
|
|
114390
|
+
}
|
|
114391
|
+
if (typeof value === "string" && !value.trim()) {
|
|
114392
|
+
return null;
|
|
114393
|
+
}
|
|
114394
|
+
const numeric2 = finiteNumber3(value);
|
|
114395
|
+
if (numeric2 == null) {
|
|
114396
|
+
return null;
|
|
114397
|
+
}
|
|
114398
|
+
const digits = PROMPT_RELATIVE_VOLUME_DIGITS;
|
|
114399
|
+
const awayFromZero = numeric2.toFixed(digits);
|
|
114400
|
+
const tieNumerator = numeric2 * BINARY_RADIX ** (digits + 1);
|
|
114401
|
+
if (!Number.isInteger(tieNumerator) || Math.abs(tieNumerator) % BINARY_RADIX !== 1) {
|
|
114402
|
+
return Number(awayFromZero);
|
|
114403
|
+
}
|
|
114404
|
+
const towardZero = numeric2.toFixed(digits + 1).slice(0, -1);
|
|
114405
|
+
const towardZeroIsEven = Number(towardZero.at(-1)) % BINARY_RADIX === 0;
|
|
114406
|
+
return Number(towardZeroIsEven ? towardZero : awayFromZero);
|
|
114407
|
+
};
|
|
114011
114408
|
roundPromptNonnegativeUnits = (value) => {
|
|
114012
114409
|
const numeric2 = finiteNumber3(value);
|
|
114013
114410
|
if (numeric2 == null || numeric2 <= 0) {
|
|
@@ -114561,6 +114958,7 @@ __export(local_analysis_exports, {
|
|
|
114561
114958
|
buildLocalRuntimePromptArtifacts: () => buildLocalRuntimePromptArtifacts,
|
|
114562
114959
|
buildPromptBehaviorStateArtifacts: () => buildPromptBehaviorStateArtifacts,
|
|
114563
114960
|
buildPromptBehaviorStateValue: () => buildPromptBehaviorStateValue,
|
|
114961
|
+
buildPromptCandleTimeframeComponent: () => buildPromptCandleTimeframeComponent,
|
|
114564
114962
|
capacityUnitSize: () => capacityUnitSize,
|
|
114565
114963
|
derivePromptVisibleSections: () => derivePromptVisibleSections,
|
|
114566
114964
|
isClientRuntimeAgentInstructionEmpty: () => isClientRuntimeAgentInstructionEmpty,
|
|
@@ -114576,7 +114974,7 @@ __export(local_analysis_exports, {
|
|
|
114576
114974
|
runLocalRuntimeCycle: () => runLocalRuntimeCycle,
|
|
114577
114975
|
summarizeReviewFailureExplanation: () => summarizeReviewFailureExplanation
|
|
114578
114976
|
});
|
|
114579
|
-
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, acceptancePositionCaps, accountSnapshotCapturedAt, 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, decisionRecordsBySymbol, normalizePromptSymbols, JSON_MODEL_OUTPUT_FENCE_PATTERN, STRICT_MODEL_OUTPUT_KEYS, currentModelOutputValidationErrors, currentModelOutputMatchesContract, projectCurrentModelDecisionContent, modelOutputValidationError, SERVER_UNREADABLE_REPLY_HOLD_REASONING, 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,
|
|
114977
|
+
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, acceptancePositionCaps, accountSnapshotCapturedAt, 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, MANIFEST_COMPONENT_NAME, derivePromptVisibleSections, decodeDecisionTracePayload, extractDecisionSymbolTrace, formatDecisionSymbolTrace, formatActionableDecisionSymbols, decisionRecordsBySymbol, normalizePromptSymbols, JSON_MODEL_OUTPUT_FENCE_PATTERN, STRICT_MODEL_OUTPUT_KEYS, currentModelOutputValidationErrors, currentModelOutputMatchesContract, projectCurrentModelDecisionContent, modelOutputValidationError, SERVER_UNREADABLE_REPLY_HOLD_REASONING, 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, AI_INDICATOR_KEYS_NEWER_THAN_SOME_SERVERS, sortTradingTimeframes, normalizePromptIdentityTimestamp, resolveCompletedCandleBoundary, normalizeAiIndicatorFlags, getPromptLookback, computeSma, computeEma, computeRsi, computeAtr, computeMacd, computeBollingerBands, getIndicatorValue, buildPromptCandlesComponent, buildPromptCandleTimeframeComponent, resolvePromptRelativeVolumeContext, promptRelativeVolumeBaseline, CANDLE_CLOSE_TICKER_TIMEFRAME, candleCloseTicker, 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;
|
|
114580
114978
|
var init_local_analysis = __esm({
|
|
114581
114979
|
"lib/runtime/local-analysis.ts"() {
|
|
114582
114980
|
"use strict";
|
|
@@ -115304,13 +115702,12 @@ var init_local_analysis = __esm({
|
|
|
115304
115702
|
}
|
|
115305
115703
|
};
|
|
115306
115704
|
};
|
|
115705
|
+
MANIFEST_COMPONENT_NAME = /^[a-z][a-z0-9_]{0,63}$/;
|
|
115307
115706
|
derivePromptVisibleSections = (input) => {
|
|
115308
115707
|
const configuredTemplate = input.configuredTemplates.filter((value) => typeof value === "string").join("\n");
|
|
115309
|
-
const placeholders =
|
|
115310
|
-
|
|
115311
|
-
|
|
115312
|
-
placeholders.add(match[1]);
|
|
115313
|
-
}
|
|
115708
|
+
const placeholders = new Set(
|
|
115709
|
+
promptTemplatePlaceholders(configuredTemplate).filter((name) => MANIFEST_COMPONENT_NAME.test(name))
|
|
115710
|
+
);
|
|
115314
115711
|
const finalPromptText = input.renderedPrompts.filter((value) => typeof value === "string").join("\n");
|
|
115315
115712
|
return new Set(Object.entries(input.dynamicComponents).filter(([name, value]) => {
|
|
115316
115713
|
if (placeholders.has(name)) {
|
|
@@ -115697,21 +116094,11 @@ var init_local_analysis = __esm({
|
|
|
115697
116094
|
`No usable candle data was available for configured symbol ${normalizedSymbol || plan.symbol}; forced HOLD.`
|
|
115698
116095
|
);
|
|
115699
116096
|
});
|
|
115700
|
-
extractTemplatePlaceholders = (template) =>
|
|
115701
|
-
const matches2 = Array.from(template.matchAll(/(?<!\{)\{([a-zA-Z0-9_]+)\}(?!\})/g));
|
|
115702
|
-
const unique = /* @__PURE__ */ new Set();
|
|
115703
|
-
for (const match of matches2) {
|
|
115704
|
-
const key = String(match[1] || "").trim();
|
|
115705
|
-
if (key) {
|
|
115706
|
-
unique.add(key);
|
|
115707
|
-
}
|
|
115708
|
-
}
|
|
115709
|
-
return Array.from(unique).sort();
|
|
115710
|
-
};
|
|
116097
|
+
extractTemplatePlaceholders = (template) => Array.from(new Set(promptTemplatePlaceholders(template))).sort();
|
|
115711
116098
|
requireReviewPrimaryUserPromptTemplate = (template) => {
|
|
115712
116099
|
const canonical = canonicalizePromptPlaceholders(template).template;
|
|
115713
|
-
const activePrimaryPlaceholders =
|
|
115714
|
-
|
|
116100
|
+
const activePrimaryPlaceholders = promptTemplatePlaceholders(canonical).filter(
|
|
116101
|
+
(name) => name === "primary_user_prompt"
|
|
115715
116102
|
);
|
|
115716
116103
|
if (activePrimaryPlaceholders.length > 1 || /<\/?behavior_state\b/.test(canonical)) {
|
|
115717
116104
|
throw new CriticalBehaviorStateError();
|
|
@@ -116317,16 +116704,7 @@ ${reviewOutputContract}`;
|
|
|
116317
116704
|
}
|
|
116318
116705
|
return 0;
|
|
116319
116706
|
};
|
|
116320
|
-
|
|
116321
|
-
"rsi",
|
|
116322
|
-
"macd",
|
|
116323
|
-
"bollinger",
|
|
116324
|
-
"atr",
|
|
116325
|
-
"ema_9",
|
|
116326
|
-
"ema_21",
|
|
116327
|
-
"ema_50",
|
|
116328
|
-
"ema_200"
|
|
116329
|
-
];
|
|
116707
|
+
AI_INDICATOR_KEYS_NEWER_THAN_SOME_SERVERS = ["rv"];
|
|
116330
116708
|
sortTradingTimeframes = (timeframes) => sortCandleTimeframes(Array.from(
|
|
116331
116709
|
new Set(
|
|
116332
116710
|
timeframes.map((value) => String(value || "").trim()).filter(Boolean)
|
|
@@ -116359,19 +116737,25 @@ ${reviewOutputContract}`;
|
|
|
116359
116737
|
throw new Error("Missing required client runtime config: default_ai_indicators.");
|
|
116360
116738
|
}
|
|
116361
116739
|
const normalizedDefaults = Object.fromEntries(
|
|
116362
|
-
|
|
116740
|
+
AI_INDICATOR_KEYS.flatMap((key) => {
|
|
116363
116741
|
const rawValue = defaultsValue[key];
|
|
116742
|
+
if (rawValue === void 0 && AI_INDICATOR_KEYS_NEWER_THAN_SOME_SERVERS.includes(key)) {
|
|
116743
|
+
return [];
|
|
116744
|
+
}
|
|
116364
116745
|
if (typeof rawValue !== "boolean") {
|
|
116365
116746
|
throw new Error(`Invalid client runtime config: default_ai_indicators.${key} must be boolean.`);
|
|
116366
116747
|
}
|
|
116367
|
-
return [key, rawValue];
|
|
116748
|
+
return [[key, rawValue]];
|
|
116368
116749
|
})
|
|
116369
116750
|
);
|
|
116370
116751
|
if (!overridesValue || typeof overridesValue !== "object" || Array.isArray(overridesValue)) {
|
|
116371
116752
|
return normalizedDefaults;
|
|
116372
116753
|
}
|
|
116373
116754
|
const merged = { ...normalizedDefaults };
|
|
116374
|
-
for (const key of
|
|
116755
|
+
for (const key of AI_INDICATOR_KEYS) {
|
|
116756
|
+
if (!Object.prototype.hasOwnProperty.call(normalizedDefaults, key)) {
|
|
116757
|
+
continue;
|
|
116758
|
+
}
|
|
116375
116759
|
const overrideValue = overridesValue[key];
|
|
116376
116760
|
if (overrideValue == null) {
|
|
116377
116761
|
continue;
|
|
@@ -116579,7 +116963,7 @@ ${reviewOutputContract}`;
|
|
|
116579
116963
|
}
|
|
116580
116964
|
return roundPromptSignificant(value, roundDigits);
|
|
116581
116965
|
};
|
|
116582
|
-
buildPromptCandlesComponent = (candles, promptLookback, activeIndicators) => {
|
|
116966
|
+
buildPromptCandlesComponent = (candles, promptLookback, activeIndicators, relativeVolume) => {
|
|
116583
116967
|
const sortedCandles = [...candles].sort(
|
|
116584
116968
|
(left, right) => toEpochSeconds(left.timestamp) - toEpochSeconds(right.timestamp)
|
|
116585
116969
|
);
|
|
@@ -116619,6 +117003,18 @@ ${reviewOutputContract}`;
|
|
|
116619
117003
|
if (activeIndicators.ema_200) {
|
|
116620
117004
|
indicators.ema_200 = computeEma(closes, PROMPT_EMA_PERIODS.ema_200);
|
|
116621
117005
|
}
|
|
117006
|
+
if (activeIndicators.rv) {
|
|
117007
|
+
indicators.rv = calculateRelativeVolumeSeries({
|
|
117008
|
+
candles: sortedCandles,
|
|
117009
|
+
closedCount: relativeVolume ? closedCandleCount({
|
|
117010
|
+
openTimestamps: sortedCandles.map((candle) => toEpochSeconds(candle.timestamp)),
|
|
117011
|
+
timeframe: relativeVolume.timeframe,
|
|
117012
|
+
asOfTimestamp: relativeVolume.asOfTimestamp
|
|
117013
|
+
}) : 0,
|
|
117014
|
+
baselineDollarVolume: relativeVolume?.baselineDollarVolume ?? null,
|
|
117015
|
+
recentCandles: relativeVolume?.recentCandles ?? 0
|
|
117016
|
+
});
|
|
117017
|
+
}
|
|
116622
117018
|
const recentCandles = sortedCandles.slice(-Math.max(promptLookback, 1));
|
|
116623
117019
|
const startIndex = sortedCandles.length - recentCandles.length;
|
|
116624
117020
|
const summarized = recentCandles.map((candle, index) => {
|
|
@@ -116631,38 +117027,55 @@ ${reviewOutputContract}`;
|
|
|
116631
117027
|
roundPromptSignificant(candle.close, PROMPT_SIGNIFICANT_DIGITS),
|
|
116632
117028
|
Math.trunc(Number(candle.volume) || 0)
|
|
116633
117029
|
];
|
|
116634
|
-
|
|
116635
|
-
|
|
116636
|
-
|
|
116637
|
-
|
|
116638
|
-
|
|
116639
|
-
|
|
116640
|
-
|
|
116641
|
-
|
|
116642
|
-
|
|
116643
|
-
|
|
116644
|
-
|
|
116645
|
-
|
|
116646
|
-
}
|
|
116647
|
-
if (activeIndicators.atr) {
|
|
116648
|
-
row.push(getIndicatorValue(indicators.atr, currentIndex));
|
|
116649
|
-
}
|
|
116650
|
-
if (activeIndicators.ema_9) {
|
|
116651
|
-
row.push(getIndicatorValue(indicators.ema_9, currentIndex));
|
|
116652
|
-
}
|
|
116653
|
-
if (activeIndicators.ema_21) {
|
|
116654
|
-
row.push(getIndicatorValue(indicators.ema_21, currentIndex));
|
|
116655
|
-
}
|
|
116656
|
-
if (activeIndicators.ema_50) {
|
|
116657
|
-
row.push(getIndicatorValue(indicators.ema_50, currentIndex));
|
|
116658
|
-
}
|
|
116659
|
-
if (activeIndicators.ema_200) {
|
|
116660
|
-
row.push(getIndicatorValue(indicators.ema_200, currentIndex));
|
|
117030
|
+
for (const indicatorKey of AI_INDICATOR_KEYS) {
|
|
117031
|
+
if (!activeIndicators[indicatorKey]) {
|
|
117032
|
+
continue;
|
|
117033
|
+
}
|
|
117034
|
+
for (const column of AI_INDICATOR_ROW_COLUMNS[indicatorKey]) {
|
|
117035
|
+
if (column === "rv") {
|
|
117036
|
+
row.push(roundPromptRelativeVolume(indicators.rv?.[currentIndex] ?? null));
|
|
117037
|
+
continue;
|
|
117038
|
+
}
|
|
117039
|
+
const value = getIndicatorValue(indicators[column], currentIndex);
|
|
117040
|
+
row.push(column === "rsi" && value != null ? roundPromptFixed(value, 1) : value);
|
|
117041
|
+
}
|
|
116661
117042
|
}
|
|
116662
117043
|
return row;
|
|
116663
117044
|
});
|
|
116664
117045
|
return { c: summarized };
|
|
116665
117046
|
};
|
|
117047
|
+
buildPromptCandleTimeframeComponent = (input) => projectCandlePromptComponent({
|
|
117048
|
+
component: buildPromptCandlesComponent(
|
|
117049
|
+
input.candles,
|
|
117050
|
+
input.promptLookback,
|
|
117051
|
+
input.activeIndicators,
|
|
117052
|
+
input.relativeVolume ? { ...input.relativeVolume, timeframe: input.timeframe, asOfTimestamp: input.asOfTimestamp } : null
|
|
117053
|
+
),
|
|
117054
|
+
timeframe: input.timeframe,
|
|
117055
|
+
asOfTimestamp: input.asOfTimestamp
|
|
117056
|
+
});
|
|
117057
|
+
resolvePromptRelativeVolumeContext = (derivedContext) => {
|
|
117058
|
+
const baselinesBySymbol = derivedContext.relative_volume_baselines;
|
|
117059
|
+
const recentCandles = derivedContext.relative_volume_recent_candles;
|
|
117060
|
+
if (!baselinesBySymbol || typeof baselinesBySymbol !== "object" || Array.isArray(baselinesBySymbol)) {
|
|
117061
|
+
return null;
|
|
117062
|
+
}
|
|
117063
|
+
if (typeof recentCandles !== "number" || !Number.isInteger(recentCandles) || recentCandles <= 0) {
|
|
117064
|
+
return null;
|
|
117065
|
+
}
|
|
117066
|
+
return { baselinesBySymbol, recentCandles };
|
|
117067
|
+
};
|
|
117068
|
+
promptRelativeVolumeBaseline = (context, symbol2, timeframe) => {
|
|
117069
|
+
const symbolKey = Object.prototype.hasOwnProperty.call(context.baselinesBySymbol, symbol2) ? symbol2 : Object.keys(context.baselinesBySymbol).find(
|
|
117070
|
+
(candidate) => normalizeHyperliquidMarketSymbol(candidate) === normalizeHyperliquidMarketSymbol(symbol2)
|
|
117071
|
+
);
|
|
117072
|
+
const timeframeBaselines = symbolKey === void 0 ? null : context.baselinesBySymbol[symbolKey];
|
|
117073
|
+
if (!timeframeBaselines || typeof timeframeBaselines !== "object" || Array.isArray(timeframeBaselines)) {
|
|
117074
|
+
return null;
|
|
117075
|
+
}
|
|
117076
|
+
const baseline = timeframeBaselines[timeframe];
|
|
117077
|
+
return typeof baseline === "number" && Number.isFinite(baseline) ? baseline : null;
|
|
117078
|
+
};
|
|
116666
117079
|
CANDLE_CLOSE_TICKER_TIMEFRAME = "5m";
|
|
116667
117080
|
candleCloseTicker = (symbol2, candlesByTimeframe) => {
|
|
116668
117081
|
const preferred = candlesByTimeframe[CANDLE_CLOSE_TICKER_TIMEFRAME] ?? [];
|
|
@@ -116682,10 +117095,16 @@ ${reviewOutputContract}`;
|
|
|
116682
117095
|
for (const timeframe of input.timeframes) {
|
|
116683
117096
|
const candles = input.candlesBySymbol[symbol2]?.[timeframe] ?? [];
|
|
116684
117097
|
const promptLookback = getPromptLookback(input.lookbackSettings, timeframe, input.defaultLookbacks, input.maxLookback);
|
|
116685
|
-
symbolData.data[timeframe] =
|
|
116686
|
-
|
|
117098
|
+
symbolData.data[timeframe] = buildPromptCandleTimeframeComponent({
|
|
117099
|
+
candles,
|
|
116687
117100
|
timeframe,
|
|
116688
|
-
|
|
117101
|
+
promptLookback,
|
|
117102
|
+
activeIndicators: input.activeIndicators,
|
|
117103
|
+
asOfTimestamp,
|
|
117104
|
+
relativeVolume: input.relativeVolume ? {
|
|
117105
|
+
baselineDollarVolume: promptRelativeVolumeBaseline(input.relativeVolume, symbol2, timeframe),
|
|
117106
|
+
recentCandles: input.relativeVolume.recentCandles
|
|
117107
|
+
} : null
|
|
116689
117108
|
});
|
|
116690
117109
|
}
|
|
116691
117110
|
payload[symbol2] = symbolData;
|
|
@@ -117661,7 +118080,7 @@ ${behaviorJson}
|
|
|
117661
118080
|
};
|
|
117662
118081
|
buildLocalRuntimePromptArtifacts = (input) => {
|
|
117663
118082
|
const { template: effectiveUserTemplate } = canonicalizePromptPlaceholders(input.userTemplate);
|
|
117664
|
-
const activePlaceholders = new Set(
|
|
118083
|
+
const activePlaceholders = new Set(promptTemplatePlaceholders(effectiveUserTemplate));
|
|
117665
118084
|
const systemPrompt = constructPromptSystemTemplate(input.systemTemplate, {
|
|
117666
118085
|
instructions: input.instructions,
|
|
117667
118086
|
symbols: input.symbols,
|
|
@@ -117673,7 +118092,9 @@ ${behaviorJson}
|
|
|
117673
118092
|
candlesSummary: String(input.contextVars.candles ?? ""),
|
|
117674
118093
|
newsSummary: NEWS_PROMPT_VARIABLES.map((key) => String(input.contextVars[key] ?? "")).filter((block) => block.trim().length > 0).join("\n"),
|
|
117675
118094
|
calendarSummary: String(input.contextVars.calendar ?? ""),
|
|
117676
|
-
behaviorStateSummary: String(input.contextVars.behavior_state ?? "")
|
|
118095
|
+
behaviorStateSummary: String(input.contextVars.behavior_state ?? ""),
|
|
118096
|
+
referenceCandlesSummary: String(input.contextVars[REFERENCE_CANDLES_PROMPT_VARIABLE] ?? ""),
|
|
118097
|
+
referenceIndicatorFlags: input.referenceIndicators
|
|
117677
118098
|
});
|
|
117678
118099
|
const templateContextVars = Object.fromEntries(
|
|
117679
118100
|
Object.entries(input.contextVars).filter(([key]) => activePlaceholders.has(key))
|
|
@@ -118730,30 +119151,9 @@ ${behaviorJson}
|
|
|
118730
119151
|
const getLatestTotalUnrealizedPnl = () => _latestTotalUnrealizedPnl;
|
|
118731
119152
|
const getAccountStateResolvedAtMs = () => _accountStateResolvedAtMs;
|
|
118732
119153
|
const accountStateStartedAtMs = Date.now();
|
|
118733
|
-
let promptRescueSequence = 0;
|
|
119154
|
+
let promptRescueSequence = input.dispatchContextRebuild === true ? PROMPT_RESCUE_ASKS_PER_CYCLE_BUILD : 0;
|
|
118734
119155
|
observeRuntimeCycle(input, { stage: "market_context" });
|
|
118735
|
-
const
|
|
118736
|
-
publicRequestPriority: "trading_analysis",
|
|
118737
|
-
config: config2,
|
|
118738
|
-
walletAddress,
|
|
118739
|
-
symbol: localFallbackSymbol,
|
|
118740
|
-
tickerPrice: 0,
|
|
118741
|
-
leverage: resolveRuntimeLeveragePreference(settings, config2),
|
|
118742
|
-
aggregatePerpDexs: true,
|
|
118743
|
-
perpDexScope: perpDexScopeForSymbols(symbols),
|
|
118744
|
-
feeSymbols: symbols,
|
|
118745
|
-
includeEffectiveTakerRate: true,
|
|
118746
|
-
// A Server bot's cycle reads the account authoritatively, as the Python
|
|
118747
|
-
// Server loop does: never a cached or rate-limit-stale observation.
|
|
118748
|
-
forceRefresh: input.executionMode === "server",
|
|
118749
|
-
// And values it as that loop does: Perps equity alone unless the loop's
|
|
118750
|
-
// own tests count Spot (serverLoopAccountValue). A Client bot's cycle
|
|
118751
|
-
// keeps the device rule.
|
|
118752
|
-
serverLoopAccountValue: input.executionMode === "server",
|
|
118753
|
-
sessionId,
|
|
118754
|
-
signal: timeoutController.signal
|
|
118755
|
-
}).catch(async (error48) => {
|
|
118756
|
-
if (input.executionMode !== "server" || !(error48 instanceof HyperliquidPublicReadError)) throw error48;
|
|
119156
|
+
const rescueAccountState = async (serverReason) => {
|
|
118757
119157
|
promptRescueSequence += 1;
|
|
118758
119158
|
try {
|
|
118759
119159
|
const rescued = await requestServerHostPromptRescue(profileId, {
|
|
@@ -118766,20 +119166,59 @@ ${behaviorJson}
|
|
|
118766
119166
|
symbol: localFallbackSymbol,
|
|
118767
119167
|
symbols,
|
|
118768
119168
|
requestSequence: promptRescueSequence,
|
|
118769
|
-
serverReason
|
|
119169
|
+
serverReason
|
|
118770
119170
|
}, {
|
|
118771
119171
|
schedulerInstanceId: String(input.schedulerInstanceId || "").trim(),
|
|
118772
119172
|
signal: timeoutController.signal
|
|
118773
119173
|
});
|
|
118774
|
-
appendRuntimeDebugEvent({ label: "account_state_prompt_rescued", note: `job=${rescued.job_id} reason=${
|
|
119174
|
+
appendRuntimeDebugEvent({ label: "account_state_prompt_rescued", note: `job=${rescued.job_id} reason=${serverReason}` });
|
|
118775
119175
|
return accountStateFromServerPromptRescueSnapshot(rescued.snapshot, localFallbackSymbol);
|
|
119176
|
+
} catch (rescueError) {
|
|
119177
|
+
if (!timeoutController.signal.aborted) {
|
|
119178
|
+
appendRuntimeDebugEvent({
|
|
119179
|
+
label: "account_state_prompt_rescue_unavailable",
|
|
119180
|
+
note: `reason=${serverReason} ${rescueError instanceof Error ? rescueError.message : String(rescueError)}`,
|
|
119181
|
+
outcome: "error"
|
|
119182
|
+
});
|
|
119183
|
+
}
|
|
119184
|
+
throw rescueError;
|
|
119185
|
+
}
|
|
119186
|
+
};
|
|
119187
|
+
const browserAccountStateTask = (async () => {
|
|
119188
|
+
if (input.executionMode === "server" && input.dispatchContextRebuild !== true && await hyperliquidPrivateInfoHeldOff()) {
|
|
119189
|
+
try {
|
|
119190
|
+
return await rescueAccountState(SERVER_PROMPT_RESCUE_NODE_OUTAGE_REASON);
|
|
119191
|
+
} catch (rescueError) {
|
|
119192
|
+
if (timeoutController.signal.aborted) throw rescueError;
|
|
119193
|
+
}
|
|
119194
|
+
}
|
|
119195
|
+
return fetchBrowserAccountState2({
|
|
119196
|
+
publicRequestPriority: "trading_analysis",
|
|
119197
|
+
config: config2,
|
|
119198
|
+
walletAddress,
|
|
119199
|
+
symbol: localFallbackSymbol,
|
|
119200
|
+
tickerPrice: 0,
|
|
119201
|
+
leverage: resolveRuntimeLeveragePreference(settings, config2),
|
|
119202
|
+
aggregatePerpDexs: true,
|
|
119203
|
+
perpDexScope: perpDexScopeForSymbols(symbols),
|
|
119204
|
+
feeSymbols: symbols,
|
|
119205
|
+
includeEffectiveTakerRate: true,
|
|
119206
|
+
// A Server bot's cycle reads the account authoritatively, as the Python
|
|
119207
|
+
// Server loop does: never a cached or rate-limit-stale observation.
|
|
119208
|
+
forceRefresh: input.executionMode === "server",
|
|
119209
|
+
// And values it as that loop does: Perps equity alone unless the loop's
|
|
119210
|
+
// own tests count Spot (serverLoopAccountValue). A Client bot's cycle
|
|
119211
|
+
// keeps the device rule.
|
|
119212
|
+
serverLoopAccountValue: input.executionMode === "server",
|
|
119213
|
+
sessionId,
|
|
119214
|
+
signal: timeoutController.signal
|
|
119215
|
+
});
|
|
119216
|
+
})().catch(async (error48) => {
|
|
119217
|
+
if (input.executionMode !== "server" || !(error48 instanceof HyperliquidPublicReadError)) throw error48;
|
|
119218
|
+
try {
|
|
119219
|
+
return await rescueAccountState(error48.code);
|
|
118776
119220
|
} catch (rescueError) {
|
|
118777
119221
|
if (timeoutController.signal.aborted) throw rescueError;
|
|
118778
|
-
appendRuntimeDebugEvent({
|
|
118779
|
-
label: "account_state_prompt_rescue_unavailable",
|
|
118780
|
-
note: rescueError instanceof Error ? rescueError.message : String(rescueError),
|
|
118781
|
-
outcome: "error"
|
|
118782
|
-
});
|
|
118783
119222
|
throw error48;
|
|
118784
119223
|
}
|
|
118785
119224
|
}).then((state2) => {
|
|
@@ -119106,6 +119545,8 @@ ${behaviorJson}
|
|
|
119106
119545
|
const contractPrefersLocalSource = isClientOnlyModelSource(authoritativeModelSource);
|
|
119107
119546
|
const temperature = clampNumber(settings.temperature, config2.default_temperature);
|
|
119108
119547
|
const maxTokens = Math.round(clampNumber(settings.max_tokens, config2.default_max_tokens));
|
|
119548
|
+
const derivedContext = asRecord(promptDerivedContext.derived_context);
|
|
119549
|
+
const relativeVolumeContext = activeIndicators.rv ? resolvePromptRelativeVolumeContext(derivedContext) : null;
|
|
119109
119550
|
const candlesPayload = buildPromptCandlesPayload({
|
|
119110
119551
|
symbols: promptSymbols,
|
|
119111
119552
|
timeframes: promptTimeframes,
|
|
@@ -119114,7 +119555,8 @@ ${behaviorJson}
|
|
|
119114
119555
|
lookbackSettings,
|
|
119115
119556
|
defaultLookbacks: effectiveDefaultLookbacks,
|
|
119116
119557
|
maxLookback: config2.max_analysis_lookback,
|
|
119117
|
-
activeIndicators
|
|
119558
|
+
activeIndicators,
|
|
119559
|
+
relativeVolume: relativeVolumeContext
|
|
119118
119560
|
});
|
|
119119
119561
|
if (!Object.prototype.hasOwnProperty.call(candlesPayload, symbol2)) {
|
|
119120
119562
|
throw new Error(`Prompt contract symbol is missing from local market payload: ${symbol2}`);
|
|
@@ -119269,7 +119711,6 @@ ${behaviorJson}
|
|
|
119269
119711
|
"configured_user_template"
|
|
119270
119712
|
);
|
|
119271
119713
|
const templatePlaceholders = extractTemplatePlaceholders(userTemplate);
|
|
119272
|
-
const derivedContext = asRecord(promptDerivedContext.derived_context);
|
|
119273
119714
|
const cycleCutoff = normalizePromptIdentityTimestamp(
|
|
119274
119715
|
derivedContext.behavior_memory_cutoff ?? promptDerivedContext.derived_context_generated_at
|
|
119275
119716
|
);
|
|
@@ -119284,6 +119725,9 @@ ${behaviorJson}
|
|
|
119284
119725
|
"market_regime",
|
|
119285
119726
|
...NEWS_PROMPT_VARIABLES,
|
|
119286
119727
|
"calendar",
|
|
119728
|
+
// The server renders the whole <reference_candles> block; it is
|
|
119729
|
+
// present, possibly blank, whenever the template uses the variable.
|
|
119730
|
+
REFERENCE_CANDLES_PROMPT_VARIABLE,
|
|
119287
119731
|
"interval"
|
|
119288
119732
|
].includes(key));
|
|
119289
119733
|
for (const key of requiredDerivedKeys) {
|
|
@@ -119293,6 +119737,11 @@ ${behaviorJson}
|
|
|
119293
119737
|
}
|
|
119294
119738
|
const intervalContext = String(derivedContext.interval ?? "").trim();
|
|
119295
119739
|
const calendarContext = String(derivedContext.calendar ?? "");
|
|
119740
|
+
const referenceCandlesContext = String(derivedContext[REFERENCE_CANDLES_PROMPT_VARIABLE] ?? "");
|
|
119741
|
+
const rawReferenceIndicators = derivedContext.reference_candles_indicators;
|
|
119742
|
+
const referenceIndicators = rawReferenceIndicators && typeof rawReferenceIndicators === "object" && !Array.isArray(rawReferenceIndicators) ? Object.fromEntries(
|
|
119743
|
+
Object.entries(rawReferenceIndicators).map(([key, value]) => [key, Boolean(value)])
|
|
119744
|
+
) : void 0;
|
|
119296
119745
|
if (typeof promptKnobs.behavior_memory_enabled !== "boolean") {
|
|
119297
119746
|
throw new Error("Prompt metadata missing lane-effective behavior_memory_enabled Boolean.");
|
|
119298
119747
|
}
|
|
@@ -119354,6 +119803,7 @@ ${behaviorJson}
|
|
|
119354
119803
|
candles: `<candles>
|
|
119355
119804
|
${stringifyPromptJson(candlesPayload)}
|
|
119356
119805
|
</candles>`,
|
|
119806
|
+
[REFERENCE_CANDLES_PROMPT_VARIABLE]: referenceCandlesContext,
|
|
119357
119807
|
market_stats: String(derivedContext.market_stats ?? ""),
|
|
119358
119808
|
account_status: buildPromptAccountStatusValue(
|
|
119359
119809
|
accountSummary,
|
|
@@ -119437,7 +119887,9 @@ ${stringifyPromptJson(candlesPayload)}
|
|
|
119437
119887
|
note: [
|
|
119438
119888
|
`interval_source=${intervalContext ? "derived_context" : "missing"}`,
|
|
119439
119889
|
`calendar_source=${calendarContext ? "derived_context" : "missing"}`,
|
|
119440
|
-
...NEWS_PROMPT_VARIABLES.map((key) => `${key}_source=${Object.prototype.hasOwnProperty.call(derivedContext, key) ? "derived_context" : "missing"}`)
|
|
119890
|
+
...NEWS_PROMPT_VARIABLES.map((key) => `${key}_source=${Object.prototype.hasOwnProperty.call(derivedContext, key) ? "derived_context" : "missing"}`),
|
|
119891
|
+
`${REFERENCE_CANDLES_PROMPT_VARIABLE}_source=${Object.prototype.hasOwnProperty.call(derivedContext, REFERENCE_CANDLES_PROMPT_VARIABLE) ? "derived_context" : "missing"}`,
|
|
119892
|
+
...activeIndicators.rv ? [`relative_volume_baselines_source=${relativeVolumeContext ? "derived_context" : "missing"}`] : []
|
|
119441
119893
|
].join(" ")
|
|
119442
119894
|
});
|
|
119443
119895
|
const contextSnapshots = {
|
|
@@ -119463,6 +119915,7 @@ ${stringifyPromptJson(candlesPayload)}
|
|
|
119463
119915
|
const contextValueSummary = [
|
|
119464
119916
|
"current_time",
|
|
119465
119917
|
"candles",
|
|
119918
|
+
REFERENCE_CANDLES_PROMPT_VARIABLE,
|
|
119466
119919
|
"market_stats",
|
|
119467
119920
|
"account_status",
|
|
119468
119921
|
"calendar",
|
|
@@ -119503,6 +119956,7 @@ ${stringifyPromptJson(candlesPayload)}
|
|
|
119503
119956
|
systemTemplate,
|
|
119504
119957
|
instructions: asRecord(promptMetadata.prompt_instructions),
|
|
119505
119958
|
activeIndicators,
|
|
119959
|
+
referenceIndicators,
|
|
119506
119960
|
symbols: promptSymbols,
|
|
119507
119961
|
maxTradesPerPrompt,
|
|
119508
119962
|
metricsWindowHours,
|
|
@@ -119627,7 +120081,11 @@ ${stringifyPromptJson(candlesPayload)}
|
|
|
119627
120081
|
leverage: metadataLeverage,
|
|
119628
120082
|
active_indicators: activeIndicators,
|
|
119629
120083
|
candles_payload: stringifyPromptJson(candlesPayload),
|
|
119630
|
-
context_vars: contextVars
|
|
120084
|
+
context_vars: contextVars,
|
|
120085
|
+
// The server's re-render needs the flags its reference block was built
|
|
120086
|
+
// with for that block's legend line; the block itself is echoed in
|
|
120087
|
+
// context_vars.reference_candles.
|
|
120088
|
+
...referenceIndicators ? { reference_active_indicators: referenceIndicators } : {}
|
|
119631
120089
|
};
|
|
119632
120090
|
if (input.requireServerPromptParity && shouldCompareServerPromptParity()) {
|
|
119633
120091
|
try {
|
|
@@ -120806,6 +121264,7 @@ var init_engine = __esm({
|
|
|
120806
121264
|
init_api2();
|
|
120807
121265
|
init_history_evidence();
|
|
120808
121266
|
init_portfolio_evidence();
|
|
121267
|
+
init_signing_key_messages();
|
|
120809
121268
|
init_copy_trading_evidence();
|
|
120810
121269
|
DEVICE_DIAGNOSTICS3 = runtime_policy_generated_default2.trading.engine.client_runtime.device_diagnostics;
|
|
120811
121270
|
FALLBACK_ERROR_MAX_CHARS = runtime_policy_generated_default2.trading.engine.client_runtime.request_bounds.max_fallback_error_length;
|
|
@@ -123997,10 +124456,11 @@ var init_engine = __esm({
|
|
|
123997
124456
|
if (analysisAbortController.signal.aborted || this._isStopping || this._analysisRequestId !== requestId) {
|
|
123998
124457
|
throw new DOMException("The operation was aborted.", "AbortError");
|
|
123999
124458
|
}
|
|
124000
|
-
const runCycle = (secrets) => runLocalRuntimeCycle2({
|
|
124459
|
+
const runCycle = (secrets, dispatchContextRebuild = false) => runLocalRuntimeCycle2({
|
|
124001
124460
|
profileId,
|
|
124002
124461
|
mode: runtimeMode,
|
|
124003
124462
|
analysisRunId: requestId,
|
|
124463
|
+
dispatchContextRebuild,
|
|
124004
124464
|
secrets,
|
|
124005
124465
|
sessionId,
|
|
124006
124466
|
deviceId,
|
|
@@ -124086,7 +124546,7 @@ var init_engine = __esm({
|
|
|
124086
124546
|
throw error48;
|
|
124087
124547
|
}
|
|
124088
124548
|
appendRuntimeDebugEvent({ label: "server_dispatch_context_rebuilt", note: "attempt=2", outcome: "ok" });
|
|
124089
|
-
return runCycle(secrets);
|
|
124549
|
+
return runCycle(secrets, true);
|
|
124090
124550
|
});
|
|
124091
124551
|
let result;
|
|
124092
124552
|
try {
|
|
@@ -125387,7 +125847,7 @@ var init_engine = __esm({
|
|
|
125387
125847
|
// this owner session, or null when the report was not accepted.
|
|
125388
125848
|
async _reportDeviceSigningKeyStartFailure(reason, failure2) {
|
|
125389
125849
|
if (!this._profileId || !this._sessionId || !this._deviceId) return null;
|
|
125390
|
-
const sanitizedReason = getSanitizedRuntimeErrorMessage(reason) ||
|
|
125850
|
+
const sanitizedReason = getSanitizedRuntimeErrorMessage(reason) || SIGNING_KEY_INVALID;
|
|
125391
125851
|
try {
|
|
125392
125852
|
const response = await reportClientRuntimeError(
|
|
125393
125853
|
this._profileId,
|