@vtxmacro/cli 2026.10.76 → 2026.10.78

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.
@@ -36,6 +36,11 @@ var runtime_policy_generated_default = {
36
36
  account_read_backoff_exponent_max: 30,
37
37
  ai_start_grace_min_ms: 45e3
38
38
  },
39
+ server_read_recovery: {
40
+ retry_delay_ms: 1500,
41
+ max_attempts: 3,
42
+ attempts_window_ms: 6e4
43
+ },
39
44
  deployment_reload_observability: {
40
45
  bootstrap_max_error_events_per_page: 4,
41
46
  bootstrap_max_profiles: 10
@@ -76,6 +81,7 @@ var runtime_policy_generated_default = {
76
81
  debug_log_throttle_ms: 1e3,
77
82
  initial_history_stall_ms: 15e3,
78
83
  initial_history_recovery_cooldown_ms: 3e4,
84
+ initial_history_min_bars: 10,
79
85
  viewport_restore_settle_ms: 100,
80
86
  symbol_price_wait_ms: 2e3,
81
87
  layout_auto_save_delay_ms: 250
@@ -355,6 +361,7 @@ var runtime_policy_generated_default = {
355
361
  display_batch_size: 50,
356
362
  load_more_threshold_px: 100,
357
363
  trade_history_fetch_page_size: 100,
364
+ exchange_key_read_days: 6,
358
365
  ai_panel_interaction_window_ms: 2500,
359
366
  ai_panel_defer_max_staleness_ms: 1e4,
360
367
  ai_panel_defer_retry_ms: 1500,
@@ -800,6 +807,7 @@ var runtime_policy_generated_default = {
800
807
  device_rounds_per_sweep: 4
801
808
  },
802
809
  panel_reads: {
810
+ exchange_key_refresh_seconds: 15,
803
811
  device_open_orders_reuse_seconds: 2,
804
812
  all_view_profile_concurrency: 2,
805
813
  display_account_fresh_seconds: 60
@@ -911,6 +919,11 @@ var runtime_policy_generated_default = {
911
919
  },
912
920
  defaults: {
913
921
  server_ai_max_slippage: 5
922
+ },
923
+ server_runtime_host: {
924
+ server_executors: {
925
+ idle_seconds: 3600
926
+ }
914
927
  }
915
928
  },
916
929
  agent_cli: {
@@ -942,6 +955,181 @@ var runtime_policy_generated_default = {
942
955
  device_portfolio: {
943
956
  device_retry_seconds: 300
944
957
  },
958
+ lighter: {
959
+ flow_kinds: [
960
+ "deposit",
961
+ "withdraw",
962
+ "L2TransferInflow",
963
+ "L2TransferOutflow",
964
+ "L2SelfTransfer",
965
+ "L2MintSharesOutflow",
966
+ "L2BurnSharesInflow",
967
+ "L2ForceBurnSharesInflow",
968
+ "L1BurnSharesInflow",
969
+ "L2CreatePublicPoolOutflow"
970
+ ],
971
+ max_transfers: 100,
972
+ device_retry_seconds: 300,
973
+ device_batches_per_read: 10
974
+ },
975
+ okx: {
976
+ flow_bill_types: [
977
+ "1"
978
+ ],
979
+ max_transfers: 100,
980
+ device_retry_seconds: 300,
981
+ device_batches_per_read: 10
982
+ },
983
+ binance: {
984
+ flow_income_types: [
985
+ "TRANSFER",
986
+ "INTERNAL_TRANSFER",
987
+ "STRATEGY_UMFUTURES_TRANSFER",
988
+ "CROSS_COLLATERAL_TRANSFER",
989
+ "COIN_SWAP_DEPOSIT",
990
+ "COIN_SWAP_WITHDRAW",
991
+ "AUTO_EXCHANGE"
992
+ ],
993
+ funding_income_types: [
994
+ "FUNDING_FEE"
995
+ ],
996
+ trade_income_types: [
997
+ "REALIZED_PNL",
998
+ "COMMISSION"
999
+ ],
1000
+ max_transfers: 1e3,
1001
+ device_retry_seconds: 300,
1002
+ device_batches_per_read: 10
1003
+ },
1004
+ bitget: {
1005
+ flow_business_types: [
1006
+ "trans_from_exchange",
1007
+ "trans_to_exchange",
1008
+ "trans_from_contract",
1009
+ "trans_to_contract",
1010
+ "trans_from_otc",
1011
+ "trans_to_otc",
1012
+ "trans_from_cross",
1013
+ "trans_to_cross",
1014
+ "trans_from_isolated",
1015
+ "trans_to_isolated"
1016
+ ],
1017
+ max_transfers: 1e3,
1018
+ device_retry_seconds: 300,
1019
+ device_batches_per_read: 10
1020
+ },
1021
+ mexc: {
1022
+ flow_transfer_types: [
1023
+ "IN",
1024
+ "OUT"
1025
+ ],
1026
+ max_transfers: 100,
1027
+ device_retry_seconds: 300,
1028
+ device_batches_per_read: 10
1029
+ },
1030
+ coinbase_intl: {
1031
+ flow_log_types: [
1032
+ "deposit",
1033
+ "withdrawal",
1034
+ "transfer",
1035
+ "swap"
1036
+ ],
1037
+ max_transfers: 1e3,
1038
+ device_retry_seconds: 300,
1039
+ device_batches_per_read: 10
1040
+ },
1041
+ kraken_futures: {
1042
+ flow_infos: [
1043
+ "deposit",
1044
+ "withdrawal",
1045
+ "transfer",
1046
+ "cross-exchange transfer",
1047
+ "cross-exchange transfer failed",
1048
+ "subaccount transfer",
1049
+ "admin transfer"
1050
+ ],
1051
+ flow_assets: [
1052
+ "USD",
1053
+ "USDC",
1054
+ "USDT"
1055
+ ],
1056
+ max_transfers: 1e3,
1057
+ device_retry_seconds: 300,
1058
+ device_batches_per_read: 10
1059
+ },
1060
+ aster: {
1061
+ flow_income_types: [
1062
+ "TRANSFER",
1063
+ "INTERNAL_TRANSFER",
1064
+ "CROSS_COLLATERAL_TRANSFER",
1065
+ "AUTO_EXCHANGE"
1066
+ ],
1067
+ funding_income_types: [
1068
+ "FUNDING_FEE"
1069
+ ],
1070
+ trade_income_types: [
1071
+ "REALIZED_PNL",
1072
+ "COMMISSION"
1073
+ ],
1074
+ max_transfers: 1e3,
1075
+ device_retry_seconds: 300,
1076
+ device_batches_per_read: 10
1077
+ },
1078
+ kucoin_futures: {
1079
+ flow_ledger_types: [
1080
+ "Deposit",
1081
+ "Withdrawal",
1082
+ "TransferIn",
1083
+ "TransferOut"
1084
+ ],
1085
+ max_transfers: 1e3,
1086
+ device_retry_seconds: 300,
1087
+ device_batches_per_read: 10
1088
+ },
1089
+ bybit: {
1090
+ flow_transaction_types: [
1091
+ "TRANSFER_IN",
1092
+ "TRANSFER_OUT",
1093
+ "BONUS_TRANSFER_IN",
1094
+ "BONUS_TRANSFER_OUT",
1095
+ "PEF_TRANSFER_IN",
1096
+ "PEF_TRANSFER_OUT",
1097
+ "FLEXIBLE_STAKING_SUBSCRIPTION",
1098
+ "FLEXIBLE_STAKING_REDEMPTION",
1099
+ "FLEXIBLE_STAKING_REFUND",
1100
+ "FIXED_STAKING_SUBSCRIPTION",
1101
+ "FIXED_STAKING_REFUND",
1102
+ "FIXED_SAVING_PRINCIPAL_REDEMPTION",
1103
+ "ONCHAINEARN_SUBSCRIPTION",
1104
+ "ONCHAINEARN_REDEMPTION",
1105
+ "ONCHAINEARN_REFUND",
1106
+ "STRUCTURE_PRODUCT_SUBSCRIPTION",
1107
+ "STRUCTURE_PRODUCT_REFUND",
1108
+ "CLASSIC_WEALTH_MANAGEMENT_SUBSCRIPTION",
1109
+ "PREMIMUM_WEALTH_MANAGEMENT_SUBSCRIPTION",
1110
+ "PREMIMUM_WEALTH_MANAGEMENT_REFUND",
1111
+ "LIQUIDITY_MINING_SUBSCRIPTION",
1112
+ "LIQUIDITY_MINING_REFUND",
1113
+ "PWM_SUBSCRIPTION",
1114
+ "PWM_REFUND",
1115
+ "BYUSDT_MINT",
1116
+ "BYUSDT_REDEMPTION",
1117
+ "STOCK_TRADE_BUY",
1118
+ "STOCK_TRADE_SELL",
1119
+ "STOCK_TRADE_REFUND"
1120
+ ],
1121
+ max_transfers: 50,
1122
+ device_retry_seconds: 300,
1123
+ device_batches_per_read: 10
1124
+ },
1125
+ bingx: {
1126
+ flow_income_types: [
1127
+ "TRANSFER"
1128
+ ],
1129
+ max_transfers: 1e3,
1130
+ device_retry_seconds: 300,
1131
+ device_batches_per_read: 10
1132
+ },
945
1133
  max_page_size: 100
946
1134
  },
947
1135
  external_inference: {
@@ -1266,6 +1454,23 @@ var runtime_policy_generated_default = {
1266
1454
  background: 6
1267
1455
  },
1268
1456
  display_name: "Hyperliquid",
1457
+ short_code: "HYP",
1458
+ candle_timeframes: [
1459
+ "1m",
1460
+ "5m",
1461
+ "15m",
1462
+ "30m",
1463
+ "1h",
1464
+ "4h",
1465
+ "1d",
1466
+ "1w"
1467
+ ],
1468
+ client_surfaces: [
1469
+ "browser",
1470
+ "desktop",
1471
+ "android",
1472
+ "agent_token"
1473
+ ],
1269
1474
  account_stream_backoff: {
1270
1475
  initial_seconds: 1,
1271
1476
  max_seconds: 15,
@@ -1275,7 +1480,8 @@ var runtime_policy_generated_default = {
1275
1480
  },
1276
1481
  websocket: {
1277
1482
  ping_interval_seconds: 20,
1278
- account_open_timeout_seconds: 10
1483
+ account_open_timeout_seconds: 10,
1484
+ ticker_cache_ttl_seconds: 60
1279
1485
  },
1280
1486
  node: {
1281
1487
  max_info_lag_milliseconds: 1e3
@@ -1284,6 +1490,29 @@ var runtime_policy_generated_default = {
1284
1490
  default_dex_label: "Hyperliquid"
1285
1491
  }
1286
1492
  },
1493
+ fleet_recovery: {
1494
+ permit_lease_seconds: 8,
1495
+ recovery_initial_concurrency: 1,
1496
+ recovery_max_concurrency: 8,
1497
+ recovery_successes_per_step: 4,
1498
+ recovery_min_spacing_ms: 100,
1499
+ queue_poll_ms: 50,
1500
+ fallback_max_seconds: 300,
1501
+ fallback_jitter_min_factor: 0.5,
1502
+ recovery_quiet_seconds: 300,
1503
+ failed_probe_delay_seconds: 2,
1504
+ hit_claim_milliseconds: 2e3
1505
+ },
1506
+ account_rules: {
1507
+ usd_stable_assets: [
1508
+ "USD",
1509
+ "USDC",
1510
+ "USDT",
1511
+ "USDT0",
1512
+ "USDH",
1513
+ "USDe"
1514
+ ]
1515
+ },
1287
1516
  executor: {
1288
1517
  capabilities: [
1289
1518
  "market_orders",
@@ -1297,8 +1526,605 @@ var runtime_policy_generated_default = {
1297
1526
  "trailing_stops"
1298
1527
  ]
1299
1528
  },
1529
+ bound_accounts: {
1530
+ recheck_seconds: 900
1531
+ },
1532
+ observability: {
1533
+ operations: [
1534
+ "order",
1535
+ "cancel",
1536
+ "modify",
1537
+ "leverage",
1538
+ "close",
1539
+ "account_read",
1540
+ "positions_read",
1541
+ "orders_read",
1542
+ "fills_read",
1543
+ "market_read",
1544
+ "candles_read",
1545
+ "key_check",
1546
+ "stream"
1547
+ ],
1548
+ heartbeat_max_entries: 24,
1549
+ endpoint_max_length: 96,
1550
+ error_code_max_length: 32,
1551
+ error_name_max_length: 64,
1552
+ detail_max_entries: 8
1553
+ },
1554
+ lighter: {
1555
+ account_display_fresh_seconds: 120,
1556
+ display_name: "Lighter",
1557
+ key_name: "key",
1558
+ short_code: "LIG",
1559
+ candle_timeframes: [
1560
+ "1m",
1561
+ "5m",
1562
+ "15m",
1563
+ "30m",
1564
+ "1h",
1565
+ "4h",
1566
+ "1d"
1567
+ ],
1568
+ client_surfaces: [
1569
+ "browser",
1570
+ "desktop",
1571
+ "android",
1572
+ "agent_token"
1573
+ ],
1574
+ collateral_asset: "USDC",
1575
+ markets_cache_seconds: 3600,
1576
+ order_expiry_days: 28,
1577
+ order_renew_days_before_expiry: 7,
1578
+ remembered_order_ids: 5e3,
1579
+ ended_order_search_retry_seconds: 300,
1580
+ tx_readback_attempts: 10,
1581
+ tx_readback_interval_milliseconds: 300,
1582
+ auth_token_renew_margin_seconds: 300,
1583
+ fill_lookback_hours: 72,
1584
+ client_request_capacity: {
1585
+ reserve_margin_requests: 6,
1586
+ demand_bucket_seconds: 60,
1587
+ demand_horizon_seconds: 3600,
1588
+ capacity_cut_percent: 70,
1589
+ capacity_min_requests: 6,
1590
+ capacity_recovery_requests_per_minute: 6,
1591
+ rate_limit_pause_seconds: 60,
1592
+ admission_wait_seconds: 10,
1593
+ background_admission_wait_seconds: 90,
1594
+ fleet_reserve_weight: {
1595
+ trading_reduce: 1,
1596
+ trading_reconcile: 2,
1597
+ trading_execute: 3,
1598
+ trading_analysis: 5,
1599
+ ui: 15,
1600
+ background: 20
1601
+ }
1602
+ }
1603
+ },
1604
+ binance: {
1605
+ account_display_fresh_seconds: 30,
1606
+ display_name: "Binance",
1607
+ key_name: "API key",
1608
+ short_code: "BIN",
1609
+ candle_timeframes: [
1610
+ "1m",
1611
+ "5m",
1612
+ "15m",
1613
+ "30m",
1614
+ "1h",
1615
+ "4h",
1616
+ "1d",
1617
+ "1w"
1618
+ ],
1619
+ quote_asset: "USDT",
1620
+ markets_cache_seconds: 3600,
1621
+ recv_window_milliseconds: 5e3,
1622
+ fill_lookback_days: 7,
1623
+ client_request_capacity: {
1624
+ reserve_margin_weight: 100,
1625
+ demand_bucket_seconds: 60,
1626
+ demand_horizon_seconds: 3600,
1627
+ capacity_cut_percent: 70,
1628
+ capacity_min_weight: 480,
1629
+ capacity_recovery_weight_per_minute: 240,
1630
+ rate_limit_pause_seconds: 60,
1631
+ ip_ban_pause_seconds: 120,
1632
+ admission_wait_seconds: 10,
1633
+ background_admission_wait_seconds: 90,
1634
+ fleet_reserve_weight: {
1635
+ trading_reduce: 50,
1636
+ trading_reconcile: 75,
1637
+ trading_execute: 100,
1638
+ trading_analysis: 200,
1639
+ ui: 600,
1640
+ background: 800
1641
+ }
1642
+ },
1643
+ networks: {
1644
+ live: {
1645
+ client_surfaces: [
1646
+ "browser",
1647
+ "desktop",
1648
+ "android",
1649
+ "agent_token"
1650
+ ]
1651
+ },
1652
+ testnet: {
1653
+ client_surfaces: [
1654
+ "desktop",
1655
+ "android",
1656
+ "agent_token"
1657
+ ]
1658
+ }
1659
+ }
1660
+ },
1661
+ mexc: {
1662
+ account_display_fresh_seconds: 30,
1663
+ display_name: "MEXC",
1664
+ key_name: "API key",
1665
+ short_code: "MEX",
1666
+ candle_timeframes: [
1667
+ "1m",
1668
+ "5m",
1669
+ "15m",
1670
+ "30m",
1671
+ "1h",
1672
+ "4h",
1673
+ "1d",
1674
+ "1w"
1675
+ ],
1676
+ quote_asset: "USDT",
1677
+ markets_cache_seconds: 3600,
1678
+ recv_window_seconds: 10,
1679
+ fill_lookback_days: 7,
1680
+ client_surfaces: [
1681
+ "desktop",
1682
+ "android",
1683
+ "agent_token"
1684
+ ],
1685
+ remembered_order_ids: 5e3,
1686
+ ended_order_search_days: 7,
1687
+ ended_order_search_retry_seconds: 300,
1688
+ client_request_capacity: {
1689
+ reserve_margin_weight: 1,
1690
+ demand_bucket_seconds: 60,
1691
+ demand_horizon_seconds: 3600,
1692
+ capacity_cut_percent: 70,
1693
+ capacity_min_weight: 2,
1694
+ capacity_recovery_weight_per_minute: 20,
1695
+ admission_wait_seconds: 10,
1696
+ background_admission_wait_seconds: 30,
1697
+ fleet_reserve_weight: {
1698
+ trading_reduce: 1,
1699
+ trading_reconcile: 1,
1700
+ trading_execute: 1,
1701
+ trading_analysis: 2,
1702
+ ui: 3,
1703
+ background: 4
1704
+ }
1705
+ }
1706
+ },
1707
+ coinbase_intl: {
1708
+ client_request_capacity: {
1709
+ reserve_margin_requests: 2,
1710
+ demand_bucket_seconds: 60,
1711
+ demand_horizon_seconds: 3600,
1712
+ capacity_cut_percent: 70,
1713
+ capacity_min_requests: 2,
1714
+ capacity_recovery_requests_per_minute: 2,
1715
+ admission_wait_seconds: 10,
1716
+ background_admission_wait_seconds: 90,
1717
+ rate_limit_pause_seconds: 5,
1718
+ fleet_reserve_weight: {
1719
+ trading_reduce: 1,
1720
+ trading_reconcile: 1,
1721
+ trading_execute: 2,
1722
+ trading_analysis: 2,
1723
+ ui: 5,
1724
+ background: 6
1725
+ }
1726
+ },
1727
+ account_display_fresh_seconds: 30,
1728
+ quote_asset: "USDC",
1729
+ default_chart_market: "BTC_USDC-PERPETUAL",
1730
+ display_name: "Coinbase International",
1731
+ key_name: "API key name",
1732
+ short_code: "CBI",
1733
+ candle_timeframes: [
1734
+ "1m",
1735
+ "5m",
1736
+ "15m",
1737
+ "30m",
1738
+ "1h",
1739
+ "1d"
1740
+ ],
1741
+ client_surfaces: [
1742
+ "desktop",
1743
+ "android",
1744
+ "agent_token"
1745
+ ],
1746
+ request_timeout_seconds: 10,
1747
+ auth_renew_before_seconds: 60,
1748
+ auth_max_age_seconds: 900,
1749
+ write_window_seconds: 10,
1750
+ server_time_max_age_seconds: 300,
1751
+ markets_cache_seconds: 3600,
1752
+ fill_lookback_days: 7,
1753
+ fill_page_size: 1e3,
1754
+ remembered_order_ids: 5e3,
1755
+ ended_order_search_days: 7,
1756
+ ended_order_search_retry_seconds: 300
1757
+ },
1758
+ okx: {
1759
+ account_display_fresh_seconds: 30,
1760
+ display_name: "OKX",
1761
+ key_name: "API key",
1762
+ short_code: "OKX",
1763
+ candle_timeframes: [
1764
+ "1m",
1765
+ "5m",
1766
+ "15m",
1767
+ "30m",
1768
+ "1h",
1769
+ "4h",
1770
+ "1d",
1771
+ "1w"
1772
+ ],
1773
+ settle_currency: "USDT",
1774
+ markets_cache_seconds: 3600,
1775
+ markets_miss_reread_seconds: 60,
1776
+ order_lifetime_milliseconds: 5e3,
1777
+ order_readback_attempts: 5,
1778
+ order_readback_interval_milliseconds: 200,
1779
+ remembered_order_ids: 5e3,
1780
+ ended_order_search_days: 7,
1781
+ ended_order_search_retry_seconds: 300,
1782
+ fill_lookback_hours: 71,
1783
+ client_request_capacity: {
1784
+ fleet_reserve_weight: {
1785
+ trading_reduce: 1,
1786
+ trading_reconcile: 1,
1787
+ trading_execute: 1,
1788
+ trading_analysis: 2,
1789
+ ui: 3,
1790
+ background: 5
1791
+ },
1792
+ reserve_margin_requests: 1,
1793
+ demand_bucket_seconds: 60,
1794
+ demand_horizon_seconds: 3600,
1795
+ capacity_cut_percent: 70,
1796
+ capacity_min_requests: 2,
1797
+ capacity_recovery_requests_per_minute: 2,
1798
+ admission_wait_seconds: 10,
1799
+ background_admission_wait_seconds: 90
1800
+ },
1801
+ networks: {
1802
+ live: {
1803
+ client_surfaces: [
1804
+ "browser",
1805
+ "desktop",
1806
+ "android",
1807
+ "agent_token"
1808
+ ]
1809
+ },
1810
+ demo: {
1811
+ client_surfaces: [
1812
+ "browser",
1813
+ "desktop",
1814
+ "android",
1815
+ "agent_token"
1816
+ ]
1817
+ }
1818
+ }
1819
+ },
1820
+ bingx: {
1821
+ account_display_fresh_seconds: 30,
1822
+ display_name: "BingX",
1823
+ key_name: "API key",
1824
+ short_code: "BGX",
1825
+ candle_timeframes: [
1826
+ "1m",
1827
+ "5m",
1828
+ "15m",
1829
+ "30m",
1830
+ "1h",
1831
+ "4h",
1832
+ "1d",
1833
+ "1w"
1834
+ ],
1835
+ quote_asset: "USDT",
1836
+ markets_cache_seconds: 3600,
1837
+ recv_window_milliseconds: 5e3,
1838
+ fill_lookback_days: 7,
1839
+ client_request_capacity: {
1840
+ reserve_margin_requests: 50,
1841
+ demand_bucket_seconds: 60,
1842
+ demand_horizon_seconds: 3600,
1843
+ capacity_cut_percent: 70,
1844
+ capacity_min_requests: 100,
1845
+ capacity_recovery_requests_per_minute: 50,
1846
+ rate_limit_pause_seconds: 10,
1847
+ ip_ban_pause_seconds: 120,
1848
+ admission_wait_seconds: 10,
1849
+ background_admission_wait_seconds: 90,
1850
+ fleet_reserve_weight: {
1851
+ trading_reduce: 10,
1852
+ trading_reconcile: 15,
1853
+ trading_execute: 20,
1854
+ trading_analysis: 40,
1855
+ ui: 100,
1856
+ background: 125
1857
+ }
1858
+ },
1859
+ networks: {
1860
+ live: {
1861
+ client_surfaces: [
1862
+ "desktop",
1863
+ "android",
1864
+ "agent_token"
1865
+ ]
1866
+ },
1867
+ vst: {
1868
+ client_surfaces: [
1869
+ "desktop",
1870
+ "android",
1871
+ "agent_token"
1872
+ ]
1873
+ }
1874
+ }
1875
+ },
1876
+ bitget: {
1877
+ account_display_fresh_seconds: 30,
1878
+ display_name: "Bitget",
1879
+ key_name: "API key",
1880
+ short_code: "BIT",
1881
+ candle_timeframes: [
1882
+ "1m",
1883
+ "5m",
1884
+ "15m",
1885
+ "30m",
1886
+ "1h",
1887
+ "4h",
1888
+ "1d",
1889
+ "1w"
1890
+ ],
1891
+ product_type: "USDT-FUTURES",
1892
+ quote_asset: "USDT",
1893
+ markets_cache_seconds: 3600,
1894
+ fill_lookback_days: 7,
1895
+ remembered_order_ids: 5e3,
1896
+ ended_order_search_days: 7,
1897
+ ended_order_search_retry_seconds: 300,
1898
+ old_open_order_search_seconds: 3600,
1899
+ client_request_capacity: {
1900
+ reserve_margin_weight: 2,
1901
+ demand_bucket_seconds: 60,
1902
+ demand_horizon_seconds: 3600,
1903
+ capacity_cut_percent: 70,
1904
+ capacity_min_weight: 4,
1905
+ capacity_recovery_weight_per_minute: 60,
1906
+ admission_wait_seconds: 10,
1907
+ background_admission_wait_seconds: 90,
1908
+ fleet_reserve_weight: {
1909
+ trading_reduce: 1,
1910
+ trading_reconcile: 1,
1911
+ trading_execute: 2,
1912
+ trading_analysis: 2,
1913
+ ui: 5,
1914
+ background: 6
1915
+ }
1916
+ },
1917
+ networks: {
1918
+ live: {
1919
+ client_surfaces: [
1920
+ "desktop",
1921
+ "android",
1922
+ "agent_token"
1923
+ ]
1924
+ },
1925
+ demo: {
1926
+ client_surfaces: [
1927
+ "desktop",
1928
+ "android",
1929
+ "agent_token"
1930
+ ]
1931
+ }
1932
+ }
1933
+ },
1934
+ kraken_futures: {
1935
+ account_display_fresh_seconds: 30,
1936
+ display_name: "Kraken Futures",
1937
+ key_name: "API key",
1938
+ short_code: "KRA",
1939
+ candle_timeframes: [
1940
+ "1m",
1941
+ "5m",
1942
+ "15m",
1943
+ "30m",
1944
+ "1h",
1945
+ "4h",
1946
+ "1d",
1947
+ "1w"
1948
+ ],
1949
+ client_surfaces: [
1950
+ "desktop",
1951
+ "android",
1952
+ "agent_token"
1953
+ ],
1954
+ markets_cache_seconds: 3600,
1955
+ fill_lookback_days: 7,
1956
+ history_pages_per_read: 10,
1957
+ funding_log_page_entries: 1e3,
1958
+ request_capacity: {
1959
+ reserve_margin_weight: 100,
1960
+ demand_bucket_seconds: 60,
1961
+ demand_horizon_seconds: 3600,
1962
+ capacity_cut_percent: 70,
1963
+ capacity_min_weight: 100,
1964
+ capacity_recovery_weight_per_minute: 50,
1965
+ derivatives_limit_pause_seconds: 10,
1966
+ history_limit_pause_seconds: 60,
1967
+ admission_wait_seconds: 5,
1968
+ background_admission_wait_seconds: 30
1969
+ }
1970
+ },
1971
+ aster: {
1972
+ account_display_fresh_seconds: 30,
1973
+ quote_asset: "USDT",
1974
+ display_name: "Aster",
1975
+ key_name: "API wallet",
1976
+ short_code: "AST",
1977
+ candle_timeframes: [
1978
+ "1m",
1979
+ "5m",
1980
+ "15m",
1981
+ "30m",
1982
+ "1h",
1983
+ "4h",
1984
+ "1d",
1985
+ "1w"
1986
+ ],
1987
+ client_surfaces: [
1988
+ "browser",
1989
+ "desktop",
1990
+ "android",
1991
+ "agent_token"
1992
+ ],
1993
+ markets_cache_seconds: 3600,
1994
+ fill_lookback_days: 7,
1995
+ client_request_capacity: {
1996
+ reserve_margin_weight: 100,
1997
+ demand_bucket_seconds: 60,
1998
+ demand_horizon_seconds: 3600,
1999
+ capacity_cut_percent: 70,
2000
+ capacity_min_weight: 480,
2001
+ capacity_recovery_weight_per_minute: 240,
2002
+ rate_limit_pause_seconds: 60,
2003
+ ip_ban_pause_seconds: 120,
2004
+ admission_wait_seconds: 10,
2005
+ background_admission_wait_seconds: 90,
2006
+ fleet_reserve_weight: {
2007
+ trading_reduce: 50,
2008
+ trading_reconcile: 75,
2009
+ trading_execute: 100,
2010
+ trading_analysis: 200,
2011
+ ui: 600,
2012
+ background: 800
2013
+ }
2014
+ }
2015
+ },
2016
+ kucoin_futures: {
2017
+ account_display_fresh_seconds: 30,
2018
+ display_name: "KuCoin Futures",
2019
+ key_name: "API key",
2020
+ short_code: "KUC",
2021
+ candle_timeframes: [
2022
+ "1m",
2023
+ "5m",
2024
+ "15m",
2025
+ "30m",
2026
+ "1h",
2027
+ "4h",
2028
+ "1d",
2029
+ "1w"
2030
+ ],
2031
+ client_surfaces: [
2032
+ "desktop",
2033
+ "android",
2034
+ "agent_token"
2035
+ ],
2036
+ settle_currency: "USDT",
2037
+ markets_cache_seconds: 3600,
2038
+ remembered_order_ids: 5e3,
2039
+ ended_order_search_days: 7,
2040
+ ended_order_search_retry_seconds: 300,
2041
+ client_request_capacity: {
2042
+ reserve_margin_weight: 100,
2043
+ demand_bucket_seconds: 60,
2044
+ demand_horizon_seconds: 3600,
2045
+ capacity_cut_percent: 70,
2046
+ capacity_min_weight: 200,
2047
+ capacity_recovery_weight_per_minute: 100,
2048
+ admission_wait_seconds: 10,
2049
+ background_admission_wait_seconds: 60,
2050
+ fleet_reserve_weight: {
2051
+ trading_reduce: 50,
2052
+ trading_reconcile: 75,
2053
+ trading_execute: 100,
2054
+ trading_analysis: 200,
2055
+ ui: 500,
2056
+ background: 700
2057
+ }
2058
+ }
2059
+ },
2060
+ bybit: {
2061
+ client_request_capacity: {
2062
+ reserve_margin_weight: 60,
2063
+ demand_bucket_seconds: 60,
2064
+ demand_horizon_seconds: 3600,
2065
+ capacity_cut_percent: 70,
2066
+ capacity_min_weight: 60,
2067
+ capacity_recovery_weight_per_minute: 60,
2068
+ admission_wait_seconds: 10,
2069
+ background_admission_wait_seconds: 60,
2070
+ fleet_reserve_weight: {
2071
+ trading_reduce: 15,
2072
+ trading_reconcile: 20,
2073
+ trading_execute: 25,
2074
+ trading_analysis: 50,
2075
+ ui: 150,
2076
+ background: 200
2077
+ }
2078
+ },
2079
+ display_name: "Bybit",
2080
+ key_name: "API key",
2081
+ short_code: "BYB",
2082
+ candle_timeframes: [
2083
+ "1m",
2084
+ "5m",
2085
+ "15m",
2086
+ "30m",
2087
+ "1h",
2088
+ "4h",
2089
+ "1d",
2090
+ "1w"
2091
+ ],
2092
+ client_surfaces: [
2093
+ "browser",
2094
+ "desktop",
2095
+ "android",
2096
+ "agent_token"
2097
+ ],
2098
+ settle_coin: "USDT",
2099
+ account_display_fresh_seconds: 30,
2100
+ markets_cache_seconds: 3600,
2101
+ recv_window_milliseconds: 5e3,
2102
+ order_readback_attempts: 5,
2103
+ order_readback_interval_milliseconds: 200,
2104
+ remembered_order_ids: 5e3,
2105
+ ended_order_search_days: 7,
2106
+ ended_order_search_retry_seconds: 300,
2107
+ fill_lookback_hours: 167
2108
+ },
1300
2109
  mt5: {
1301
2110
  display_name: "MetaTrader 5",
2111
+ short_code: "MT5",
2112
+ candle_timeframes: [
2113
+ "1m",
2114
+ "5m",
2115
+ "15m",
2116
+ "30m",
2117
+ "1h",
2118
+ "4h",
2119
+ "1d",
2120
+ "1w"
2121
+ ],
2122
+ client_surfaces: [
2123
+ "browser",
2124
+ "desktop",
2125
+ "android",
2126
+ "agent_token"
2127
+ ],
1302
2128
  bridge_download_path: "/downloads/mt5/VtxBridge.ex5",
1303
2129
  trading_enabled: true,
1304
2130
  status_poll_seconds: 5,
@@ -1307,8 +2133,7 @@ var runtime_policy_generated_default = {
1307
2133
  request_timeout_seconds: 15,
1308
2134
  write_expires_after_seconds: 60,
1309
2135
  deal_lookback_days: 7,
1310
- deal_clock_allowance_seconds: 60,
1311
- stop_distance_margin: 0.5
2136
+ deal_clock_allowance_seconds: 60
1312
2137
  },
1313
2138
  cache: {
1314
2139
  available_assets_ttl_seconds: 300,
@@ -1323,6 +2148,12 @@ var runtime_policy_generated_default = {
1323
2148
  range_page_limit: 500
1324
2149
  }
1325
2150
  },
2151
+ observability: {
2152
+ hyperliquid_rollup: {
2153
+ enabled: true,
2154
+ exchange_latency_samples_per_minute: 200
2155
+ }
2156
+ },
1326
2157
  external_news: {
1327
2158
  benzinga: {
1328
2159
  enabled: false
@@ -1559,6 +2390,282 @@ var HYPERLIQUID_CANDLE_SNAPSHOT_CHARGE = {
1559
2390
  "rows_per_extra_weight": 60,
1560
2391
  "max_rows": 5e3
1561
2392
  };
2393
+ var BINANCE_REQUEST_CONTRACT = {
2394
+ "weight_interval": "1m",
2395
+ "apis": {
2396
+ "futures": {
2397
+ "weight_window_seconds": 60,
2398
+ "weight_per_window": 2400,
2399
+ "orders": [
2400
+ {
2401
+ "interval": "10s",
2402
+ "window_seconds": 10,
2403
+ "limit": 300
2404
+ },
2405
+ {
2406
+ "interval": "1m",
2407
+ "window_seconds": 60,
2408
+ "limit": 1200
2409
+ }
2410
+ ]
2411
+ },
2412
+ "spot": {
2413
+ "weight_window_seconds": 60,
2414
+ "weight_per_window": 6e3,
2415
+ "orders": []
2416
+ }
2417
+ },
2418
+ "klines": {
2419
+ "default_limit": 500,
2420
+ "limit_max": 1500,
2421
+ "weight_tiers": [
2422
+ {
2423
+ "max_limit": 99,
2424
+ "weight": 1
2425
+ },
2426
+ {
2427
+ "max_limit": 499,
2428
+ "weight": 2
2429
+ },
2430
+ {
2431
+ "max_limit": 1e3,
2432
+ "weight": 5
2433
+ },
2434
+ {
2435
+ "max_limit": 1500,
2436
+ "weight": 10
2437
+ }
2438
+ ]
2439
+ },
2440
+ "costs": {
2441
+ "futures": {
2442
+ "GET /fapi/v1/time": {
2443
+ "weight": 1
2444
+ },
2445
+ "GET /fapi/v1/exchangeInfo": {
2446
+ "weight": 1
2447
+ },
2448
+ "GET /fapi/v1/premiumIndex": {
2449
+ "weight": 1,
2450
+ "weight_all_symbols": 10
2451
+ },
2452
+ "GET /fapi/v2/ticker/price": {
2453
+ "weight": 1,
2454
+ "weight_all_symbols": 2,
2455
+ "used_weight_header_unreliable": true
2456
+ },
2457
+ "GET /fapi/v1/klines": {
2458
+ "weight_by_klines_limit": true
2459
+ },
2460
+ "GET /fapi/v1/accountConfig": {
2461
+ "weight": 5
2462
+ },
2463
+ "GET /fapi/v1/symbolConfig": {
2464
+ "weight": 5
2465
+ },
2466
+ "GET /fapi/v1/positionSide/dual": {
2467
+ "weight": 30
2468
+ },
2469
+ "GET /fapi/v1/multiAssetsMargin": {
2470
+ "weight": 30
2471
+ },
2472
+ "GET /fapi/v3/account": {
2473
+ "weight": 5
2474
+ },
2475
+ "GET /fapi/v3/balance": {
2476
+ "weight": 5
2477
+ },
2478
+ "GET /fapi/v3/positionRisk": {
2479
+ "weight": 5
2480
+ },
2481
+ "GET /fapi/v1/openOrders": {
2482
+ "weight": 1,
2483
+ "weight_all_symbols": 40
2484
+ },
2485
+ "GET /fapi/v1/order": {
2486
+ "weight": 1
2487
+ },
2488
+ "GET /fapi/v1/openAlgoOrders": {
2489
+ "weight": 1,
2490
+ "weight_all_symbols": 40
2491
+ },
2492
+ "GET /fapi/v1/algoOrder": {
2493
+ "weight": 1
2494
+ },
2495
+ "GET /fapi/v1/userTrades": {
2496
+ "weight": 5
2497
+ },
2498
+ "GET /fapi/v1/allOrders": {
2499
+ "weight": 5
2500
+ },
2501
+ "GET /fapi/v1/income": {
2502
+ "weight": 30
2503
+ },
2504
+ "GET /fapi/v1/leverageBracket": {
2505
+ "weight": 1
2506
+ },
2507
+ "GET /fapi/v1/commissionRate": {
2508
+ "weight": 20
2509
+ },
2510
+ "POST /fapi/v1/order": {
2511
+ "weight": 0,
2512
+ "orders": {
2513
+ "10s": 1,
2514
+ "1m": 1
2515
+ }
2516
+ },
2517
+ "PUT /fapi/v1/order": {
2518
+ "weight": 0,
2519
+ "orders": {
2520
+ "10s": 1,
2521
+ "1m": 1
2522
+ }
2523
+ },
2524
+ "POST /fapi/v1/batchOrders": {
2525
+ "weight": 5,
2526
+ "orders": {
2527
+ "10s": 5,
2528
+ "1m": 1
2529
+ }
2530
+ },
2531
+ "PUT /fapi/v1/batchOrders": {
2532
+ "weight": 5,
2533
+ "orders": {
2534
+ "10s": 5,
2535
+ "1m": 1
2536
+ }
2537
+ },
2538
+ "POST /fapi/v1/algoOrder": {
2539
+ "weight": 0,
2540
+ "orders": {
2541
+ "10s": 1,
2542
+ "1m": 1
2543
+ }
2544
+ },
2545
+ "DELETE /fapi/v1/order": {
2546
+ "weight": 1
2547
+ },
2548
+ "DELETE /fapi/v1/batchOrders": {
2549
+ "weight": 1
2550
+ },
2551
+ "DELETE /fapi/v1/allOpenOrders": {
2552
+ "weight": 1
2553
+ },
2554
+ "DELETE /fapi/v1/algoOrder": {
2555
+ "weight": 1
2556
+ },
2557
+ "DELETE /fapi/v1/algoOpenOrders": {
2558
+ "weight": 1
2559
+ },
2560
+ "POST /fapi/v1/leverage": {
2561
+ "weight": 1
2562
+ },
2563
+ "POST /fapi/v1/marginType": {
2564
+ "weight": 1
2565
+ },
2566
+ "POST /fapi/v1/positionSide/dual": {
2567
+ "weight": 1
2568
+ },
2569
+ "POST /fapi/v1/multiAssetsMargin": {
2570
+ "weight": 1
2571
+ }
2572
+ },
2573
+ "spot": {
2574
+ "GET /api/v3/time": {
2575
+ "weight": 1
2576
+ },
2577
+ "GET /api/v3/account": {
2578
+ "weight": 20
2579
+ },
2580
+ "GET /sapi/v1/account/apiRestrictions": {
2581
+ "weight": 1
2582
+ }
2583
+ }
2584
+ }
2585
+ };
2586
+ var BINANCE_ERROR_CODES = {
2587
+ "codes": {
2588
+ "UNKNOWN": -1e3,
2589
+ "DISCONNECTED": -1001,
2590
+ "UNAUTHORIZED": -1002,
2591
+ "TOO_MANY_REQUESTS": -1003,
2592
+ "UNEXPECTED_RESPONSE": -1006,
2593
+ "TIMEOUT": -1007,
2594
+ "REQUEST_THROTTLED": -1008,
2595
+ "INVALID_MESSAGE": -1013,
2596
+ "TOO_MANY_ORDERS": -1015,
2597
+ "SERVICE_SHUTTING_DOWN": -1016,
2598
+ "INVALID_TIMESTAMP": -1021,
2599
+ "INVALID_SIGNATURE": -1022,
2600
+ "MANDATORY_PARAM_EMPTY_OR_MALFORMED": -1102,
2601
+ "BAD_PRECISION": -1111,
2602
+ "INVALID_ORDER_TYPE": -1116,
2603
+ "BAD_SYMBOL": -1121,
2604
+ "INVALID_PARAMETER": -1130,
2605
+ "NEW_ORDER_REJECTED": -2010,
2606
+ "CANCEL_REJECTED": -2011,
2607
+ "NO_SUCH_ORDER": -2013,
2608
+ "BAD_API_KEY_FORMAT": -2014,
2609
+ "REJECTED_API_KEY": -2015,
2610
+ "BALANCE_NOT_SUFFICIENT": -2018,
2611
+ "MARGIN_NOT_SUFFICIENT": -2019,
2612
+ "UNABLE_TO_FILL": -2020,
2613
+ "ORDER_WOULD_IMMEDIATELY_TRIGGER": -2021,
2614
+ "REDUCE_ONLY_REJECT": -2022,
2615
+ "POSITION_NOT_SUFFICIENT": -2024,
2616
+ "MAX_OPEN_ORDER_EXCEEDED": -2025,
2617
+ "REDUCE_ONLY_ORDER_TYPE_NOT_SUPPORTED": -2026,
2618
+ "MAX_LEVERAGE_RATIO": -2027,
2619
+ "MIN_LEVERAGE_RATIO": -2028,
2620
+ "PRICE_GREATER_THAN_MAX_PRICE": -4002,
2621
+ "QTY_LESS_THAN_ZERO": -4003,
2622
+ "QTY_LESS_THAN_MIN_QTY": -4004,
2623
+ "QTY_GREATER_THAN_MAX_QTY": -4005,
2624
+ "STOP_PRICE_GREATER_THAN_MAX_PRICE": -4007,
2625
+ "PRICE_LESS_THAN_MIN_PRICE": -4013,
2626
+ "PRICE_NOT_INCREASED_BY_TICK_SIZE": -4014,
2627
+ "INVALID_CLIENT_ORDER_ID": -4015,
2628
+ "PRICE_HIGHER_THAN_MULTIPLIER_UP": -4016,
2629
+ "QTY_NOT_INCREASED_BY_STEP_SIZE": -4023,
2630
+ "PRICE_LOWER_THAN_MULTIPLIER_DOWN": -4024,
2631
+ "INVALID_LEVERAGE": -4028,
2632
+ "MAX_STOP_ORDER_EXCEEDED": -4045,
2633
+ "NO_NEED_TO_CHANGE_MARGIN_TYPE": -4046,
2634
+ "MARGIN_TYPE_BLOCKED_BY_OPEN_ORDERS": -4047,
2635
+ "MARGIN_TYPE_BLOCKED_BY_POSITION": -4048,
2636
+ "NO_NEED_TO_CHANGE_POSITION_SIDE": -4059,
2637
+ "POSITION_SIDE_NOT_MATCH": -4061,
2638
+ "REDUCE_ONLY_CONFLICT": -4062,
2639
+ "REDUCE_ONLY_ORDER_PERMISSION": -4087,
2640
+ "SYMBOL_REDUCE_ONLY": -4105,
2641
+ "SYMBOL_REDUCE_ONLY_BUY": -4106,
2642
+ "SYMBOL_REDUCE_ONLY_SELL": -4107,
2643
+ "INACTIVE_ACCOUNT": -4109,
2644
+ "DUPLICATED_CLIENT_ORDER_ID": -4116,
2645
+ "REDUCE_ONLY_MARGIN_CHECK_FAILED": -4118,
2646
+ "STOP_ORDER_SWITCH_ALGO": -4120,
2647
+ "MARKET_ORDER_REJECT": -4131,
2648
+ "QUANTITY_EXISTS_WITH_CLOSE_POSITION": -4137,
2649
+ "REDUCE_ONLY_MUST_BE_TRUE": -4138,
2650
+ "INVALID_OPENING_POSITION_STATUS": -4140,
2651
+ "STRATEGY_INVALID_TRIGGER_PRICE": -4142,
2652
+ "ISOLATED_LEVERAGE_REJECT_WITH_POSITION": -4161,
2653
+ "MIN_NOTIONAL": -4164,
2654
+ "PRICE_HIGHER_THAN_STOP_MULTIPLIER_UP": -4183,
2655
+ "PRICE_LOWER_THAN_STOP_MULTIPLIER_DOWN": -4184,
2656
+ "ACCOUNT_REDUCE_ONLY": -4189,
2657
+ "ADJUST_LEVERAGE_ONE_MONTH_FAILED": -4203,
2658
+ "ADJUST_LEVERAGE_X_DAYS_FAILED": -4205,
2659
+ "ADJUST_LEVERAGE_SYMBOL_FAILED": -4209,
2660
+ "STOP_PRICE_HIGHER_THAN_PRICE_MULTIPLIER_LIMIT": -4210,
2661
+ "STOP_PRICE_LOWER_THAN_PRICE_MULTIPLIER_LIMIT": -4211,
2662
+ "ADJUST_LEVERAGE_COMPLIANCE_FAILED": -4403,
2663
+ "FOK_ORDER_REJECT": -5021,
2664
+ "GTX_ORDER_REJECT": -5022,
2665
+ "ME_RECVWINDOW_REJECT": -5028,
2666
+ "MODIFICATION_MIN_NOTIONAL": -5029
2667
+ }
2668
+ };
1562
2669
 
1563
2670
  // lib/constants.ts
1564
2671
  var MS_PER_SECOND = 1e3;
@@ -1617,6 +2724,37 @@ var AI_SNAPSHOT_PACKED_ENTRY_FIELDS = AI_SNAPSHOT_WIRE_FORMAT.packed_entry_field
1617
2724
  var MT5_SYNTHETIC_LEG_ID_BASE = 2 ** 52;
1618
2725
  var MT5_SYNTHETIC_LEG_KINDS = 2;
1619
2726
  var MT5_SYNTHETIC_LEG_OPENING_LIMIT = (2 ** 53 - MT5_SYNTHETIC_LEG_ID_BASE) / MT5_SYNTHETIC_LEG_KINDS;
2727
+ var BINANCE_USER_TRADES_WINDOW_MS = DAYS_PER_WEEK * MS_PER_DAY;
2728
+ var BINANCE_ALL_ORDERS_WINDOW_MS = DAYS_PER_WEEK * MS_PER_DAY;
2729
+ var BINANCE_REQUESTS = BINANCE_REQUEST_CONTRACT;
2730
+ var BINANCE_KLINES_LIMIT_MAX = BINANCE_REQUESTS.klines.limit_max;
2731
+ var BINANCE_REQUEST_WEIGHT_WINDOW_MS = BINANCE_REQUESTS.apis.futures.weight_window_seconds * MS_PER_SECOND;
2732
+ var BINANCE_REQUEST_WEIGHT_INTERVAL = BINANCE_REQUESTS.weight_interval;
2733
+ var binanceApiLimits = (api) => ({
2734
+ weightPerWindow: api.weight_per_window,
2735
+ orders: api.orders.map((order) => ({ interval: order.interval, windowMs: order.window_seconds * MS_PER_SECOND, limit: order.limit }))
2736
+ });
2737
+ var BINANCE_REQUEST_LIMITS = {
2738
+ futures: binanceApiLimits(BINANCE_REQUESTS.apis.futures),
2739
+ spot: binanceApiLimits(BINANCE_REQUESTS.apis.spot)
2740
+ };
2741
+ var BINANCE_KLINES_DEFAULT_LIMIT = BINANCE_REQUESTS.klines.default_limit;
2742
+ var BINANCE_KLINES_WEIGHT_TIERS = BINANCE_REQUESTS.klines.weight_tiers.map(
2743
+ (tier) => ({ maxLimit: tier.max_limit, weight: tier.weight })
2744
+ );
2745
+ var binanceCostSpec = (cost) => ({
2746
+ ...cost.weight !== void 0 ? { weight: cost.weight } : {},
2747
+ ...cost.weight_all_symbols !== void 0 ? { weightAllSymbols: cost.weight_all_symbols } : {},
2748
+ ...cost.weight_by_klines_limit ? { weightByLimit: BINANCE_KLINES_WEIGHT_TIERS } : {},
2749
+ ...cost.orders ? { orders: cost.orders } : {},
2750
+ ...cost.used_weight_header_unreliable ? { usedWeightHeaderUnreliable: true } : {}
2751
+ });
2752
+ var binanceCosts = (costs) => Object.fromEntries(Object.entries(costs).map(([request, cost]) => [request, binanceCostSpec(cost)]));
2753
+ var BINANCE_REQUEST_COSTS = {
2754
+ futures: binanceCosts(BINANCE_REQUESTS.costs.futures),
2755
+ spot: binanceCosts(BINANCE_REQUESTS.costs.spot)
2756
+ };
2757
+ var BINANCE_ERROR_CODE = BINANCE_ERROR_CODES.codes;
1620
2758
 
1621
2759
  // lib/inference-host/service-launcher.ts
1622
2760
  import { spawn as spawn2 } from "node:child_process";