@reefclaw/connect 0.1.11 → 0.1.12

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.
Files changed (397) hide show
  1. package/assets/bridge/gateway/heartbeat-cron.d.ts +27 -0
  2. package/assets/bridge/gateway/heartbeat-cron.js +85 -0
  3. package/assets/bridge/providers/gateway.d.ts +2 -0
  4. package/assets/bridge/providers/gateway.js +57 -16
  5. package/assets/bridge/setup.js +6 -51
  6. package/dist/deps.js +2 -2
  7. package/dist/plugin.js +35 -7
  8. package/package.json +1 -1
  9. package/assets/plugin/audit/mode-transition-audit.d.ts +0 -11
  10. package/assets/plugin/audit/mode-transition-audit.js +0 -29
  11. package/assets/plugin/balance-utils.d.ts +0 -36
  12. package/assets/plugin/balance-utils.js +0 -98
  13. package/assets/plugin/ccxt/binance-ban-gate.d.ts +0 -47
  14. package/assets/plugin/ccxt/binance-ban-gate.js +0 -420
  15. package/assets/plugin/ccxt/binance-private.d.ts +0 -346
  16. package/assets/plugin/ccxt/binance-private.js +0 -1525
  17. package/assets/plugin/ccxt/binance-public.d.ts +0 -34
  18. package/assets/plugin/ccxt/binance-public.js +0 -180
  19. package/assets/plugin/ccxt/intel-public.d.ts +0 -25
  20. package/assets/plugin/ccxt/intel-public.js +0 -80
  21. package/assets/plugin/ccxt/public-market-data-api.d.ts +0 -26
  22. package/assets/plugin/ccxt/public-market-data-api.js +0 -23
  23. package/assets/plugin/config/agent-config-client.d.ts +0 -77
  24. package/assets/plugin/config/agent-config-client.js +0 -188
  25. package/assets/plugin/config/agent-config-poller.d.ts +0 -32
  26. package/assets/plugin/config/agent-config-poller.js +0 -101
  27. package/assets/plugin/config/brackets-config.d.ts +0 -22
  28. package/assets/plugin/config/brackets-config.js +0 -58
  29. package/assets/plugin/config/entitlement-gate.d.ts +0 -51
  30. package/assets/plugin/config/entitlement-gate.js +0 -137
  31. package/assets/plugin/config/gate-store.d.ts +0 -18
  32. package/assets/plugin/config/gate-store.js +0 -61
  33. package/assets/plugin/config/plugin-config-io.d.ts +0 -222
  34. package/assets/plugin/config/plugin-config-io.js +0 -126
  35. package/assets/plugin/config/position-review-config.d.ts +0 -35
  36. package/assets/plugin/config/position-review-config.js +0 -105
  37. package/assets/plugin/config/tool-gate.d.ts +0 -53
  38. package/assets/plugin/config/tool-gate.js +0 -128
  39. package/assets/plugin/config/user-data-stream-config.d.ts +0 -89
  40. package/assets/plugin/config/user-data-stream-config.js +0 -239
  41. package/assets/plugin/connector-supervisor.d.ts +0 -36
  42. package/assets/plugin/connector-supervisor.js +0 -149
  43. package/assets/plugin/exchange-adapter.d.ts +0 -65
  44. package/assets/plugin/exchange-adapter.js +0 -4
  45. package/assets/plugin/index.d.ts +0 -30
  46. package/assets/plugin/index.js +0 -2756
  47. package/assets/plugin/ingest/pending-entry-metadata.d.ts +0 -74
  48. package/assets/plugin/ingest/pending-entry-metadata.js +0 -236
  49. package/assets/plugin/ingest/position-auto-capture.d.ts +0 -171
  50. package/assets/plugin/ingest/position-auto-capture.js +0 -709
  51. package/assets/plugin/ingest/position-decisions-client.d.ts +0 -327
  52. package/assets/plugin/ingest/position-decisions-client.js +0 -306
  53. package/assets/plugin/ingest/readiness-reporter.d.ts +0 -42
  54. package/assets/plugin/ingest/readiness-reporter.js +0 -163
  55. package/assets/plugin/ingest/reconcile-db-vs-exchange.d.ts +0 -51
  56. package/assets/plugin/ingest/reconcile-db-vs-exchange.js +0 -170
  57. package/assets/plugin/ingest/reconciler-cleanup.d.ts +0 -37
  58. package/assets/plugin/ingest/reconciler-cleanup.js +0 -147
  59. package/assets/plugin/ingest/rest-gap-filler.d.ts +0 -191
  60. package/assets/plugin/ingest/rest-gap-filler.js +0 -565
  61. package/assets/plugin/ingest/touched-symbols-store.d.ts +0 -25
  62. package/assets/plugin/ingest/touched-symbols-store.js +0 -96
  63. package/assets/plugin/ingest/trade-store-client.d.ts +0 -40
  64. package/assets/plugin/ingest/trade-store-client.js +0 -125
  65. package/assets/plugin/ingest/ws-ingest.d.ts +0 -43
  66. package/assets/plugin/ingest/ws-ingest.js +0 -126
  67. package/assets/plugin/learning/setup-family.d.ts +0 -21
  68. package/assets/plugin/learning/setup-family.js +0 -103
  69. package/assets/plugin/lifecycle/install-signal-handlers.d.ts +0 -33
  70. package/assets/plugin/lifecycle/install-signal-handlers.js +0 -112
  71. package/assets/plugin/lifecycle/shutdown-coordinator.d.ts +0 -43
  72. package/assets/plugin/lifecycle/shutdown-coordinator.js +0 -131
  73. package/assets/plugin/lifecycle/trading-operation-lock.d.ts +0 -17
  74. package/assets/plugin/lifecycle/trading-operation-lock.js +0 -14
  75. package/assets/plugin/live/bracket-id.d.ts +0 -26
  76. package/assets/plugin/live/bracket-id.js +0 -112
  77. package/assets/plugin/live/bracket-ledger.d.ts +0 -54
  78. package/assets/plugin/live/bracket-ledger.js +0 -267
  79. package/assets/plugin/live/bracket-manager.d.ts +0 -82
  80. package/assets/plugin/live/bracket-manager.js +0 -478
  81. package/assets/plugin/live/bracket-params.d.ts +0 -22
  82. package/assets/plugin/live/bracket-params.js +0 -124
  83. package/assets/plugin/live/bracket-reconciler.d.ts +0 -95
  84. package/assets/plugin/live/bracket-reconciler.js +0 -573
  85. package/assets/plugin/live/bracket-types.d.ts +0 -102
  86. package/assets/plugin/live/bracket-types.js +0 -8
  87. package/assets/plugin/live/deposit-tracker.d.ts +0 -62
  88. package/assets/plugin/live/deposit-tracker.js +0 -97
  89. package/assets/plugin/live/emergency-controls.d.ts +0 -32
  90. package/assets/plugin/live/emergency-controls.js +0 -226
  91. package/assets/plugin/live/exchange-errors.d.ts +0 -12
  92. package/assets/plugin/live/exchange-errors.js +0 -130
  93. package/assets/plugin/live/exchange-info-cache.d.ts +0 -37
  94. package/assets/plugin/live/exchange-info-cache.js +0 -134
  95. package/assets/plugin/live/fact-subscriber.d.ts +0 -78
  96. package/assets/plugin/live/fact-subscriber.js +0 -182
  97. package/assets/plugin/live/fill-price.d.ts +0 -13
  98. package/assets/plugin/live/fill-price.js +0 -37
  99. package/assets/plugin/live/intent-journal.d.ts +0 -42
  100. package/assets/plugin/live/intent-journal.js +0 -122
  101. package/assets/plugin/live/listen-key-manager.d.ts +0 -70
  102. package/assets/plugin/live/listen-key-manager.js +0 -169
  103. package/assets/plugin/live/live-adapter.d.ts +0 -319
  104. package/assets/plugin/live/live-adapter.js +0 -1906
  105. package/assets/plugin/live/live-balance-enricher.d.ts +0 -32
  106. package/assets/plugin/live/live-balance-enricher.js +0 -104
  107. package/assets/plugin/live/live-bracket-api.d.ts +0 -13
  108. package/assets/plugin/live/live-bracket-api.js +0 -20
  109. package/assets/plugin/live/live-state-store.d.ts +0 -194
  110. package/assets/plugin/live/live-state-store.js +0 -450
  111. package/assets/plugin/live/local-signal-service.d.ts +0 -57
  112. package/assets/plugin/live/local-signal-service.js +0 -151
  113. package/assets/plugin/live/local-strategy-evaluator.d.ts +0 -62
  114. package/assets/plugin/live/local-strategy-evaluator.js +0 -131
  115. package/assets/plugin/live/microstructure-assembler.d.ts +0 -54
  116. package/assets/plugin/live/microstructure-assembler.js +0 -148
  117. package/assets/plugin/live/order-poller.d.ts +0 -29
  118. package/assets/plugin/live/order-poller.js +0 -125
  119. package/assets/plugin/live/position-state-store.d.ts +0 -87
  120. package/assets/plugin/live/position-state-store.js +0 -237
  121. package/assets/plugin/live/proposal-decision-listener.d.ts +0 -70
  122. package/assets/plugin/live/proposal-decision-listener.js +0 -292
  123. package/assets/plugin/live/proposal-manager.d.ts +0 -76
  124. package/assets/plugin/live/proposal-manager.js +0 -140
  125. package/assets/plugin/live/rate-limiter.d.ts +0 -47
  126. package/assets/plugin/live/rate-limiter.js +0 -159
  127. package/assets/plugin/live/reconciler.d.ts +0 -39
  128. package/assets/plugin/live/reconciler.js +0 -175
  129. package/assets/plugin/live/setup-buckets.d.ts +0 -7
  130. package/assets/plugin/live/setup-buckets.js +0 -33
  131. package/assets/plugin/live/slippage-tracker.d.ts +0 -45
  132. package/assets/plugin/live/slippage-tracker.js +0 -78
  133. package/assets/plugin/live/stop-watcher.d.ts +0 -67
  134. package/assets/plugin/live/stop-watcher.js +0 -218
  135. package/assets/plugin/live/user-data-active-probe.d.ts +0 -54
  136. package/assets/plugin/live/user-data-active-probe.js +0 -180
  137. package/assets/plugin/live/user-data-stream-controller.d.ts +0 -200
  138. package/assets/plugin/live/user-data-stream-controller.js +0 -579
  139. package/assets/plugin/live/user-data-stream-ws.d.ts +0 -22
  140. package/assets/plugin/live/user-data-stream-ws.js +0 -63
  141. package/assets/plugin/live/user-data-stream.d.ts +0 -243
  142. package/assets/plugin/live/user-data-stream.js +0 -704
  143. package/assets/plugin/logger.d.ts +0 -2
  144. package/assets/plugin/logger.js +0 -2
  145. package/assets/plugin/mfe.d.ts +0 -21
  146. package/assets/plugin/mfe.js +0 -68
  147. package/assets/plugin/onboarding/mode-ladder.d.ts +0 -1
  148. package/assets/plugin/onboarding/mode-ladder.js +0 -3
  149. package/assets/plugin/onboarding/runtime.d.ts +0 -90
  150. package/assets/plugin/onboarding/runtime.js +0 -184
  151. package/assets/plugin/openclaw.plugin.json +0 -92
  152. package/assets/plugin/paper-adapter.d.ts +0 -24
  153. package/assets/plugin/paper-adapter.js +0 -91
  154. package/assets/plugin/persistence/state-manager.d.ts +0 -66
  155. package/assets/plugin/persistence/state-manager.js +0 -222
  156. package/assets/plugin/pinned-plan.d.ts +0 -9
  157. package/assets/plugin/pinned-plan.js +0 -23
  158. package/assets/plugin/portfolio/reentry-tracker.d.ts +0 -36
  159. package/assets/plugin/portfolio/reentry-tracker.js +0 -127
  160. package/assets/plugin/portfolio/wave9-admission.d.ts +0 -67
  161. package/assets/plugin/portfolio/wave9-admission.js +0 -262
  162. package/assets/plugin/portfolio/wave9-policy.d.ts +0 -36
  163. package/assets/plugin/portfolio/wave9-policy.js +0 -183
  164. package/assets/plugin/risk/pre-trade-check.d.ts +0 -38
  165. package/assets/plugin/risk/pre-trade-check.js +0 -345
  166. package/assets/plugin/risk/pre-trade-types.d.ts +0 -60
  167. package/assets/plugin/risk/pre-trade-types.js +0 -3
  168. package/assets/plugin/shadow/shadow-tracker.d.ts +0 -36
  169. package/assets/plugin/shadow/shadow-tracker.js +0 -151
  170. package/assets/plugin/shadow/types.d.ts +0 -42
  171. package/assets/plugin/shadow/types.js +0 -20
  172. package/assets/plugin/shared/indicators-extended.d.ts +0 -52
  173. package/assets/plugin/shared/indicators-extended.js +0 -291
  174. package/assets/plugin/shared/indicators.d.ts +0 -15
  175. package/assets/plugin/shared/indicators.js +0 -114
  176. package/assets/plugin/signals/conditions/registry.d.ts +0 -16
  177. package/assets/plugin/signals/conditions/registry.js +0 -1333
  178. package/assets/plugin/signals/conditions/types.d.ts +0 -1
  179. package/assets/plugin/signals/conditions/types.js +0 -4
  180. package/assets/plugin/signals/direction-rules.d.ts +0 -3
  181. package/assets/plugin/signals/direction-rules.js +0 -24
  182. package/assets/plugin/signals/entry-rules.d.ts +0 -6
  183. package/assets/plugin/signals/entry-rules.js +0 -33
  184. package/assets/plugin/signals/serialize-context.d.ts +0 -4
  185. package/assets/plugin/signals/serialize-context.js +0 -39
  186. package/assets/plugin/signals/stop-rules.d.ts +0 -3
  187. package/assets/plugin/signals/stop-rules.js +0 -48
  188. package/assets/plugin/signals/strategy-adapter.d.ts +0 -47
  189. package/assets/plugin/signals/strategy-adapter.js +0 -209
  190. package/assets/plugin/signals/types.d.ts +0 -1
  191. package/assets/plugin/signals/types.js +0 -8
  192. package/assets/plugin/simulator/exchange-simulator.d.ts +0 -105
  193. package/assets/plugin/simulator/exchange-simulator.js +0 -759
  194. package/assets/plugin/simulator/fill-engine.d.ts +0 -53
  195. package/assets/plugin/simulator/fill-engine.js +0 -280
  196. package/assets/plugin/simulator/paper-market-feed.d.ts +0 -26
  197. package/assets/plugin/simulator/paper-market-feed.js +0 -104
  198. package/assets/plugin/simulator/realistic-fills.d.ts +0 -59
  199. package/assets/plugin/simulator/realistic-fills.js +0 -175
  200. package/assets/plugin/simulator/types.d.ts +0 -228
  201. package/assets/plugin/simulator/types.js +0 -43
  202. package/assets/plugin/strategy/builtin-strategies.d.ts +0 -2
  203. package/assets/plugin/strategy/builtin-strategies.js +0 -113
  204. package/assets/plugin/strategy/condition-registry.d.ts +0 -3
  205. package/assets/plugin/strategy/condition-registry.js +0 -153
  206. package/assets/plugin/strategy/evaluator.d.ts +0 -70
  207. package/assets/plugin/strategy/evaluator.js +0 -98
  208. package/assets/plugin/tools/assessment-validation.d.ts +0 -141
  209. package/assets/plugin/tools/assessment-validation.js +0 -473
  210. package/assets/plugin/tools/attach-brackets.d.ts +0 -39
  211. package/assets/plugin/tools/attach-brackets.js +0 -564
  212. package/assets/plugin/tools/audit-bracket-protection.d.ts +0 -49
  213. package/assets/plugin/tools/audit-bracket-protection.js +0 -683
  214. package/assets/plugin/tools/bracket-control.d.ts +0 -12
  215. package/assets/plugin/tools/bracket-control.js +0 -35
  216. package/assets/plugin/tools/cancel-all-orders.d.ts +0 -9
  217. package/assets/plugin/tools/cancel-all-orders.js +0 -8
  218. package/assets/plugin/tools/cancel-order.d.ts +0 -14
  219. package/assets/plugin/tools/cancel-order.js +0 -60
  220. package/assets/plugin/tools/check-position-health.d.ts +0 -46
  221. package/assets/plugin/tools/check-position-health.js +0 -194
  222. package/assets/plugin/tools/clear-exchange-credentials.d.ts +0 -24
  223. package/assets/plugin/tools/clear-exchange-credentials.js +0 -70
  224. package/assets/plugin/tools/close-position.d.ts +0 -45
  225. package/assets/plugin/tools/close-position.js +0 -722
  226. package/assets/plugin/tools/create-order.d.ts +0 -82
  227. package/assets/plugin/tools/create-order.js +0 -1544
  228. package/assets/plugin/tools/exit-gate.d.ts +0 -58
  229. package/assets/plugin/tools/exit-gate.js +0 -162
  230. package/assets/plugin/tools/fetch-balance.d.ts +0 -5
  231. package/assets/plugin/tools/fetch-balance.js +0 -4
  232. package/assets/plugin/tools/fetch-ohlcv.d.ts +0 -11
  233. package/assets/plugin/tools/fetch-ohlcv.js +0 -8
  234. package/assets/plugin/tools/fetch-open-orders.d.ts +0 -7
  235. package/assets/plugin/tools/fetch-open-orders.js +0 -4
  236. package/assets/plugin/tools/fetch-positions.d.ts +0 -7
  237. package/assets/plugin/tools/fetch-positions.js +0 -4
  238. package/assets/plugin/tools/fetch-ticker.d.ts +0 -11
  239. package/assets/plugin/tools/fetch-ticker.js +0 -5
  240. package/assets/plugin/tools/get-agent-profile.d.ts +0 -4
  241. package/assets/plugin/tools/get-agent-profile.js +0 -6
  242. package/assets/plugin/tools/get-analytics.d.ts +0 -6
  243. package/assets/plugin/tools/get-analytics.js +0 -7
  244. package/assets/plugin/tools/get-backtest.d.ts +0 -12
  245. package/assets/plugin/tools/get-backtest.js +0 -91
  246. package/assets/plugin/tools/get-basis.d.ts +0 -7
  247. package/assets/plugin/tools/get-basis.js +0 -7
  248. package/assets/plugin/tools/get-bracket-config.d.ts +0 -11
  249. package/assets/plugin/tools/get-bracket-config.js +0 -24
  250. package/assets/plugin/tools/get-cascade-risk.d.ts +0 -7
  251. package/assets/plugin/tools/get-cascade-risk.js +0 -8
  252. package/assets/plugin/tools/get-crypto-metrics.d.ts +0 -18
  253. package/assets/plugin/tools/get-crypto-metrics.js +0 -62
  254. package/assets/plugin/tools/get-cvd.d.ts +0 -6
  255. package/assets/plugin/tools/get-cvd.js +0 -6
  256. package/assets/plugin/tools/get-divergences.d.ts +0 -6
  257. package/assets/plugin/tools/get-divergences.js +0 -6
  258. package/assets/plugin/tools/get-funding-context.d.ts +0 -6
  259. package/assets/plugin/tools/get-funding-context.js +0 -16
  260. package/assets/plugin/tools/get-liquidation-levels.d.ts +0 -7
  261. package/assets/plugin/tools/get-liquidation-levels.js +0 -7
  262. package/assets/plugin/tools/get-liquidation-pulse.d.ts +0 -9
  263. package/assets/plugin/tools/get-liquidation-pulse.js +0 -22
  264. package/assets/plugin/tools/get-market-breadth.d.ts +0 -6
  265. package/assets/plugin/tools/get-market-breadth.js +0 -8
  266. package/assets/plugin/tools/get-market-intel.d.ts +0 -19
  267. package/assets/plugin/tools/get-market-intel.js +0 -116
  268. package/assets/plugin/tools/get-market-structure.d.ts +0 -47
  269. package/assets/plugin/tools/get-market-structure.js +0 -198
  270. package/assets/plugin/tools/get-my-mined-patterns.d.ts +0 -20
  271. package/assets/plugin/tools/get-my-mined-patterns.js +0 -61
  272. package/assets/plugin/tools/get-my-proposed-learnings.d.ts +0 -20
  273. package/assets/plugin/tools/get-my-proposed-learnings.js +0 -55
  274. package/assets/plugin/tools/get-my-recent-reviews.d.ts +0 -22
  275. package/assets/plugin/tools/get-my-recent-reviews.js +0 -66
  276. package/assets/plugin/tools/get-orderbook.d.ts +0 -21
  277. package/assets/plugin/tools/get-orderbook.js +0 -32
  278. package/assets/plugin/tools/get-pattern-scan.d.ts +0 -7
  279. package/assets/plugin/tools/get-pattern-scan.js +0 -8
  280. package/assets/plugin/tools/get-regime.d.ts +0 -6
  281. package/assets/plugin/tools/get-regime.js +0 -7
  282. package/assets/plugin/tools/get-relevant-learnings.d.ts +0 -21
  283. package/assets/plugin/tools/get-relevant-learnings.js +0 -65
  284. package/assets/plugin/tools/get-resting-liquidity.d.ts +0 -6
  285. package/assets/plugin/tools/get-resting-liquidity.js +0 -11
  286. package/assets/plugin/tools/get-risk-scenario.d.ts +0 -29
  287. package/assets/plugin/tools/get-risk-scenario.js +0 -47
  288. package/assets/plugin/tools/get-risk-summary.d.ts +0 -51
  289. package/assets/plugin/tools/get-risk-summary.js +0 -118
  290. package/assets/plugin/tools/get-sentiment.d.ts +0 -4
  291. package/assets/plugin/tools/get-sentiment.js +0 -6
  292. package/assets/plugin/tools/get-session-review.d.ts +0 -7
  293. package/assets/plugin/tools/get-session-review.js +0 -8
  294. package/assets/plugin/tools/get-setup-detail.d.ts +0 -7
  295. package/assets/plugin/tools/get-setup-detail.js +0 -322
  296. package/assets/plugin/tools/get-signals.d.ts +0 -15
  297. package/assets/plugin/tools/get-signals.js +0 -54
  298. package/assets/plugin/tools/get-sizing.d.ts +0 -6
  299. package/assets/plugin/tools/get-sizing.js +0 -6
  300. package/assets/plugin/tools/get-trade-feedback.d.ts +0 -7
  301. package/assets/plugin/tools/get-trade-feedback.js +0 -8
  302. package/assets/plugin/tools/get-trade-flow.d.ts +0 -7
  303. package/assets/plugin/tools/get-trade-flow.js +0 -7
  304. package/assets/plugin/tools/get-volume-analysis.d.ts +0 -21
  305. package/assets/plugin/tools/get-volume-analysis.js +0 -74
  306. package/assets/plugin/tools/get-volume-profile.d.ts +0 -7
  307. package/assets/plugin/tools/get-volume-profile.js +0 -7
  308. package/assets/plugin/tools/get-wave9-status.d.ts +0 -127
  309. package/assets/plugin/tools/get-wave9-status.js +0 -796
  310. package/assets/plugin/tools/helpers.d.ts +0 -26
  311. package/assets/plugin/tools/helpers.js +0 -39
  312. package/assets/plugin/tools/intel-api.d.ts +0 -34
  313. package/assets/plugin/tools/intel-api.js +0 -119
  314. package/assets/plugin/tools/intel-cache.d.ts +0 -25
  315. package/assets/plugin/tools/intel-cache.js +0 -148
  316. package/assets/plugin/tools/list-strategies.d.ts +0 -17
  317. package/assets/plugin/tools/list-strategies.js +0 -23
  318. package/assets/plugin/tools/modify-stop.d.ts +0 -21
  319. package/assets/plugin/tools/modify-stop.js +0 -120
  320. package/assets/plugin/tools/modify-target.d.ts +0 -21
  321. package/assets/plugin/tools/modify-target.js +0 -110
  322. package/assets/plugin/tools/propose-learning.d.ts +0 -22
  323. package/assets/plugin/tools/propose-learning.js +0 -65
  324. package/assets/plugin/tools/query-review-outcomes.d.ts +0 -30
  325. package/assets/plugin/tools/query-review-outcomes.js +0 -64
  326. package/assets/plugin/tools/query-trades.d.ts +0 -21
  327. package/assets/plugin/tools/query-trades.js +0 -37
  328. package/assets/plugin/tools/record-position-reviews.d.ts +0 -38
  329. package/assets/plugin/tools/record-position-reviews.js +0 -147
  330. package/assets/plugin/tools/save-strategy.d.ts +0 -16
  331. package/assets/plugin/tools/save-strategy.js +0 -46
  332. package/assets/plugin/tools/scan-pairs.d.ts +0 -22
  333. package/assets/plugin/tools/scan-pairs.js +0 -234
  334. package/assets/plugin/tools/score-setup.d.ts +0 -31
  335. package/assets/plugin/tools/score-setup.js +0 -268
  336. package/assets/plugin/tools/set-bracket-requirement.d.ts +0 -18
  337. package/assets/plugin/tools/set-bracket-requirement.js +0 -81
  338. package/assets/plugin/tools/set-exchange-credentials.d.ts +0 -25
  339. package/assets/plugin/tools/set-exchange-credentials.js +0 -80
  340. package/assets/plugin/tools/set-trading-mode.d.ts +0 -26
  341. package/assets/plugin/tools/set-trading-mode.js +0 -135
  342. package/assets/plugin/tools/test-exchange-credentials.d.ts +0 -16
  343. package/assets/plugin/tools/test-exchange-credentials.js +0 -100
  344. package/assets/plugin/tools/toggle-strategy.d.ts +0 -8
  345. package/assets/plugin/tools/toggle-strategy.js +0 -15
  346. package/assets/plugin/trading-params-cache.d.ts +0 -26
  347. package/assets/plugin/trading-params-cache.js +0 -52
  348. package/assets/plugin/types.d.ts +0 -134
  349. package/assets/plugin/types.js +0 -7
  350. package/assets/plugin/util/plugin-paths.d.ts +0 -3
  351. package/assets/plugin/util/plugin-paths.js +0 -15
  352. package/assets/plugin/venues/hyperliquid/hl-balance.d.ts +0 -116
  353. package/assets/plugin/venues/hyperliquid/hl-balance.js +0 -145
  354. package/assets/plugin/venues/hyperliquid/hl-bracket-coordinator.d.ts +0 -123
  355. package/assets/plugin/venues/hyperliquid/hl-bracket-coordinator.js +0 -533
  356. package/assets/plugin/venues/hyperliquid/hl-brackets.d.ts +0 -102
  357. package/assets/plugin/venues/hyperliquid/hl-brackets.js +0 -172
  358. package/assets/plugin/venues/hyperliquid/hl-cloid.d.ts +0 -22
  359. package/assets/plugin/venues/hyperliquid/hl-cloid.js +0 -82
  360. package/assets/plugin/venues/hyperliquid/hl-info-cache.d.ts +0 -46
  361. package/assets/plugin/venues/hyperliquid/hl-info-cache.js +0 -125
  362. package/assets/plugin/venues/hyperliquid/hl-live-adapter.d.ts +0 -146
  363. package/assets/plugin/venues/hyperliquid/hl-live-adapter.js +0 -728
  364. package/assets/plugin/venues/hyperliquid/hl-precision.d.ts +0 -61
  365. package/assets/plugin/venues/hyperliquid/hl-precision.js +0 -176
  366. package/assets/plugin/venues/hyperliquid/hl-private.d.ts +0 -88
  367. package/assets/plugin/venues/hyperliquid/hl-private.js +0 -357
  368. package/assets/plugin/venues/hyperliquid/hl-public.d.ts +0 -79
  369. package/assets/plugin/venues/hyperliquid/hl-public.js +0 -436
  370. package/assets/plugin/venues/hyperliquid/hl-rate-gate.d.ts +0 -57
  371. package/assets/plugin/venues/hyperliquid/hl-rate-gate.js +0 -220
  372. package/assets/plugin/venues/hyperliquid/hl-user-stream.d.ts +0 -90
  373. package/assets/plugin/venues/hyperliquid/hl-user-stream.js +0 -220
  374. package/assets/plugin/venues/registry.d.ts +0 -38
  375. package/assets/plugin/venues/registry.js +0 -46
  376. package/assets/plugin/venues/symbols.d.ts +0 -43
  377. package/assets/plugin/venues/symbols.js +0 -107
  378. package/assets/plugin/wave9/live-account-capture.d.ts +0 -67
  379. package/assets/plugin/wave9/live-account-capture.js +0 -435
  380. package/assets/plugin/wave9/live-autonomous-protection.d.ts +0 -39
  381. package/assets/plugin/wave9/live-autonomous-protection.js +0 -112
  382. package/assets/plugin/wave9/live-durable-reconciliation-scheduler.d.ts +0 -33
  383. package/assets/plugin/wave9/live-durable-reconciliation-scheduler.js +0 -115
  384. package/assets/plugin/wave9/live-execution-ledger.d.ts +0 -107
  385. package/assets/plugin/wave9/live-execution-ledger.js +0 -498
  386. package/assets/plugin/wave9/live-position-confirmation.d.ts +0 -18
  387. package/assets/plugin/wave9/live-position-confirmation.js +0 -111
  388. package/assets/plugin/wave9/live-residual-protection.d.ts +0 -18
  389. package/assets/plugin/wave9/live-residual-protection.js +0 -250
  390. package/assets/plugin/wave9/live-startup-reconciliation.d.ts +0 -38
  391. package/assets/plugin/wave9/live-startup-reconciliation.js +0 -454
  392. package/assets/plugin/wave9/live-symbol-ownership.d.ts +0 -20
  393. package/assets/plugin/wave9/live-symbol-ownership.js +0 -132
  394. package/assets/plugin/wave9/paper-admission-guard.d.ts +0 -199
  395. package/assets/plugin/wave9/paper-admission-guard.js +0 -650
  396. package/assets/plugin/wave9/usdm-evidence-provider.d.ts +0 -42
  397. package/assets/plugin/wave9/usdm-evidence-provider.js +0 -133
