@vtxmacro/cli 2026.10.15 → 2026.10.17

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