@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,74 +0,0 @@
1
- import type { PositionMetadata } from '../simulator/types.js';
2
- export interface PendingEntry {
3
- /** Primary lookup key. Initially the client order id (the stash happens
4
- * BEFORE submission, when no exchange orderId exists yet); promote()
5
- * re-keys it to the exchange-issued orderId once the REST ack returns. */
6
- orderId: string;
7
- /** Client order id (idempotency key) — secondary lookup key. The WS
8
- * ORDER_TRADE_UPDATE carries it (`o.c`), so a fill that arrives BEFORE
9
- * the REST response (routine for market orders) still finds the stash. */
10
- clientOrderId?: string;
11
- /** Canonical (un-suffixed) symbol. */
12
- symbol: string;
13
- /** Side the agent intended at create_order time. */
14
- side: 'buy' | 'sell';
15
- metadata: PositionMetadata;
16
- createdAt: number;
17
- /** Epoch ms after which this entry is dropped. */
18
- expiresAt: number;
19
- }
20
- export type NowFn = () => number;
21
- export interface PendingEntryStoreOptions {
22
- pluginId?: string;
23
- basePath?: string;
24
- now?: NowFn;
25
- ttlMs?: number;
26
- }
27
- export declare class PendingEntryStore {
28
- private readonly filePath;
29
- private readonly dir;
30
- private readonly now;
31
- private readonly ttlMs;
32
- private entries;
33
- /** clientOrderId → primary key in `entries`. Lets WS fills that beat the
34
- * REST ack (no exchange orderId known yet) find the stash by cid. */
35
- private cidIndex;
36
- constructor(opts?: PendingEntryStoreOptions);
37
- /** Stash metadata until the WS fill for this order arrives. Keyed by
38
- * `orderId`; when `clientOrderId` is provided the entry is also findable
39
- * by it (pre-submission stashes pass the cid as BOTH — see create_order). */
40
- put(input: {
41
- orderId: string;
42
- clientOrderId?: string;
43
- symbol: string;
44
- side: 'buy' | 'sell';
45
- metadata: PositionMetadata;
46
- }): void;
47
- /** Re-key a pre-submission stash (keyed by clientOrderId) to the
48
- * exchange-issued orderId once the REST ack returns. The cid alias keeps
49
- * working. No-op when the entry is gone (already consumed by a WS fill
50
- * that beat the REST response, or expired). */
51
- promote(fromKey: string, exchangeOrderId: string): void;
52
- /** Retrieve metadata stashed for an orderId (or clientOrderId alias).
53
- * Does NOT remove the entry — callers should call `consume(orderId)` to
54
- * remove on first match, since multiple partial fills on the same limit
55
- * order all share one orderId and the FIRST fill is the entry; subsequent
56
- * are scale-ins of an already-registered position (state-store branch
57
- * handles those). */
58
- get(orderId: string): PendingEntry | undefined;
59
- /** Atomic get + remove (accepts orderId or clientOrderId). Use this when
60
- * you've already consumed the metadata to post an entry row and don't
61
- * want it picked up again. */
62
- consume(orderId: string): PendingEntry | undefined;
63
- /** Remove an entry without retrieval (e.g. on cancel). */
64
- drop(orderId: string): boolean;
65
- /** Resolve a lookup key that may be an orderId or a clientOrderId alias. */
66
- private resolveKey;
67
- private deleteEntry;
68
- size(): number;
69
- getFilePath(): string;
70
- private pruneExpired;
71
- private loadOrInit;
72
- private persist;
73
- private validateFile;
74
- }
@@ -1,236 +0,0 @@
1
- // Pending-entry metadata cache.
2
- //
3
- // When the agent calls create_order with v2.10.0 metadata (thesis, setup_type,
4
- // regime, scorecard_verdict, confluence_score, etc.) for a LIMIT order that
5
- // doesn't fill immediately, the metadata is stashed here keyed by the
6
- // exchange's orderId. When the WS-driven fill arrives later (could be seconds
7
- // or hours), `onWsFillObserved` looks up the metadata and posts the entry /
8
- // scale-in decision row with the original rationale intact.
9
- //
10
- // Without this cache, limit-order entries land in `position_entries` with
11
- // thesis='(no thesis recorded)' / setupType='unknown' — useless for Phase 2
12
- // outcome attribution and Phase 3 mining.
13
- //
14
- // Persistence: same atomic-rename pattern as bracket-ledger / position-state-
15
- // store. File at ~/.openclaw/plugins/<pluginId>/pending-entry-metadata.json.
16
- //
17
- // TTL: entries auto-expire 24 hours after creation (limit orders rarely live
18
- // longer; expired entries are pruned on every load + every write to keep the
19
- // file bounded).
20
- import { existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from 'node:fs';
21
- import { join } from 'node:path';
22
- import { resolvePluginsBaseDir } from '../util/plugin-paths.js';
23
- import { logger, formatError } from '../logger.js';
24
- const TAG = 'pending-entry-metadata';
25
- const DEFAULT_PLUGIN_ID = 'reefclaw-paper-trading';
26
- const STATE_FILENAME = 'pending-entry-metadata.json';
27
- const SCHEMA_VERSION = 1;
28
- const DEFAULT_TTL_MS = 24 * 60 * 60 * 1000;
29
- const defaultNow = () => Date.now();
30
- export class PendingEntryStore {
31
- filePath;
32
- dir;
33
- now;
34
- ttlMs;
35
- entries = new Map();
36
- /** clientOrderId → primary key in `entries`. Lets WS fills that beat the
37
- * REST ack (no exchange orderId known yet) find the stash by cid. */
38
- cidIndex = new Map();
39
- constructor(opts) {
40
- const base = resolvePluginsBaseDir(opts?.basePath);
41
- this.dir = join(base, opts?.pluginId ?? DEFAULT_PLUGIN_ID);
42
- this.filePath = join(this.dir, STATE_FILENAME);
43
- this.now = opts?.now ?? defaultNow;
44
- this.ttlMs = opts?.ttlMs ?? DEFAULT_TTL_MS;
45
- if (!existsSync(this.dir))
46
- mkdirSync(this.dir, { recursive: true });
47
- this.loadOrInit();
48
- }
49
- /** Stash metadata until the WS fill for this order arrives. Keyed by
50
- * `orderId`; when `clientOrderId` is provided the entry is also findable
51
- * by it (pre-submission stashes pass the cid as BOTH — see create_order). */
52
- put(input) {
53
- const ts = this.now();
54
- this.entries.set(input.orderId, {
55
- orderId: input.orderId,
56
- ...(input.clientOrderId ? { clientOrderId: input.clientOrderId } : {}),
57
- symbol: input.symbol,
58
- side: input.side,
59
- metadata: input.metadata,
60
- createdAt: ts,
61
- expiresAt: ts + this.ttlMs,
62
- });
63
- if (input.clientOrderId)
64
- this.cidIndex.set(input.clientOrderId, input.orderId);
65
- this.persist();
66
- }
67
- /** Re-key a pre-submission stash (keyed by clientOrderId) to the
68
- * exchange-issued orderId once the REST ack returns. The cid alias keeps
69
- * working. No-op when the entry is gone (already consumed by a WS fill
70
- * that beat the REST response, or expired). */
71
- promote(fromKey, exchangeOrderId) {
72
- const key = this.resolveKey(fromKey);
73
- if (key === undefined || key === exchangeOrderId)
74
- return;
75
- const entry = this.entries.get(key);
76
- if (!entry)
77
- return;
78
- this.entries.delete(key);
79
- entry.orderId = exchangeOrderId;
80
- this.entries.set(exchangeOrderId, entry);
81
- if (entry.clientOrderId)
82
- this.cidIndex.set(entry.clientOrderId, exchangeOrderId);
83
- this.persist();
84
- }
85
- /** Retrieve metadata stashed for an orderId (or clientOrderId alias).
86
- * Does NOT remove the entry — callers should call `consume(orderId)` to
87
- * remove on first match, since multiple partial fills on the same limit
88
- * order all share one orderId and the FIRST fill is the entry; subsequent
89
- * are scale-ins of an already-registered position (state-store branch
90
- * handles those). */
91
- get(orderId) {
92
- this.pruneExpired();
93
- const key = this.resolveKey(orderId);
94
- return key === undefined ? undefined : this.entries.get(key);
95
- }
96
- /** Atomic get + remove (accepts orderId or clientOrderId). Use this when
97
- * you've already consumed the metadata to post an entry row and don't
98
- * want it picked up again. */
99
- consume(orderId) {
100
- this.pruneExpired();
101
- const key = this.resolveKey(orderId);
102
- if (key === undefined)
103
- return undefined;
104
- const entry = this.entries.get(key);
105
- if (!entry)
106
- return undefined;
107
- this.deleteEntry(key, entry);
108
- this.persist();
109
- return entry;
110
- }
111
- /** Remove an entry without retrieval (e.g. on cancel). */
112
- drop(orderId) {
113
- const key = this.resolveKey(orderId);
114
- if (key === undefined)
115
- return false;
116
- const entry = this.entries.get(key);
117
- if (!entry)
118
- return false;
119
- this.deleteEntry(key, entry);
120
- this.persist();
121
- return true;
122
- }
123
- /** Resolve a lookup key that may be an orderId or a clientOrderId alias. */
124
- resolveKey(k) {
125
- if (this.entries.has(k))
126
- return k;
127
- const viaCid = this.cidIndex.get(k);
128
- return viaCid !== undefined && this.entries.has(viaCid) ? viaCid : undefined;
129
- }
130
- deleteEntry(key, entry) {
131
- this.entries.delete(key);
132
- if (entry.clientOrderId)
133
- this.cidIndex.delete(entry.clientOrderId);
134
- }
135
- size() {
136
- return this.entries.size;
137
- }
138
- getFilePath() {
139
- return this.filePath;
140
- }
141
- // ---- Internals ----
142
- pruneExpired() {
143
- const ts = this.now();
144
- let pruned = false;
145
- for (const [orderId, entry] of this.entries) {
146
- if (entry.expiresAt <= ts) {
147
- this.deleteEntry(orderId, entry);
148
- pruned = true;
149
- }
150
- }
151
- if (pruned)
152
- this.persist();
153
- }
154
- loadOrInit() {
155
- if (!existsSync(this.filePath)) {
156
- logger.info(TAG, `No state file at ${this.filePath}; starting empty`);
157
- return;
158
- }
159
- let raw;
160
- try {
161
- raw = readFileSync(this.filePath, 'utf8');
162
- }
163
- catch (err) {
164
- throw new Error(`pending-entry-metadata: failed to read ${this.filePath}: ${formatError(err)}`);
165
- }
166
- let parsed;
167
- try {
168
- parsed = JSON.parse(raw);
169
- }
170
- catch (err) {
171
- throw new Error(`pending-entry-metadata: ${this.filePath} is not valid JSON: ${formatError(err)}`);
172
- }
173
- const file = this.validateFile(parsed);
174
- const ts = this.now();
175
- let kept = 0;
176
- let dropped = 0;
177
- for (const entry of file.entries) {
178
- if (entry.expiresAt > ts) {
179
- this.entries.set(entry.orderId, entry);
180
- if (entry.clientOrderId)
181
- this.cidIndex.set(entry.clientOrderId, entry.orderId);
182
- kept++;
183
- }
184
- else {
185
- dropped++;
186
- }
187
- }
188
- logger.info(TAG, `Loaded ${kept} pending entries from ${this.filePath}` +
189
- (dropped > 0 ? ` (pruned ${dropped} expired)` : ''));
190
- if (dropped > 0)
191
- this.persist();
192
- }
193
- persist() {
194
- const file = {
195
- schemaVersion: SCHEMA_VERSION,
196
- entries: Array.from(this.entries.values()),
197
- };
198
- const tempPath = `${this.filePath}.tmp`;
199
- writeFileSync(tempPath, JSON.stringify(file, null, 2));
200
- renameSync(tempPath, this.filePath);
201
- }
202
- validateFile(raw) {
203
- if (!isRecord(raw))
204
- throw new Error('pending-entry-metadata: file root is not an object');
205
- if (raw.schemaVersion !== SCHEMA_VERSION) {
206
- throw new Error(`pending-entry-metadata: unsupported schemaVersion ${String(raw.schemaVersion)} (expected ${SCHEMA_VERSION})`);
207
- }
208
- if (!Array.isArray(raw.entries))
209
- throw new Error('pending-entry-metadata: entries is not an array');
210
- const entries = [];
211
- for (const e of raw.entries) {
212
- if (!isRecord(e))
213
- throw new Error('pending-entry-metadata: entry is not an object');
214
- if (typeof e.orderId !== 'string' || e.orderId.length === 0) {
215
- throw new Error('pending-entry-metadata: entry missing orderId');
216
- }
217
- if (e.clientOrderId !== undefined && (typeof e.clientOrderId !== 'string' || e.clientOrderId.length === 0)) {
218
- throw new Error('pending-entry-metadata: invalid clientOrderId');
219
- }
220
- if (typeof e.symbol !== 'string' || e.symbol.length === 0) {
221
- throw new Error('pending-entry-metadata: entry missing symbol');
222
- }
223
- if (e.side !== 'buy' && e.side !== 'sell') {
224
- throw new Error(`pending-entry-metadata: bad side ${String(e.side)}`);
225
- }
226
- if (typeof e.expiresAt !== 'number' || !Number.isFinite(e.expiresAt)) {
227
- throw new Error('pending-entry-metadata: missing/invalid expiresAt');
228
- }
229
- entries.push(e);
230
- }
231
- return { schemaVersion: SCHEMA_VERSION, entries };
232
- }
233
- }
234
- function isRecord(v) {
235
- return typeof v === 'object' && v !== null && !Array.isArray(v);
236
- }
@@ -1,171 +0,0 @@
1
- import type { PositionDecisionsClient } from './position-decisions-client.js';
2
- import type { PositionStateStore } from '../live/position-state-store.js';
3
- import type { CcxtOrder } from '../types.js';
4
- import type { IExchangeAdapter } from '../exchange-adapter.js';
5
- import type { PositionMetadata } from '../simulator/types.js';
6
- import type { PendingEntryStore } from './pending-entry-metadata.js';
7
- import type { ReentryTracker } from '../portfolio/reentry-tracker.js';
8
- export interface AutoCaptureContext {
9
- decisionsClient?: PositionDecisionsClient;
10
- stateStore?: PositionStateStore;
11
- /** Stash for create_order metadata that arrives BEFORE the fill (limit
12
- * orders that don't fill immediately). Looked up by exchangeOrderId when
13
- * the WS fill arrives via `onWsFillObserved`. */
14
- pendingEntries?: PendingEntryStore;
15
- userId?: string;
16
- /** When true, a reduce-only fill that takes a journaled position flat is
17
- * auto-captured as an exact close (bracket SL/TP fill or other close that
18
- * bypassed close_position). Default behaviour when unset is the legacy
19
- * no-op (reduce-only fills ignored). Env kill-switch: RC_JOURNAL_CLOSE_ON_FILL
20
- * (set 'off' to disable). See docs/CLAUDE/position-journal.md (close-bypass). */
21
- closeOnReduceOnlyFill?: boolean;
22
- /** Resolve the active trading book ('paper' | 'live') at capture time, read
23
- * from the current adapter (so it follows a runtime reconnect). Tags the
24
- * journal position row so paper and live entries can be segregated. */
25
- resolveMode?: () => 'paper' | 'live';
26
- /** Venue this gateway trades ('binance' | 'hyperliquid'). Static per process
27
- * — changing venue requires a config edit + restart (plan §5.2), so unlike
28
- * `resolveMode` this is a plain value, not a resolver. Tags journal rows
29
- * (positions.exchange, migration 0058). */
30
- venue?: 'binance' | 'hyperliquid';
31
- /** Resolve the ACTIVE adapter at capture time (follows a runtime reconnect,
32
- * same deferred-closure pattern as resolveMode). Used by the stale-state
33
- * defense in onCreateOrderFilled: when the state-store claims an open
34
- * position but the exchange position is exactly the just-filled quantity,
35
- * the prior exposure was closed outside the journal (watcher/manual) and
36
- * the mapping is STALE — stitching onto it fabricates P&L (issue #199). */
37
- resolveAdapter?: () => IExchangeAdapter | undefined;
38
- /** Re-entry tracker (issue #204) — every close path records the exit so
39
- * scan_pairs can flag setups already traded within the current signal bar. */
40
- reentryTracker?: ReentryTracker;
41
- }
42
- /** Engine-exact paper fill economics attached by the simulator to close-order
43
- * results (`order.info.paperTrade`, issue #201). All numbers are quote-ccy. */
44
- export interface PaperTradeInfo {
45
- grossRealizedPnl: number;
46
- netRealizedPnl: number;
47
- openFee: number;
48
- closeFee: number;
49
- setupType?: string;
50
- }
51
- /** Extract the simulator's engine-exact trade economics from a close order,
52
- * with strict numeric guards (absent on live orders → undefined). */
53
- export declare function extractPaperTrade(order: CcxtOrder | undefined): PaperTradeInfo | undefined;
54
- export interface CreateOrderInputs {
55
- symbol: string;
56
- side: 'buy' | 'sell';
57
- metadata?: PositionMetadata;
58
- }
59
- /** Called after a successful adapter.createOrder().
60
- *
61
- * For PR 1, we treat any non-zero `filled` quantity as an entry event and
62
- * upsert the parent position + post the entry decision row. Limit orders that
63
- * haven't filled yet are skipped (caller can call us again from the WS-ingest
64
- * pipeline once they fill — that wiring is the follow-up).
65
- *
66
- * Always-fail-open: webapp errors are logged but never thrown.
67
- */
68
- export declare function onCreateOrderFilled(ctx: AutoCaptureContext, inputs: CreateOrderInputs, order: CcxtOrder): Promise<void>;
69
- export interface ClosePositionInputs {
70
- symbol: string;
71
- closeReason: string;
72
- closeAssessment: Record<string, unknown>;
73
- /** Optional v2.10.0 inputs the agent may have passed alongside reason+assessment. */
74
- scorecardVerdict?: string;
75
- confluenceScore?: number;
76
- regime?: string;
77
- regimeConfidence?: number;
78
- }
79
- /** Called after a successful adapter.closePosition() with the v2.10.0 reason +
80
- * assessment from close_position.ts. Looks up the cached position UUID, posts
81
- * the close decision row, and drops the local state entry. */
82
- export declare function onClosePositionFilled(ctx: AutoCaptureContext, inputs: ClosePositionInputs, order: CcxtOrder): Promise<void>;
83
- export interface AutoFlattenCloseInputs {
84
- symbol: string;
85
- /** Actual average fill price of the flatten close (resolved, never a limit). */
86
- fillPrice: number;
87
- fillSize: number;
88
- exchangeTradeId?: string;
89
- observedAtMs?: number;
90
- }
91
- /** Journal the close produced by an adapter-internal auto-flatten
92
- * (`bracket_attach_failed`). Those flattens call `adapter.closePosition`
93
- * directly, bypassing the close_position tool, so `onClosePositionFilled`
94
- * never runs and the position row orphaned as status='open' (issue #196:
95
- * LTC 2026-07-14, TAO 2026-07-15 — both showed 1 exchange position vs 2 in the
96
- * journal). Polls briefly for the entry journal's webappPositionId (the
97
- * entry's WS fill can arrive just after the flatten), then posts an idempotent
98
- * close row (UNIQUE on position_id) and drops the state-store entry. Fail-open;
99
- * the boot DB reconcile sweep is the backstop if the entry never journals. */
100
- export declare function onAutoFlattenClose(ctx: AutoCaptureContext, inputs: AutoFlattenCloseInputs, lookup?: {
101
- attempts: number;
102
- intervalMs: number;
103
- }): Promise<void>;
104
- export interface StopWatcherCloseInputs {
105
- symbol: string;
106
- stopPrice: number;
107
- markPrice: number;
108
- /** The executed close order from adapter.closePosition (may be absent if the
109
- * close resolved through a path that didn't surface it). */
110
- order?: CcxtOrder;
111
- }
112
- /** Journal a stop-watcher auto-close (issue #199).
113
- *
114
- * The watcher calls `adapter.closePosition(symbol, 'stop_watcher')` directly —
115
- * it never goes through the close_position tool, and paper has no WS fill
116
- * stream, so before this hook every watcher close left the journal position
117
- * (and the state-store mapping) alive: the next trade on the symbol was then
118
- * silently dropped or stitched onto the stale position, fabricating P&L
119
- * (measured 14/69 corrupted closes on the 2026-07 HL soak; worst single
120
- * fabrication −$117.86 vs a real −$10.63).
121
- *
122
- * Contract: the engine exposure is DEFINITIVELY gone when this runs (the
123
- * watcher's close resolved), so the state-store entry is always dropped —
124
- * even when we can't post a close row (the periodic DB sweep then heals the
125
- * orphaned DB row instead of a later close being mis-stitched). Fail-open. */
126
- export declare function onStopWatcherClose(ctx: AutoCaptureContext, inputs: StopWatcherCloseInputs): Promise<void>;
127
- /** WS-driven fill observed. Resolves the PR1 deferral that limit-order fills
128
- * + scale-ins were silently dropped. Branches on three cases:
129
- *
130
- * - reduceOnly fill → ignored here (close path runs from close_position
131
- * tool with v2.10.0 reason+assessment; bracket SL/TP
132
- * fills also reduce-only and the legacy bracket
133
- * handler covers those).
134
- * - new-symbol entry → no state-store row → register the position +
135
- * post entry decision row (uses pending metadata
136
- * from the cache, or '(no thesis recorded)' fallback).
137
- * - same-side fill on → state-store row exists with same side → SCALE-IN.
138
- * existing position Posts a position_entries row with is_scale_in=true.
139
- * Does NOT create a new positions row (single parent
140
- * per open exposure).
141
- * - opposite-side fill → state-store has same symbol but opposite side.
142
- * on existing position Treated as a manual flatten that bypassed the
143
- * close_position tool — skip (cleaner to require
144
- * close_position for proper rationale capture).
145
- *
146
- * Dedup: when create_order's market-order path already captured an entry
147
- * synchronously, the state-store entry's `openedFromExchangeTradeId` matches
148
- * this fill's orderId. We detect that and skip to avoid double-posting. */
149
- export interface WsFillInputs {
150
- symbol: string;
151
- side: 'buy' | 'sell';
152
- exchangeOrderId: string;
153
- exchangeTradeId: string;
154
- fillPrice: number;
155
- fillSize: number;
156
- reduceOnly: boolean;
157
- /** Binance-exact realised PnL on this specific fill (`o.rp`). Used to sum the
158
- * position's realised PnL when a reduce-only fill takes it flat. */
159
- realizedPnl?: number;
160
- /** Client order id of the fill. Lets the reduce-only close handler tag a
161
- * bracket SL/TP fill (cid is a bracket cid) vs an external reduce-only close. */
162
- clientOrderId?: string;
163
- /** Timestamp from the exchange. Falls back to Date.now() if not provided. */
164
- exchangeTimeMs?: number;
165
- }
166
- export declare function onWsFillObserved(ctx: AutoCaptureContext, fill: WsFillInputs): Promise<void>;
167
- /** Pinned-plan subset persisted to position_entries.metadata (free-form JSONB).
168
- * Keys are snake_case per the canonical-JSONB-key rule (CLAUDE.md learning-loop:
169
- * a camelCase mismatch previously broke learning matching). Returns undefined
170
- * when neither field is present so we never write an empty object. */
171
- export declare function buildEntryPlanMetadata(md: PositionMetadata | undefined): Record<string, unknown> | undefined;