@@ -1,454 +0,0 @@
1
- import { formatError } from '../logger.js';
2
- import { confirmWave9LiveNativeStop, } from './live-account-capture.js';
3
- import { recoverWave9LiveExposure, } from './live-autonomous-protection.js';
4
- import { confirmWave9LivePositionFlat, } from './live-position-confirmation.js';
5
- function canonicalSymbol(symbol) {
6
- return symbol.toUpperCase().replace(/[^A-Z0-9]/g, '').replace(/USDTUSDT$/, 'USDT');
7
- }
8
- function sameQuantity(left, right) {
9
- return Math.abs(left - right) <= 1e-9 * Math.max(1, Math.abs(left), Math.abs(right));
10
- }
11
- function maximumCandidateQuantity(record) {
12
- return record.filledQuantity ?? record.quantity;
13
- }
14
- function manual(record, detail, retryable = false) {
15
- return {
16
- candidateId: record.candidateId,
17
- symbol: record.symbol,
18
- priorState: record.state,
19
- status: 'manual_intervention',
20
- detail: `IMMEDIATE MANUAL INTERVENTION REQUIRED: ${detail}`,
21
- retryable,
22
- };
23
- }
24
- function validateExactOrderIdentity(record, order) {
25
- if (order.clientOrderId !== record.clientOrderId) {
26
- return `exact-CID lookup returned clientOrderId ${order.clientOrderId ?? 'missing'}`;
27
- }
28
- if (canonicalSymbol(order.symbol) !== record.symbol) {
29
- return `exact-CID lookup returned symbol ${order.symbol}, expected ${record.symbol}`;
30
- }
31
- if (order.side !== record.side) {
32
- return `exact-CID lookup returned side ${order.side}, expected ${record.side}`;
33
- }
34
- if (order.type !== 'market') {
35
- return `exact-CID lookup returned non-market order type ${order.type}`;
36
- }
37
- if (order.status !== 'open' && order.status !== 'closed' && order.status !== 'canceled') {
38
- return `exact-CID lookup returned malformed/unsupported status ${String(order.status)}`;
39
- }
40
- if (!confirmedExchangeOrderId(order)) {
41
- return 'exact-CID lookup returned a malformed exchange order ID';
42
- }
43
- if (typeof order.amount !== 'number' || !Number.isFinite(order.amount) || order.amount <= 0) {
44
- return 'exact-CID lookup returned a malformed order amount';
45
- }
46
- if (order.amount > record.quantity) {
47
- return `exact-CID amount ${order.amount} exceeds authorized quantity ${record.quantity}`;
48
- }
49
- if (typeof order.filled !== 'number' || !Number.isFinite(order.filled) || order.filled < 0) {
50
- return 'exact-CID lookup returned a malformed filled quantity';
51
- }
52
- if (order.filled > order.amount) {
53
- return `exact-CID fill ${order.filled} exceeds its order amount ${order.amount}`;
54
- }
55
- if (order.filled > record.quantity) {
56
- return `exact-CID fill ${order.filled} exceeds authorized quantity ${record.quantity}`;
57
- }
58
- if (record.state === 'open'
59
- && record.filledQuantity !== undefined
60
- && order.filled < record.filledQuantity) {
61
- return `exact-CID fill ${order.filled} decreases durable fill ${record.filledQuantity}`;
62
- }
63
- if (record.state === 'open'
64
- && record.exchangeOrderId !== undefined
65
- && order.id !== record.exchangeOrderId) {
66
- return `exact-CID exchange order ${order.id} disagrees with durable order ${record.exchangeOrderId}`;
67
- }
68
- return undefined;
69
- }
70
- async function resolveExactOrder(adapter, record) {
71
- if (!adapter.resolveOrderByClientId) {
72
- return { status: 'unknown', detail: 'deterministic client-order resolver is unavailable' };
73
- }
74
- let resolution;
75
- try {
76
- resolution = await adapter.resolveOrderByClientId(record.clientOrderId, record.symbol);
77
- }
78
- catch (error) {
79
- return { status: 'unknown', detail: `exact-CID lookup threw: ${formatError(error)}` };
80
- }
81
- if (resolution.status === 'unknown')
82
- return resolution;
83
- if (resolution.status === 'confirmed_absent')
84
- return resolution;
85
- const mismatch = validateExactOrderIdentity(record, resolution.order);
86
- return mismatch
87
- ? { status: 'mismatch', detail: mismatch }
88
- : { status: 'found', order: resolution.order };
89
- }
90
- /**
91
- * A crash may leave the deterministic entry order open with an unfilled
92
- * remainder. Cancel only that exact candidate-bound order before interpreting
93
- * its final fill; never submit a replacement entry during recovery.
94
- */
95
- async function terminalizeOpenRemainder(adapter, record, observation) {
96
- if (observation.status !== 'found' || observation.order.status !== 'open') {
97
- return observation;
98
- }
99
- let cancelError;
100
- try {
101
- await adapter.cancelOrder(observation.order.id, record.symbol);
102
- }
103
- catch (error) {
104
- // A post-submit error is ambiguous. The second exact lookup below, not
105
- // the exception, determines whether the remainder is terminal.
106
- cancelError = formatError(error);
107
- }
108
- const settled = await resolveExactOrder(adapter, record);
109
- if (settled.status !== 'found') {
110
- return settled.status === 'mismatch'
111
- ? settled
112
- : {
113
- status: 'unknown',
114
- detail: `exact entry remainder cancellation ${cancelError ? `threw (${cancelError})` : 'was acknowledged'}, ` +
115
- `but terminal exact-CID state is ${settled.status}`,
116
- };
117
- }
118
- if (settled.order.status === 'open') {
119
- return {
120
- status: 'unknown',
121
- detail: `exact candidate entry ${record.clientOrderId} still has an open remainder` +
122
- `${cancelError ? ` after cancellation threw (${cancelError})` : ''}`,
123
- };
124
- }
125
- return settled;
126
- }
127
- async function observePositionIdentity(adapter, record, maximumQuantity) {
128
- let positions;
129
- try {
130
- positions = await adapter.getPositionsOrNull(record.symbol);
131
- }
132
- catch (error) {
133
- return { status: 'unknown', detail: `position lookup threw: ${formatError(error)}` };
134
- }
135
- if (positions === null || !Array.isArray(positions)) {
136
- return { status: 'unknown', detail: 'position state is unavailable' };
137
- }
138
- const matches = [];
139
- for (const position of positions) {
140
- if (!position
141
- || typeof position.symbol !== 'string'
142
- || (position.side !== 'long' && position.side !== 'short')
143
- || typeof position.contracts !== 'number'
144
- || !Number.isFinite(position.contracts)
145
- || position.contracts < 0) {
146
- return { status: 'unknown', detail: 'position snapshot contains malformed rows' };
147
- }
148
- if (canonicalSymbol(position.symbol) === record.symbol && position.contracts > 0) {
149
- matches.push(position);
150
- }
151
- }
152
- if (matches.length === 0) {
153
- return { status: 'flat', detail: 'one trusted position snapshot is currently flat' };
154
- }
155
- if (matches.length !== 1) {
156
- return { status: 'mismatch', detail: 'multiple same-symbol exchange positions are visible' };
157
- }
158
- const position = matches[0];
159
- const expectedSide = record.side === 'buy' ? 'long' : 'short';
160
- if (position.side !== expectedSide) {
161
- return {
162
- status: 'mismatch',
163
- detail: `same-symbol position side ${position.side} does not match ${expectedSide}`,
164
- };
165
- }
166
- if (position.contracts > maximumQuantity
167
- && !sameQuantity(position.contracts, maximumQuantity)) {
168
- return {
169
- status: 'mismatch',
170
- detail: `same-symbol quantity ${position.contracts} exceeds exact candidate fill/authorization ` +
171
- `${maximumQuantity}`,
172
- };
173
- }
174
- if (position.candidateId && position.candidateId !== record.candidateId) {
175
- return {
176
- status: 'mismatch',
177
- detail: `position candidate ${position.candidateId} disagrees with ${record.candidateId}`,
178
- };
179
- }
180
- if (position.missionId && position.missionId !== record.missionId) {
181
- return {
182
- status: 'mismatch',
183
- detail: `position mission ${position.missionId} disagrees with ${record.missionId}`,
184
- };
185
- }
186
- if (position.strategy && position.strategy !== record.strategy) {
187
- return {
188
- status: 'mismatch',
189
- detail: `position strategy ${position.strategy} disagrees with ${record.strategy}`,
190
- };
191
- }
192
- return {
193
- status: 'matching',
194
- detail: `one trusted ${expectedSide} position has ${position.contracts} contracts within ` +
195
- `candidate maximum ${maximumQuantity}`,
196
- quantity: position.contracts,
197
- };
198
- }
199
- async function exactNativeStopAlreadyProtectsOpenRow(adapter, record, position, confirmStop) {
200
- if (record.state !== 'open' || position.status !== 'matching')
201
- return false;
202
- const quantities = [...new Set([
203
- maximumCandidateQuantity(record),
204
- position.quantity,
205
- ])];
206
- for (const filledQuantity of quantities) {
207
- try {
208
- if (await confirmStop(adapter, {
209
- candidateId: record.candidateId,
210
- symbol: record.symbol,
211
- entryClientOrderId: record.clientOrderId,
212
- entrySide: record.side,
213
- stopPrice: record.initialStop,
214
- filledQuantity,
215
- }))
216
- return true;
217
- }
218
- catch {
219
- // An old entry may no longer be queryable. Only positive exact native
220
- // stop proof is accepted; a failed proof falls through to entry lookup.
221
- }
222
- }
223
- return false;
224
- }
225
- function confirmedEntryPrice(order, record) {
226
- const candidates = [order.average, order.price];
227
- for (const value of candidates) {
228
- if (typeof value !== 'number' || !Number.isFinite(value) || value <= 0)
229
- continue;
230
- if ((record.side === 'buy' && value > record.initialStop)
231
- || (record.side === 'sell' && value < record.initialStop))
232
- return value;
233
- }
234
- return undefined;
235
- }
236
- function confirmedExchangeOrderId(order) {
237
- return typeof order.id === 'string'
238
- && order.id.length > 0
239
- && order.id.length <= 512
240
- && order.id.trim() === order.id
241
- ? order.id
242
- : undefined;
243
- }
244
- async function persistClosed(ledger, record, detail) {
245
- try {
246
- ledger.markClosed(record.candidateId);
247
- return {
248
- candidateId: record.candidateId,
249
- symbol: record.symbol,
250
- priorState: record.state,
251
- status: 'closed',
252
- detail,
253
- retryable: false,
254
- };
255
- }
256
- catch (error) {
257
- return manual(record, `stable flatness was proven, but durable CLOSED persistence failed: ${formatError(error)}`);
258
- }
259
- }
260
- async function establishDurableFill(ledger, record, order) {
261
- const entryPrice = confirmedEntryPrice(order, record);
262
- const exchangeOrderId = confirmedExchangeOrderId(order);
263
- try {
264
- if (record.state === 'attempted') {
265
- ledger.markOpen(record.candidateId, {
266
- filledQuantity: order.filled,
267
- ...(entryPrice !== undefined ? { entryPrice } : {}),
268
- exchangeOrderId,
269
- });
270
- }
271
- else {
272
- ledger.reconcileOpenFillFromExactOrder(record.candidateId, {
273
- filledQuantity: order.filled,
274
- exchangeOrderId,
275
- ...(entryPrice !== undefined ? { entryPrice } : {}),
276
- });
277
- }
278
- return undefined;
279
- }
280
- catch (error) {
281
- return formatError(error);
282
- }
283
- }
284
- async function reconcileResolvedFill(adapter, ledger, record, order, initialPosition, options) {
285
- let position = initialPosition;
286
- if (position.status === 'mismatch') {
287
- return manual(record, `exact CID proves a fill, but current exposure identity is mismatched: ${position.detail}; ` +
288
- 'refusing same-symbol stop replacement or close');
289
- }
290
- if (position.status !== 'matching') {
291
- const flat = await options.confirmFlat(adapter, record.symbol, options.flatConfirmation);
292
- if (flat.confirmed) {
293
- const openError = await establishDurableFill(ledger, record, order);
294
- if (openError) {
295
- return manual(record, `exact fill was proven, but durable OPEN persistence failed: ${openError}`);
296
- }
297
- return persistClosed(ledger, record, `exact CID proves the historical fill and exchange flatness remained stable (${flat.detail})`);
298
- }
299
- position = await observePositionIdentity(adapter, record, order.filled);
300
- if (position.status !== 'matching') {
301
- return manual(record, `exact CID proves a fill, but no candidate-bound residual can be safely recovered: ` +
302
- `${position.detail}; stable flatness was not proven (${flat.detail})`, position.status === 'unknown' || position.status === 'flat');
303
- }
304
- }
305
- const openError = await establishDurableFill(ledger, record, order);
306
- if (openError) {
307
- return manual(record, `exact fill and residual were proven, but durable OPEN persistence failed: ${openError}; ` +
308
- 'refusing exchange mutation without durable ownership');
309
- }
310
- const fenceState = { current: position };
311
- const authorizeExposureMutation = async () => {
312
- fenceState.current = await observePositionIdentity(adapter, record, order.filled);
313
- return {
314
- authorized: fenceState.current.status === 'matching',
315
- detail: fenceState.current.detail,
316
- };
317
- };
318
- let recovery;
319
- try {
320
- recovery = await options.recoverExposure(adapter, ledger, record.candidateId, record.symbol, {
321
- ...options.recoveryOptions,
322
- authorizeExposureMutation,
323
- });
324
- }
325
- catch (error) {
326
- return manual(record, `candidate-bound startup recovery threw: ${formatError(error)}`);
327
- }
328
- if (recovery.status === 'flat') {
329
- return {
330
- candidateId: record.candidateId,
331
- symbol: record.symbol,
332
- priorState: record.state,
333
- status: 'closed',
334
- detail: recovery.detail,
335
- retryable: false,
336
- };
337
- }
338
- if (recovery.status === 'protected') {
339
- return {
340
- candidateId: record.candidateId,
341
- symbol: record.symbol,
342
- priorState: record.state,
343
- status: 'protected',
344
- detail: recovery.detail,
345
- retryable: false,
346
- };
347
- }
348
- return manual(record, recovery.detail, fenceState.current.status === 'unknown' || fenceState.current.status === 'flat');
349
- }
350
- async function reconcileRow(adapter, ledger, record, options) {
351
- const durableMaximum = maximumCandidateQuantity(record);
352
- let position = await observePositionIdentity(adapter, record, durableMaximum);
353
- // Historical entry lookup on Binance is not an eternal data source. A
354
- // positive proof of the exact candidate-bound native close-all stop plus a
355
- // compatible trusted position is enough to retain an already-safe OPEN row.
356
- const exactStopProven = await exactNativeStopAlreadyProtectsOpenRow(adapter, record, position, options.confirmStop);
357
- const durableFillIsComplete = record.state === 'open'
358
- && record.filledQuantity !== undefined
359
- && sameQuantity(record.filledQuantity, record.quantity);
360
- if (exactStopProven && durableFillIsComplete) {
361
- return {
362
- candidateId: record.candidateId,
363
- symbol: record.symbol,
364
- priorState: 'open',
365
- status: 'protected',
366
- detail: 'existing exact candidate-bound native close-all stop is proven live',
367
- retryable: false,
368
- };
369
- }
370
- let exact = await resolveExactOrder(adapter, record);
371
- if (exact.status === 'mismatch') {
372
- return manual(record, `${exact.detail}; refusing to attribute or mutate same-symbol exposure`);
373
- }
374
- if (exact.status === 'unknown') {
375
- return manual(record, exactStopProven
376
- ? `${exact.detail}; an exact native close-all stop protects the currently observed residual, ` +
377
- 'but the partial/missing durable fill cannot bypass terminal entry-remainder proof'
378
- : exact.detail, true);
379
- }
380
- if (exact.status === 'confirmed_absent') {
381
- const flat = await options.confirmFlat(adapter, record.symbol, options.flatConfirmation);
382
- if (flat.confirmed) {
383
- return persistClosed(ledger, record, `exact entry CID is confirmed absent and exchange flatness remained stable (${flat.detail})`);
384
- }
385
- position = await observePositionIdentity(adapter, record, durableMaximum);
386
- return manual(record, `exact entry CID is confirmed absent, so current same-symbol exposure is not attributed ` +
387
- `to Wave 9; stable flatness was not proven (${flat.detail}; ${position.detail})`, position.status === 'unknown' || position.status === 'flat');
388
- }
389
- exact = await terminalizeOpenRemainder(adapter, record, exact);
390
- if (exact.status === 'mismatch') {
391
- return manual(record, `${exact.detail}; refusing to attribute or mutate same-symbol exposure`);
392
- }
393
- if (exact.status === 'unknown' || exact.status === 'confirmed_absent') {
394
- return manual(record, exact.status === 'unknown'
395
- ? exact.detail
396
- : 'a previously found exact entry became absent before terminal state was proven', true);
397
- }
398
- if (exact.order.filled === 0) {
399
- const flat = await options.confirmFlat(adapter, record.symbol, options.flatConfirmation);
400
- if (flat.confirmed) {
401
- return persistClosed(ledger, record, `exact entry is terminal with zero fill and exchange flatness remained stable (${flat.detail})`);
402
- }
403
- position = await observePositionIdentity(adapter, record, durableMaximum);
404
- return manual(record, `exact entry is terminal with zero fill, so current same-symbol exposure is not attributed ` +
405
- `to Wave 9; stable flatness was not proven (${flat.detail}; ${position.detail})`, position.status === 'unknown' || position.status === 'flat');
406
- }
407
- position = await observePositionIdentity(adapter, record, exact.order.filled);
408
- return reconcileResolvedFill(adapter, ledger, record, exact.order, position, options);
409
- }
410
- /**
411
- * Reconcile crash-ambiguous durable Wave 9 rows after a LIVE adapter reaches
412
- * READY. The caller must hold the shared trading-operation lock. This function
413
- * never submits another entry. It only cancels an exact candidate entry
414
- * remainder, persists stably-flat terminal state, or repairs/flattens exposure
415
- * after exact entry-CID and current-position identity both agree.
416
- */
417
- export async function reconcileWave9LiveDurableRows(adapter, ledger, options = {}) {
418
- if (!adapter.isLive || adapter.mode !== 'LIVE' || adapter.readiness !== 'READY') {
419
- throw new Error(`Wave 9 startup reconciliation requires the current LIVE adapter READY ` +
420
- `(isLive=${adapter.isLive}, mode=${adapter.mode}, readiness=${adapter.readiness})`);
421
- }
422
- const effective = {
423
- ...options,
424
- confirmFlat: options.confirmFlat ?? confirmWave9LivePositionFlat,
425
- confirmStop: options.confirmStop ?? confirmWave9LiveNativeStop,
426
- recoverExposure: options.recoverExposure ?? recoverWave9LiveExposure,
427
- };
428
- const unresolved = ledger.getAll().filter((record) => record.state === 'attempted' || record.state === 'open');
429
- const conflicts = new Set();
430
- const counts = new Map();
431
- for (const record of unresolved) {
432
- counts.set(record.symbol, (counts.get(record.symbol) ?? 0) + 1);
433
- }
434
- for (const [symbol, count] of counts) {
435
- if (count > 1)
436
- conflicts.add(symbol);
437
- }
438
- const rows = [];
439
- for (const record of unresolved) {
440
- if (conflicts.has(record.symbol)) {
441
- rows.push(manual(record, `multiple unresolved durable Wave 9 rows claim ${record.symbol}; refusing ambiguous recovery`));
442
- continue;
443
- }
444
- rows.push(await reconcileRow(adapter, ledger, record, effective));
445
- }
446
- return {
447
- rows,
448
- unresolvedCount: rows.length,
449
- protectedCount: rows.filter((row) => row.status === 'protected').length,
450
- closedCount: rows.filter((row) => row.status === 'closed').length,
451
- manualInterventionCount: rows.filter((row) => row.status === 'manual_intervention').length,
452
- retryable: rows.some((row) => row.retryable),
453
- };
454
- }
@@ -1,20 +0,0 @@
1
- import type { IExchangeAdapter } from '../exchange-adapter.js';
2
- import type { Wave9LiveExecutionLedger } from './live-execution-ledger.js';
3
- export type Wave9LiveSymbolOwnershipStatus = 'unavailable' | 'unowned' | 'owned' | 'ambiguous';
4
- export interface Wave9LiveSymbolOwnership {
5
- status: Wave9LiveSymbolOwnershipStatus;
6
- reason: string;
7
- candidateId?: string;
8
- }
9
- export type Wave9LiveSymbolOwnershipCheck = (symbol: string) => Promise<Wave9LiveSymbolOwnership>;
10
- /**
11
- * Resolve same-symbol ownership from the durable LIVE execution ledger and an
12
- * exchange-authoritative account capture. Only confirmed-open ledger rows can
13
- * own a symbol. An attempted-only row is a crash-ambiguous execution outcome,
14
- * so it blocks generic mutation until repeated trusted snapshots prove the
15
- * symbol flat and the durable tombstone is retired. A stably flat exchange
16
- * symbol also retires stale open rows left by a native stop/target close before
17
- * it is treated as unowned. Any position-present identity disagreement fails
18
- * closed as ambiguous.
19
- */
20
- export declare function inspectWave9LiveSymbolOwnership(adapter: IExchangeAdapter, ledger: Wave9LiveExecutionLedger, symbol: string): Promise<Wave9LiveSymbolOwnership>;
@@ -1,132 +0,0 @@
1
- import { WAVE9_BUNDLE_SETUP_TYPE } from './paper-admission-guard.js';
2
- import { captureWave9LiveAccount } from './live-account-capture.js';
3
- import { confirmWave9LivePositionFlat } from './live-position-confirmation.js';
4
- function canonicalSymbol(symbol) {
5
- return symbol.toUpperCase().replace(/[^A-Z0-9]/g, '').replace(/USDTUSDT$/, 'USDT');
6
- }
7
- function expectedPositionSide(record) {
8
- return record.side === 'buy' ? 'long' : 'short';
9
- }
10
- async function proveAttemptDidNotCreateExposure(adapter, record) {
11
- if (!adapter.resolveOrderByClientId)
12
- return false;
13
- let resolution;
14
- try {
15
- resolution = await adapter.resolveOrderByClientId(record.clientOrderId, record.symbol);
16
- }
17
- catch {
18
- return false;
19
- }
20
- if (resolution.status === 'confirmed_absent')
21
- return true;
22
- if (resolution.status !== 'found')
23
- return false;
24
- const order = resolution.order;
25
- const filled = order.filled;
26
- return order.clientOrderId === record.clientOrderId
27
- && canonicalSymbol(order.symbol) === canonicalSymbol(record.symbol)
28
- && order.side === record.side
29
- && order.status === 'canceled'
30
- && typeof filled === 'number'
31
- && Number.isFinite(filled)
32
- && filled === 0;
33
- }
34
- async function proveAttemptsDidNotCreateExposure(adapter, records) {
35
- const proofs = await Promise.all(records.map((record) => proveAttemptDidNotCreateExposure(adapter, record)));
36
- return proofs.every(Boolean);
37
- }
38
- /**
39
- * Resolve same-symbol ownership from the durable LIVE execution ledger and an
40
- * exchange-authoritative account capture. Only confirmed-open ledger rows can
41
- * own a symbol. An attempted-only row is a crash-ambiguous execution outcome,
42
- * so it blocks generic mutation until repeated trusted snapshots prove the
43
- * symbol flat and the durable tombstone is retired. A stably flat exchange
44
- * symbol also retires stale open rows left by a native stop/target close before
45
- * it is treated as unowned. Any position-present identity disagreement fails
46
- * closed as ambiguous.
47
- */
48
- export async function inspectWave9LiveSymbolOwnership(adapter, ledger, symbol) {
49
- const canonical = canonicalSymbol(symbol);
50
- const symbolRecords = ledger.getAll().filter((record) => canonicalSymbol(record.symbol) === canonical);
51
- const durableOwners = symbolRecords.filter((record) => record.state === 'open');
52
- const unresolvedAttempts = symbolRecords.filter((record) => record.state === 'attempted');
53
- if (durableOwners.length === 0) {
54
- if (unresolvedAttempts.length > 0) {
55
- if (!await proveAttemptsDidNotCreateExposure(adapter, unresolvedAttempts)) {
56
- return {
57
- status: 'ambiguous',
58
- reason: 'attempted_execution_outcome_not_proven_non_executing',
59
- };
60
- }
61
- const flat = await confirmWave9LivePositionFlat(adapter, symbol);
62
- if (!flat.confirmed) {
63
- return {
64
- status: 'ambiguous',
65
- reason: 'attempted_execution_outcome_with_live_or_unknown_position',
66
- };
67
- }
68
- try {
69
- for (const attempt of unresolvedAttempts)
70
- ledger.markClosed(attempt.candidateId);
71
- }
72
- catch {
73
- return {
74
- status: 'ambiguous',
75
- reason: 'authoritative_attempted_flat_ledger_reconciliation_failed',
76
- };
77
- }
78
- return { status: 'unowned', reason: 'authoritative_attempted_symbol_flat' };
79
- }
80
- return { status: 'unowned', reason: 'no_durable_open_wave9_record' };
81
- }
82
- let capture;
83
- try {
84
- capture = await captureWave9LiveAccount(adapter, ledger, 'LIVE');
85
- }
86
- catch {
87
- return { status: 'ambiguous', reason: 'authoritative_live_capture_failed' };
88
- }
89
- const positions = capture.positions.filter((position) => canonicalSymbol(position.symbol) === canonical);
90
- if (positions.length === 0) {
91
- const flat = await confirmWave9LivePositionFlat(adapter, symbol);
92
- if (!flat.confirmed) {
93
- return { status: 'ambiguous', reason: 'authoritative_flat_not_stably_confirmed' };
94
- }
95
- if (unresolvedAttempts.length > 0
96
- && !await proveAttemptsDidNotCreateExposure(adapter, unresolvedAttempts)) {
97
- return {
98
- status: 'ambiguous',
99
- reason: 'attempted_execution_outcome_not_proven_non_executing',
100
- };
101
- }
102
- try {
103
- for (const row of [...durableOwners, ...unresolvedAttempts]) {
104
- ledger.markClosed(row.candidateId);
105
- }
106
- }
107
- catch {
108
- return { status: 'ambiguous', reason: 'authoritative_flat_ledger_reconciliation_failed' };
109
- }
110
- return { status: 'unowned', reason: 'authoritative_symbol_flat' };
111
- }
112
- if (durableOwners.length !== 1) {
113
- return { status: 'ambiguous', reason: 'multiple_durable_open_wave9_records' };
114
- }
115
- if (positions.length !== 1) {
116
- return { status: 'ambiguous', reason: 'multiple_exchange_positions_on_owned_symbol' };
117
- }
118
- const owner = durableOwners[0];
119
- const position = positions[0];
120
- if (position.candidateId !== owner.candidateId
121
- || position.missionId !== owner.missionId
122
- || position.setupType !== WAVE9_BUNDLE_SETUP_TYPE
123
- || position.strategy !== owner.strategy
124
- || position.side !== expectedPositionSide(owner)) {
125
- return { status: 'ambiguous', reason: 'exchange_position_identity_mismatch' };
126
- }
127
- return {
128
- status: 'owned',
129
- reason: 'durable_open_record_matches_exchange_position',
130
- candidateId: owner.candidateId,
131
- };
132
- }