@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,112 +0,0 @@
1
- // Wires SIGTERM / SIGINT to the ShutdownCoordinator.
2
- //
3
- // Lives in its own file (separate from index.ts) so the compiled dist/index.js
4
- // — which reads env vars for the ingest-token / user-id — does not also contain
5
- // the network-send call site. OpenClaw's plugin-install heuristic flags the
6
- // combination as possible credential harvesting (false positive, but worth
7
- // avoiding by keeping each compiled file single-purpose).
8
- //
9
- // All env-var-bearing context is passed in by the caller via the typed
10
- // argument shape, NOT read from process.env here.
11
- import { LiveAdapter } from '../live/live-adapter.js';
12
- import { logger, formatError } from '../logger.js';
13
- import { initiateShutdown } from './shutdown-coordinator.js';
14
- const TAG = 'shutdown';
15
- /** The phase-2 drain body. Exported for direct unit-testing of the teardown
16
- * ordering + the StateManager flush wiring (the signal handler itself can't
17
- * be tested without process.exit). Every step is individually guarded so one
18
- * failing teardown never aborts the rest. */
19
- export async function performShutdownDrain(deps) {
20
- // Stop the approval-mode listener BEFORE the adapter shuts down.
21
- // The listener's tick may call createOrderTool which needs the
22
- // adapter; once stop() resolves, no new tick will fire.
23
- if (deps.proposalListener) {
24
- try {
25
- await deps.proposalListener.stop();
26
- }
27
- catch (err) {
28
- logger.warn(TAG, `proposalListener stop failed: ${formatError(err)}`);
29
- }
30
- }
31
- // Flush any pending audit-trail POSTs.
32
- if (deps.tradeStore) {
33
- try {
34
- await deps.tradeStore.drain();
35
- }
36
- catch (err) {
37
- logger.warn(TAG, `tradeStore drain failed: ${formatError(err)}`);
38
- }
39
- }
40
- // Stop background loops + close WS + DELETE listenKey.
41
- const live = deps.runtime.adapter;
42
- if (live instanceof LiveAdapter) {
43
- try {
44
- live.shutdown();
45
- }
46
- catch (err) {
47
- logger.warn(TAG, `LiveAdapter.shutdown failed: ${formatError(err)}`);
48
- }
49
- }
50
- // Stop the watcher last so it doesn't fire a stop after the
51
- // adapter is gone.
52
- const watcher = deps.runtime.stopWatcher;
53
- if (watcher) {
54
- try {
55
- watcher.stop();
56
- }
57
- catch (err) {
58
- logger.warn(TAG, `stopWatcher.stop failed: ${formatError(err)}`);
59
- }
60
- }
61
- // Stop the paper market feed so its interval doesn't outlive the process.
62
- const marketFeed = deps.runtime.marketFeed;
63
- if (marketFeed) {
64
- try {
65
- marketFeed.stop();
66
- }
67
- catch (err) {
68
- logger.warn(TAG, `marketFeed.stop failed: ${formatError(err)}`);
69
- }
70
- }
71
- // Flush the paper StateManager AFTER all mutation sources are stopped, so
72
- // the 1s debounce window doesn't drop the final fills/closes/PnL on restart.
73
- // flush() clears the timer and awaits the atomic save; completes in ms
74
- // inside the drain budget. Without this, every restart silently lost up to
75
- // ~1s of paper state (a just-closed position would resurrect on boot).
76
- if (deps.stateManager) {
77
- try {
78
- await deps.stateManager.flush();
79
- }
80
- catch (err) {
81
- logger.warn(TAG, `stateManager flush failed: ${formatError(err)}`);
82
- }
83
- }
84
- }
85
- /** Register graceful-shutdown handlers. Idempotent — repeat signals during
86
- * the drain are logged + ignored. After the coordinator resolves we call
87
- * process.exit(0) so systemd doesn't escalate to SIGKILL. */
88
- export function installSignalHandlers(deps) {
89
- let invoked = false;
90
- const onSignal = (signal) => {
91
- if (invoked) {
92
- logger.info(TAG, `Received ${signal} during shutdown — ignoring`);
93
- return;
94
- }
95
- invoked = true;
96
- logger.info(TAG, `Received ${signal} — initiating graceful shutdown`);
97
- void initiateShutdown({
98
- reason: signal,
99
- callbacks: {
100
- onDrainComplete: () => performShutdownDrain(deps),
101
- },
102
- }).then(() => {
103
- logger.info(TAG, 'Shutdown drain complete — exit(0)');
104
- process.exit(0);
105
- }).catch((err) => {
106
- logger.error(TAG, `Shutdown threw: ${formatError(err)} — exit(1)`);
107
- process.exit(1);
108
- });
109
- };
110
- process.on('SIGTERM', onSignal);
111
- process.on('SIGINT', onSignal);
112
- }
@@ -1,43 +0,0 @@
1
- export declare class ShutdownInProgressError extends Error {
2
- constructor(opName: string);
3
- }
4
- interface InFlightOp {
5
- name: string;
6
- startedAt: number;
7
- }
8
- /** True once SIGTERM/SIGINT has been received. New risky ops should be refused. */
9
- export declare function isShuttingDown(): boolean;
10
- /** Throw ShutdownInProgressError if shutdown has begun. Use as a guard at the
11
- * top of risky entry points (new bracket attach, modify_stop, new order). */
12
- export declare function assertNotShuttingDown(opName: string): void;
13
- /** Register an in-flight operation. The returned function MUST be called when
14
- * the op ends. Prefer `trackOp` for typical async cases. */
15
- export declare function registerOp(name: string): () => void;
16
- /** Convenience: register + auto-deregister around a promise. */
17
- export declare function trackOp<T>(name: string, fn: () => Promise<T>): Promise<T>;
18
- /** Snapshot of currently in-flight ops. Mainly for diagnostics + tests. */
19
- export declare function getInFlight(): InFlightOp[];
20
- export interface ShutdownCallbacks {
21
- /** Run after in-flight ops drain (or phase-1 deadline hits). Last chance to
22
- * flush the trade ingest queue and tear down adapters. Errors are logged
23
- * + swallowed. */
24
- onDrainComplete?: () => Promise<void>;
25
- }
26
- export interface ShutdownOptions {
27
- reason: string;
28
- /** Phase 1 budget — wait for tracked ops to settle. Default 3000 ms. */
29
- inFlightDeadlineMs?: number;
30
- /** Phase 2 budget — onDrainComplete callback. Default 2000 ms. */
31
- drainCallbackDeadlineMs?: number;
32
- /** Hard wall-clock deadline across both phases. Default 5000 ms. */
33
- totalDeadlineMs?: number;
34
- callbacks?: ShutdownCallbacks;
35
- }
36
- /** Run the drain sequence. Idempotent — second call returns the first call's
37
- * promise. Resolves when both phases are complete or the wall-clock deadline
38
- * is hit (whichever is first). The signal handler should `process.exit` after
39
- * this resolves. */
40
- export declare function initiateShutdown(opts: ShutdownOptions): Promise<void>;
41
- /** Test seam — reset module-level state. Do NOT call from production. */
42
- export declare function __resetForTesting(): void;
43
- export {};
@@ -1,131 +0,0 @@
1
- // Process-wide graceful shutdown coordinator.
2
- //
3
- // Two responsibilities:
4
- // 1. Track in-flight risky operations (bracket attach/modify, new entries)
5
- // so a SIGTERM-driven shutdown can wait for them before exiting.
6
- // 2. Block NEW risky operations from starting once shutdown begins, while
7
- // still allowing risk-reducing ops (closePosition, reduceOnly) through.
8
- //
9
- // Why a global module instead of a constructor-injected service:
10
- // - Many files own the at-risk operations (BracketManager, LiveAdapter).
11
- // Threading a coordinator through every constructor is mechanical noise
12
- // and the caller graph is fixed for this process's lifetime.
13
- // - Process-wide state is a fine match for a singleton — one shutdown event
14
- // per process, ever.
15
- // - Tests reset the singleton via `__resetForTesting()`.
16
- import { logger } from '../logger.js';
17
- const TAG = 'shutdown-coordinator';
18
- export class ShutdownInProgressError extends Error {
19
- constructor(opName) {
20
- super(`shutting_down: refused to start ${opName}`);
21
- this.name = 'ShutdownInProgressError';
22
- }
23
- }
24
- let _shuttingDown = false;
25
- const _inFlight = new Map();
26
- /** True once SIGTERM/SIGINT has been received. New risky ops should be refused. */
27
- export function isShuttingDown() {
28
- return _shuttingDown;
29
- }
30
- /** Throw ShutdownInProgressError if shutdown has begun. Use as a guard at the
31
- * top of risky entry points (new bracket attach, modify_stop, new order). */
32
- export function assertNotShuttingDown(opName) {
33
- if (_shuttingDown) {
34
- throw new ShutdownInProgressError(opName);
35
- }
36
- }
37
- /** Register an in-flight operation. The returned function MUST be called when
38
- * the op ends. Prefer `trackOp` for typical async cases. */
39
- export function registerOp(name) {
40
- const handle = Symbol(name);
41
- _inFlight.set(handle, { name, startedAt: Date.now() });
42
- return () => { _inFlight.delete(handle); };
43
- }
44
- /** Convenience: register + auto-deregister around a promise. */
45
- export async function trackOp(name, fn) {
46
- const done = registerOp(name);
47
- try {
48
- return await fn();
49
- }
50
- finally {
51
- done();
52
- }
53
- }
54
- /** Snapshot of currently in-flight ops. Mainly for diagnostics + tests. */
55
- export function getInFlight() {
56
- return Array.from(_inFlight.values()).map(o => ({ ...o }));
57
- }
58
- /** Run the drain sequence. Idempotent — second call returns the first call's
59
- * promise. Resolves when both phases are complete or the wall-clock deadline
60
- * is hit (whichever is first). The signal handler should `process.exit` after
61
- * this resolves. */
62
- export function initiateShutdown(opts) {
63
- if (_shuttingDownPromise)
64
- return _shuttingDownPromise;
65
- _shuttingDown = true;
66
- _shuttingDownPromise = runShutdown(opts);
67
- return _shuttingDownPromise;
68
- }
69
- let _shuttingDownPromise = null;
70
- async function runShutdown(opts) {
71
- // Phase-1 default sized for the worst-case bracket retry loop:
72
- // 3 attempts × ~500ms API + 1s + 2s backoff = ~4.5s. 6s leaves margin.
73
- // Phase-2 default covers TradeStoreClient.drain (network-bounded) + listen
74
- // key teardown (one DELETE).
75
- // Total wall-clock 10s sits well inside systemd's default TimeoutStopSec.
76
- const inFlightDeadline = opts.inFlightDeadlineMs ?? 6_000;
77
- const callbackDeadline = opts.drainCallbackDeadlineMs ?? 3_000;
78
- const totalDeadline = opts.totalDeadlineMs ?? 10_000;
79
- const t0 = Date.now();
80
- const remaining = () => Math.max(0, totalDeadline - (Date.now() - t0));
81
- const opsAtStart = Array.from(_inFlight.values()).map(o => o.name);
82
- logger.info(TAG, `Shutdown initiated (reason=${opts.reason}). In-flight ops: ${opsAtStart.length}` +
83
- (opsAtStart.length ? ` [${opsAtStart.join(', ')}]` : ''));
84
- // Phase 1: wait for in-flight ops to drain.
85
- const phase1Budget = Math.min(inFlightDeadline, remaining());
86
- await waitForInFlightDrain(phase1Budget);
87
- if (_inFlight.size > 0) {
88
- const stuckOps = Array.from(_inFlight.values()).map(o => o.name);
89
- logger.warn(TAG, `Phase 1 timed out after ${phase1Budget}ms — ${_inFlight.size} op(s) still in flight: [${stuckOps.join(', ')}]`);
90
- }
91
- else if (opsAtStart.length > 0) {
92
- logger.info(TAG, `Phase 1 complete: in-flight ops drained in ${Date.now() - t0}ms`);
93
- }
94
- // Phase 2: callback drain (trade-store + adapter).
95
- if (opts.callbacks?.onDrainComplete) {
96
- const phase2Budget = Math.min(callbackDeadline, remaining());
97
- if (phase2Budget <= 0) {
98
- logger.warn(TAG, 'Phase 2 skipped — total deadline exhausted by phase 1');
99
- }
100
- else {
101
- try {
102
- await Promise.race([
103
- opts.callbacks.onDrainComplete(),
104
- new Promise(resolve => setTimeout(resolve, phase2Budget)),
105
- ]);
106
- logger.info(TAG, `Phase 2 complete (total elapsed ${Date.now() - t0}ms)`);
107
- }
108
- catch (err) {
109
- const msg = err instanceof Error ? err.message : String(err);
110
- logger.warn(TAG, `Phase 2 callback threw: ${msg}`);
111
- }
112
- }
113
- }
114
- logger.info(TAG, `Shutdown coordinator finished in ${Date.now() - t0}ms`);
115
- }
116
- async function waitForInFlightDrain(budgetMs) {
117
- if (_inFlight.size === 0)
118
- return;
119
- const start = Date.now();
120
- // Poll-based; in-flight ops settle through their own promise chains and
121
- // unregister themselves. Cheaper than wiring an emitter just for this.
122
- while (_inFlight.size > 0 && Date.now() - start < budgetMs) {
123
- await new Promise(r => setTimeout(r, 50));
124
- }
125
- }
126
- /** Test seam — reset module-level state. Do NOT call from production. */
127
- export function __resetForTesting() {
128
- _shuttingDown = false;
129
- _shuttingDownPromise = null;
130
- _inFlight.clear();
131
- }
@@ -1,17 +0,0 @@
1
- /**
2
- * Narrow process-local serialization boundary shared by guarded trading
3
- * operations. Account and per-symbol operations intentionally use one queue:
4
- * a Wave 9 portfolio transition must be atomic with respect to the legacy
5
- * stop watcher, while callers gain no adapter/execution capability from the
6
- * lock itself.
7
- */
8
- export interface TradingOperationLock {
9
- withAccountLock<T>(operation: string, run: () => Promise<T>): Promise<T>;
10
- withSymbolLock<T>(symbol: string, operation: string, run: () => Promise<T>): Promise<T>;
11
- }
12
- export declare class SerialTradingOperationLock implements TradingOperationLock {
13
- private tail;
14
- private enqueue;
15
- withAccountLock<T>(_operation: string, run: () => Promise<T>): Promise<T>;
16
- withSymbolLock<T>(_symbol: string, _operation: string, run: () => Promise<T>): Promise<T>;
17
- }
@@ -1,14 +0,0 @@
1
- export class SerialTradingOperationLock {
2
- tail = Promise.resolve();
3
- enqueue(run) {
4
- const result = this.tail.then(run, run);
5
- this.tail = result.then(() => undefined, () => undefined);
6
- return result;
7
- }
8
- withAccountLock(_operation, run) {
9
- return this.enqueue(run);
10
- }
11
- withSymbolLock(_symbol, _operation, run) {
12
- return this.enqueue(run);
13
- }
14
- }
@@ -1,26 +0,0 @@
1
- import type { BracketId, BracketRole } from './bracket-types.js';
2
- import type { VenueId } from '../venues/symbols.js';
3
- /** Generate a fresh 16-char hex bracketId. */
4
- export declare function generateBracketId(): BracketId;
5
- /** Build a clientOrderId for a given bracket + role. Emits the CURRENT
6
- * (`bkt…`) scheme only — never the legacy `rc-` scheme. */
7
- export declare function buildBracketCid(bracketId: BracketId, role: BracketRole): string;
8
- /** Parse a clientOrderId. Recognises BOTH the current `bkt…` scheme and
9
- * the legacy `rc-…` scheme (so existing ledger rows / in-flight legs and
10
- * the cancelAllOrders bracket-preserve filter keep working through the
11
- * transition). Returns null for non-bracket orders (so this can be called
12
- * on every order Binance returns during reconciliation). */
13
- export declare function parseBracketCid(cid: string): {
14
- bracketId: BracketId;
15
- role: BracketRole;
16
- } | null;
17
- /** Cheap type-guard for "is this a reefclaw-managed bracket clientOrderId"
18
- * — true for both the current and legacy schemes. */
19
- export declare function isBracketCid(cid: string): boolean;
20
- /** Venue-aware parseBracketCid — Binance's dual scheme, Hyperliquid's cloids. */
21
- export declare function parseBracketClientId(venue: VenueId, cid: string): {
22
- bracketId: BracketId;
23
- role: BracketRole;
24
- } | null;
25
- /** Venue-aware isBracketCid. */
26
- export declare function isBracketClientId(venue: VenueId, cid: string): boolean;
@@ -1,112 +0,0 @@
1
- // Deterministic clientOrderId scheme for bracket orders.
2
- //
3
- // CURRENT format: bkt<16hex><role> (20 chars, well under Binance's 36)
4
- // - "bkt" fixed prefix (no dashes — does NOT look like a tagged pair)
5
- // - <16hex> shared bracketId linking entry + SL + TP of the same trade
6
- // - <role> 'e' (entry), 's' (stop-loss), 't' (take-profit)
7
- //
8
- // LEGACY format (still PARSED, never EMITTED): rc-<16hex>-<role>
9
- //
10
- // ROOT-CAUSE FIX 2026-05-16. Controlled prod reproduction proved the
11
- // recurring ~20-45s bracket cancellation is keyed to the `rc-` cid
12
- // pattern: a byte-identical-shape NON-rc closePosition pair survived
13
- // 30+ min on the SAME symbol/window where every `rc-<16hex>-{s,t}` pair
14
- // died in ~42s, `reason=none`, server-side — with the 8-surface raw-ccxt
15
- // WIDE-CANCEL-TRACE silent, the skill ccxt-less, the agent issuing zero
16
- // tool/exec calls, and OpenClaw having no native exchange. i.e. an
17
- // actor with Binance API access, OFF this VPS and outside our software,
18
- // cancels orders whose clientOrderId matches the `rc-` bracket pattern.
19
- // Renaming the scheme makes our protective brackets invisible to it —
20
- // exactly why every `ctp-`/`opguard-`/`mctest-` test order survived.
21
- //
22
- // Backward compat is load-bearing: in-flight brackets + the persisted
23
- // bracket-ledger.json carry LEGACY `rc-*` cids. parseBracketCid /
24
- // isBracketCid MUST keep recognising them so the reconciler still tracks
25
- // them and — critically — `cancelAllOrders`'s bracket-preserve filter
26
- // never strips a legacy leg off a live position during the transition.
27
- // Only buildBracketCid changes (emits the new scheme); legacy ages out.
28
- //
29
- // Parseability is load-bearing: on restart, the reconciler fetches open
30
- // orders from Binance, parses each clientOrderId, and reassembles brackets
31
- // from the (bracketId, role) pairs. No reliance on local state to find them.
32
- //
33
- // Binance USDⓂ-Futures newClientOrderId charset is documented as
34
- // ^[\.A-Z\:/a-z0-9_-]{1,36}$ — `bkt[0-9a-f]{16}[est]` (20 chars, lowercase
35
- // alphanumeric) is well within it. Verified vs developers.binance.com
36
- // USDⓂ New-Order clientOrderId filter, 2026-05-16.
37
- import { randomBytes } from 'node:crypto';
38
- import { parseHlBracketCloid, isHlBracketCloid } from '../venues/hyperliquid/hl-cloid.js';
39
- // Emitted scheme (no `rc-`, no dashes).
40
- const CID_REGEX = /^bkt([0-9a-f]{16})([est])$/;
41
- // Legacy scheme — still parsed for backward compat, never emitted again.
42
- const LEGACY_CID_REGEX = /^rc-([0-9a-f]{16})-([est])$/;
43
- const ROLE_TO_TAG = {
44
- entry: 'e',
45
- stop: 's',
46
- target: 't',
47
- };
48
- const TAG_TO_ROLE = {
49
- e: 'entry',
50
- s: 'stop',
51
- t: 'target',
52
- };
53
- /** Generate a fresh 16-char hex bracketId. */
54
- export function generateBracketId() {
55
- return randomBytes(8).toString('hex');
56
- }
57
- /** Build a clientOrderId for a given bracket + role. Emits the CURRENT
58
- * (`bkt…`) scheme only — never the legacy `rc-` scheme. */
59
- export function buildBracketCid(bracketId, role) {
60
- if (!/^[0-9a-f]{16}$/.test(bracketId)) {
61
- throw new Error(`Invalid bracketId: ${bracketId} — expected 16 hex chars`);
62
- }
63
- return `bkt${bracketId}${ROLE_TO_TAG[role]}`;
64
- }
65
- /** Parse a clientOrderId. Recognises BOTH the current `bkt…` scheme and
66
- * the legacy `rc-…` scheme (so existing ledger rows / in-flight legs and
67
- * the cancelAllOrders bracket-preserve filter keep working through the
68
- * transition). Returns null for non-bracket orders (so this can be called
69
- * on every order Binance returns during reconciliation). */
70
- export function parseBracketCid(cid) {
71
- const match = CID_REGEX.exec(cid) ?? LEGACY_CID_REGEX.exec(cid);
72
- if (!match)
73
- return null;
74
- const bracketId = match[1];
75
- const tag = match[2];
76
- return { bracketId, role: TAG_TO_ROLE[tag] };
77
- }
78
- /** Cheap type-guard for "is this a reefclaw-managed bracket clientOrderId"
79
- * — true for both the current and legacy schemes. */
80
- export function isBracketCid(cid) {
81
- return CID_REGEX.test(cid) || LEGACY_CID_REGEX.test(cid);
82
- }
83
- // ---- Venue-dispatched recognition (multi-venue Phase 0 seam) ----
84
- //
85
- // ALL bracket client-order-id recognition stays centralized in THIS module —
86
- // the brackets.md rule ("never hardcode an rc-/bkt regex elsewhere") extends
87
- // per-venue. Binance = the bkt/rc- schemes above. Hyperliquid = 128-bit hex
88
- // cloids (`0xbc7…`, hl-cloid.ts §5.7 — a Binance-style ASCII cid is not even a
89
- // legal HL client id). Phase 3 wires that dispatch HERE, and nowhere else.
90
- //
91
- // ★ NEITHER VENUE MAY EVER RECOGNISE THE OTHER'S SCHEME. A false positive is
92
- // destructive: `cancelAllOrders` preserves anything that parses as "ours", and
93
- // the reconciler cancels/re-attaches on that basis. A foreign id that parsed as
94
- // ours would be treated as a protective leg we own.
95
- /** Venue-aware parseBracketCid — Binance's dual scheme, Hyperliquid's cloids. */
96
- export function parseBracketClientId(venue, cid) {
97
- switch (venue) {
98
- case 'binance':
99
- return parseBracketCid(cid);
100
- case 'hyperliquid':
101
- return parseHlBracketCloid(cid);
102
- }
103
- }
104
- /** Venue-aware isBracketCid. */
105
- export function isBracketClientId(venue, cid) {
106
- switch (venue) {
107
- case 'binance':
108
- return isBracketCid(cid);
109
- case 'hyperliquid':
110
- return isHlBracketCloid(cid);
111
- }
112
- }
@@ -1,54 +0,0 @@
1
- import type { BracketId, BracketLedgerEntry, BracketState } from './bracket-types.js';
2
- /** Canonical form for a bracket-ledger symbol key.
3
- *
4
- * CCXT returns Binance Futures symbols as `BTC/USDT:USDT` (the `:USDT`
5
- * suffix is the settlement asset); the skill + agent's tool args use the
6
- * un-suffixed `BTC/USDT`. Historically we keyed the ledger by whatever the
7
- * caller passed in — which produced doubled rows per symbol and caused the
8
- * 2026-04-21 ADA audit-vs-attach deadlock (9 of 11 symbols had both keys;
9
- * see `memory/feedback_symbol_normalize_boundary.md`). This helper picks a
10
- * single canonical form (un-suffixed) and is applied at every public
11
- * BracketLedger entry point.
12
- *
13
- * Matches `user-data-stream-controller.ts` and `webapp/src/lib/symbols.ts`
14
- * `normalizeSymbol`, so the bracket path lines up with the WS store + UI. */
15
- export declare function normalizeBracketSymbol(s: string): string;
16
- /** Test seam — lets tests override the clock for deterministic timestamps. */
17
- export type NowFn = () => string;
18
- export declare class BracketLedger {
19
- private readonly filePath;
20
- private readonly dir;
21
- private readonly now;
22
- private entries;
23
- constructor(pluginId?: string, opts?: {
24
- now?: NowFn;
25
- basePath?: string;
26
- });
27
- /** Insert or replace the entry for a symbol. Persists synchronously.
28
- * Symbol is normalized; the stored entry carries the canonical form so
29
- * later readers see it regardless of whether the caller passed suffixed
30
- * or un-suffixed input. */
31
- upsert(entry: Omit<BracketLedgerEntry, 'createdAt' | 'updatedAt'> & {
32
- createdAt?: string;
33
- updatedAt?: string;
34
- }): BracketLedgerEntry;
35
- /** Mutate the state of an existing entry. Throws if entry not found. */
36
- markState(symbol: string, nextState: BracketState, extras?: Partial<Pick<BracketLedgerEntry, 'attachStartedAt' | 'attachCompletedAt' | 'attachLatencyMs' | 'closedAt' | 'closeReason' | 'lastError' | 'slCid' | 'tpCid' | 'qty'>>): BracketLedgerEntry;
37
- getBySymbol(symbol: string): BracketLedgerEntry | undefined;
38
- getByBracketId(bracketId: BracketId): BracketLedgerEntry | undefined;
39
- /** All active (non-terminal) entries. Used by reconciler + telemetry. */
40
- getActive(): BracketLedgerEntry[];
41
- /** Every entry in the ledger, including terminal ones (kept for audit). */
42
- getAll(): BracketLedgerEntry[];
43
- /** Remove an entry — typically only called for very old terminal entries
44
- * during periodic cleanup. Does NOT persist unless mutated. */
45
- remove(symbol: string): boolean;
46
- /** Number of entries currently in the ledger. */
47
- size(): number;
48
- /** Test seam — full ledger file path. */
49
- getFilePath(): string;
50
- private loadOrInit;
51
- private persist;
52
- private validateFile;
53
- private validateEntry;
54
- }