@reefclaw/connect 0.1.10 → 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 (396) hide show
  1. package/assets/bridge/gateway/event-parser.d.ts +6 -1
  2. package/assets/bridge/gateway/event-parser.js +19 -2
  3. package/assets/bridge/gateway/heartbeat-cron.d.ts +27 -0
  4. package/assets/bridge/gateway/heartbeat-cron.js +85 -0
  5. package/assets/bridge/gateway/poller.d.ts +1 -0
  6. package/assets/bridge/gateway/poller.js +14 -2
  7. package/assets/bridge/providers/gateway.d.ts +24 -2
  8. package/assets/bridge/providers/gateway.js +124 -25
  9. package/assets/bridge/setup.js +6 -51
  10. package/assets/shared/signals/conditions/registry.js +11 -2
  11. package/assets/shared/signals/strategy-adapter.js +17 -7
  12. package/assets/skill/SKILL.md +2 -0
  13. package/dist/deps.js +2 -2
  14. package/dist/plugin.js +35 -7
  15. package/package.json +1 -1
  16. package/assets/plugin/audit/mode-transition-audit.d.ts +0 -11
  17. package/assets/plugin/audit/mode-transition-audit.js +0 -29
  18. package/assets/plugin/balance-utils.d.ts +0 -36
  19. package/assets/plugin/balance-utils.js +0 -98
  20. package/assets/plugin/ccxt/binance-ban-gate.d.ts +0 -47
  21. package/assets/plugin/ccxt/binance-ban-gate.js +0 -420
  22. package/assets/plugin/ccxt/binance-private.d.ts +0 -346
  23. package/assets/plugin/ccxt/binance-private.js +0 -1525
  24. package/assets/plugin/ccxt/binance-public.d.ts +0 -34
  25. package/assets/plugin/ccxt/binance-public.js +0 -180
  26. package/assets/plugin/ccxt/intel-public.d.ts +0 -25
  27. package/assets/plugin/ccxt/intel-public.js +0 -80
  28. package/assets/plugin/ccxt/public-market-data-api.d.ts +0 -12
  29. package/assets/plugin/ccxt/public-market-data-api.js +0 -9
  30. package/assets/plugin/config/agent-config-client.d.ts +0 -77
  31. package/assets/plugin/config/agent-config-client.js +0 -188
  32. package/assets/plugin/config/agent-config-poller.d.ts +0 -32
  33. package/assets/plugin/config/agent-config-poller.js +0 -101
  34. package/assets/plugin/config/brackets-config.d.ts +0 -22
  35. package/assets/plugin/config/brackets-config.js +0 -58
  36. package/assets/plugin/config/entitlement-gate.d.ts +0 -51
  37. package/assets/plugin/config/entitlement-gate.js +0 -137
  38. package/assets/plugin/config/gate-store.d.ts +0 -18
  39. package/assets/plugin/config/gate-store.js +0 -61
  40. package/assets/plugin/config/plugin-config-io.d.ts +0 -215
  41. package/assets/plugin/config/plugin-config-io.js +0 -111
  42. package/assets/plugin/config/position-review-config.d.ts +0 -35
  43. package/assets/plugin/config/position-review-config.js +0 -105
  44. package/assets/plugin/config/tool-gate.d.ts +0 -53
  45. package/assets/plugin/config/tool-gate.js +0 -128
  46. package/assets/plugin/config/user-data-stream-config.d.ts +0 -89
  47. package/assets/plugin/config/user-data-stream-config.js +0 -239
  48. package/assets/plugin/connector-supervisor.d.ts +0 -36
  49. package/assets/plugin/connector-supervisor.js +0 -149
  50. package/assets/plugin/exchange-adapter.d.ts +0 -65
  51. package/assets/plugin/exchange-adapter.js +0 -4
  52. package/assets/plugin/index.d.ts +0 -30
  53. package/assets/plugin/index.js +0 -2678
  54. package/assets/plugin/ingest/pending-entry-metadata.d.ts +0 -74
  55. package/assets/plugin/ingest/pending-entry-metadata.js +0 -236
  56. package/assets/plugin/ingest/position-auto-capture.d.ts +0 -103
  57. package/assets/plugin/ingest/position-auto-capture.js +0 -411
  58. package/assets/plugin/ingest/position-decisions-client.d.ts +0 -322
  59. package/assets/plugin/ingest/position-decisions-client.js +0 -296
  60. package/assets/plugin/ingest/readiness-reporter.d.ts +0 -42
  61. package/assets/plugin/ingest/readiness-reporter.js +0 -163
  62. package/assets/plugin/ingest/reconcile-db-vs-exchange.d.ts +0 -13
  63. package/assets/plugin/ingest/reconcile-db-vs-exchange.js +0 -114
  64. package/assets/plugin/ingest/reconciler-cleanup.d.ts +0 -37
  65. package/assets/plugin/ingest/reconciler-cleanup.js +0 -147
  66. package/assets/plugin/ingest/rest-gap-filler.d.ts +0 -191
  67. package/assets/plugin/ingest/rest-gap-filler.js +0 -565
  68. package/assets/plugin/ingest/touched-symbols-store.d.ts +0 -25
  69. package/assets/plugin/ingest/touched-symbols-store.js +0 -96
  70. package/assets/plugin/ingest/trade-store-client.d.ts +0 -40
  71. package/assets/plugin/ingest/trade-store-client.js +0 -125
  72. package/assets/plugin/ingest/ws-ingest.d.ts +0 -43
  73. package/assets/plugin/ingest/ws-ingest.js +0 -126
  74. package/assets/plugin/learning/setup-family.d.ts +0 -21
  75. package/assets/plugin/learning/setup-family.js +0 -103
  76. package/assets/plugin/lifecycle/install-signal-handlers.d.ts +0 -33
  77. package/assets/plugin/lifecycle/install-signal-handlers.js +0 -112
  78. package/assets/plugin/lifecycle/shutdown-coordinator.d.ts +0 -43
  79. package/assets/plugin/lifecycle/shutdown-coordinator.js +0 -131
  80. package/assets/plugin/lifecycle/trading-operation-lock.d.ts +0 -17
  81. package/assets/plugin/lifecycle/trading-operation-lock.js +0 -14
  82. package/assets/plugin/live/bracket-id.d.ts +0 -26
  83. package/assets/plugin/live/bracket-id.js +0 -112
  84. package/assets/plugin/live/bracket-ledger.d.ts +0 -54
  85. package/assets/plugin/live/bracket-ledger.js +0 -267
  86. package/assets/plugin/live/bracket-manager.d.ts +0 -82
  87. package/assets/plugin/live/bracket-manager.js +0 -478
  88. package/assets/plugin/live/bracket-params.d.ts +0 -22
  89. package/assets/plugin/live/bracket-params.js +0 -124
  90. package/assets/plugin/live/bracket-reconciler.d.ts +0 -95
  91. package/assets/plugin/live/bracket-reconciler.js +0 -573
  92. package/assets/plugin/live/bracket-types.d.ts +0 -102
  93. package/assets/plugin/live/bracket-types.js +0 -8
  94. package/assets/plugin/live/deposit-tracker.d.ts +0 -62
  95. package/assets/plugin/live/deposit-tracker.js +0 -97
  96. package/assets/plugin/live/emergency-controls.d.ts +0 -32
  97. package/assets/plugin/live/emergency-controls.js +0 -226
  98. package/assets/plugin/live/exchange-errors.d.ts +0 -12
  99. package/assets/plugin/live/exchange-errors.js +0 -130
  100. package/assets/plugin/live/exchange-info-cache.d.ts +0 -37
  101. package/assets/plugin/live/exchange-info-cache.js +0 -134
  102. package/assets/plugin/live/fact-subscriber.d.ts +0 -78
  103. package/assets/plugin/live/fact-subscriber.js +0 -182
  104. package/assets/plugin/live/intent-journal.d.ts +0 -42
  105. package/assets/plugin/live/intent-journal.js +0 -122
  106. package/assets/plugin/live/listen-key-manager.d.ts +0 -70
  107. package/assets/plugin/live/listen-key-manager.js +0 -169
  108. package/assets/plugin/live/live-adapter.d.ts +0 -287
  109. package/assets/plugin/live/live-adapter.js +0 -1777
  110. package/assets/plugin/live/live-balance-enricher.d.ts +0 -32
  111. package/assets/plugin/live/live-balance-enricher.js +0 -104
  112. package/assets/plugin/live/live-bracket-api.d.ts +0 -13
  113. package/assets/plugin/live/live-bracket-api.js +0 -20
  114. package/assets/plugin/live/live-state-store.d.ts +0 -194
  115. package/assets/plugin/live/live-state-store.js +0 -450
  116. package/assets/plugin/live/local-signal-service.d.ts +0 -57
  117. package/assets/plugin/live/local-signal-service.js +0 -151
  118. package/assets/plugin/live/local-strategy-evaluator.d.ts +0 -62
  119. package/assets/plugin/live/local-strategy-evaluator.js +0 -131
  120. package/assets/plugin/live/microstructure-assembler.d.ts +0 -54
  121. package/assets/plugin/live/microstructure-assembler.js +0 -148
  122. package/assets/plugin/live/order-poller.d.ts +0 -29
  123. package/assets/plugin/live/order-poller.js +0 -125
  124. package/assets/plugin/live/position-state-store.d.ts +0 -83
  125. package/assets/plugin/live/position-state-store.js +0 -237
  126. package/assets/plugin/live/proposal-decision-listener.d.ts +0 -70
  127. package/assets/plugin/live/proposal-decision-listener.js +0 -292
  128. package/assets/plugin/live/proposal-manager.d.ts +0 -76
  129. package/assets/plugin/live/proposal-manager.js +0 -140
  130. package/assets/plugin/live/rate-limiter.d.ts +0 -47
  131. package/assets/plugin/live/rate-limiter.js +0 -159
  132. package/assets/plugin/live/reconciler.d.ts +0 -39
  133. package/assets/plugin/live/reconciler.js +0 -175
  134. package/assets/plugin/live/setup-buckets.d.ts +0 -7
  135. package/assets/plugin/live/setup-buckets.js +0 -33
  136. package/assets/plugin/live/slippage-tracker.d.ts +0 -45
  137. package/assets/plugin/live/slippage-tracker.js +0 -78
  138. package/assets/plugin/live/stop-watcher.d.ts +0 -60
  139. package/assets/plugin/live/stop-watcher.js +0 -215
  140. package/assets/plugin/live/user-data-active-probe.d.ts +0 -54
  141. package/assets/plugin/live/user-data-active-probe.js +0 -180
  142. package/assets/plugin/live/user-data-stream-controller.d.ts +0 -200
  143. package/assets/plugin/live/user-data-stream-controller.js +0 -579
  144. package/assets/plugin/live/user-data-stream-ws.d.ts +0 -22
  145. package/assets/plugin/live/user-data-stream-ws.js +0 -63
  146. package/assets/plugin/live/user-data-stream.d.ts +0 -243
  147. package/assets/plugin/live/user-data-stream.js +0 -704
  148. package/assets/plugin/logger.d.ts +0 -2
  149. package/assets/plugin/logger.js +0 -2
  150. package/assets/plugin/mfe.d.ts +0 -21
  151. package/assets/plugin/mfe.js +0 -68
  152. package/assets/plugin/onboarding/mode-ladder.d.ts +0 -1
  153. package/assets/plugin/onboarding/mode-ladder.js +0 -3
  154. package/assets/plugin/onboarding/runtime.d.ts +0 -84
  155. package/assets/plugin/onboarding/runtime.js +0 -173
  156. package/assets/plugin/openclaw.plugin.json +0 -92
  157. package/assets/plugin/paper-adapter.d.ts +0 -24
  158. package/assets/plugin/paper-adapter.js +0 -91
  159. package/assets/plugin/persistence/state-manager.d.ts +0 -66
  160. package/assets/plugin/persistence/state-manager.js +0 -222
  161. package/assets/plugin/pinned-plan.d.ts +0 -9
  162. package/assets/plugin/pinned-plan.js +0 -23
  163. package/assets/plugin/portfolio/wave9-admission.d.ts +0 -67
  164. package/assets/plugin/portfolio/wave9-admission.js +0 -262
  165. package/assets/plugin/portfolio/wave9-policy.d.ts +0 -36
  166. package/assets/plugin/portfolio/wave9-policy.js +0 -183
  167. package/assets/plugin/risk/pre-trade-check.d.ts +0 -38
  168. package/assets/plugin/risk/pre-trade-check.js +0 -345
  169. package/assets/plugin/risk/pre-trade-types.d.ts +0 -60
  170. package/assets/plugin/risk/pre-trade-types.js +0 -3
  171. package/assets/plugin/shadow/shadow-tracker.d.ts +0 -36
  172. package/assets/plugin/shadow/shadow-tracker.js +0 -151
  173. package/assets/plugin/shadow/types.d.ts +0 -42
  174. package/assets/plugin/shadow/types.js +0 -20
  175. package/assets/plugin/shared/indicators-extended.d.ts +0 -52
  176. package/assets/plugin/shared/indicators-extended.js +0 -291
  177. package/assets/plugin/shared/indicators.d.ts +0 -15
  178. package/assets/plugin/shared/indicators.js +0 -114
  179. package/assets/plugin/signals/conditions/registry.d.ts +0 -16
  180. package/assets/plugin/signals/conditions/registry.js +0 -1324
  181. package/assets/plugin/signals/conditions/types.d.ts +0 -1
  182. package/assets/plugin/signals/conditions/types.js +0 -4
  183. package/assets/plugin/signals/direction-rules.d.ts +0 -3
  184. package/assets/plugin/signals/direction-rules.js +0 -24
  185. package/assets/plugin/signals/entry-rules.d.ts +0 -6
  186. package/assets/plugin/signals/entry-rules.js +0 -33
  187. package/assets/plugin/signals/serialize-context.d.ts +0 -4
  188. package/assets/plugin/signals/serialize-context.js +0 -39
  189. package/assets/plugin/signals/stop-rules.d.ts +0 -3
  190. package/assets/plugin/signals/stop-rules.js +0 -48
  191. package/assets/plugin/signals/strategy-adapter.d.ts +0 -47
  192. package/assets/plugin/signals/strategy-adapter.js +0 -199
  193. package/assets/plugin/signals/types.d.ts +0 -1
  194. package/assets/plugin/signals/types.js +0 -8
  195. package/assets/plugin/simulator/exchange-simulator.d.ts +0 -93
  196. package/assets/plugin/simulator/exchange-simulator.js +0 -689
  197. package/assets/plugin/simulator/fill-engine.d.ts +0 -53
  198. package/assets/plugin/simulator/fill-engine.js +0 -280
  199. package/assets/plugin/simulator/paper-market-feed.d.ts +0 -26
  200. package/assets/plugin/simulator/paper-market-feed.js +0 -104
  201. package/assets/plugin/simulator/realistic-fills.d.ts +0 -59
  202. package/assets/plugin/simulator/realistic-fills.js +0 -175
  203. package/assets/plugin/simulator/types.d.ts +0 -224
  204. package/assets/plugin/simulator/types.js +0 -43
  205. package/assets/plugin/strategy/builtin-strategies.d.ts +0 -2
  206. package/assets/plugin/strategy/builtin-strategies.js +0 -113
  207. package/assets/plugin/strategy/condition-registry.d.ts +0 -3
  208. package/assets/plugin/strategy/condition-registry.js +0 -153
  209. package/assets/plugin/strategy/evaluator.d.ts +0 -70
  210. package/assets/plugin/strategy/evaluator.js +0 -98
  211. package/assets/plugin/tools/assessment-validation.d.ts +0 -120
  212. package/assets/plugin/tools/assessment-validation.js +0 -415
  213. package/assets/plugin/tools/attach-brackets.d.ts +0 -39
  214. package/assets/plugin/tools/attach-brackets.js +0 -399
  215. package/assets/plugin/tools/audit-bracket-protection.d.ts +0 -49
  216. package/assets/plugin/tools/audit-bracket-protection.js +0 -527
  217. package/assets/plugin/tools/cancel-all-orders.d.ts +0 -9
  218. package/assets/plugin/tools/cancel-all-orders.js +0 -8
  219. package/assets/plugin/tools/cancel-order.d.ts +0 -14
  220. package/assets/plugin/tools/cancel-order.js +0 -60
  221. package/assets/plugin/tools/check-position-health.d.ts +0 -46
  222. package/assets/plugin/tools/check-position-health.js +0 -194
  223. package/assets/plugin/tools/clear-exchange-credentials.d.ts +0 -24
  224. package/assets/plugin/tools/clear-exchange-credentials.js +0 -70
  225. package/assets/plugin/tools/close-position.d.ts +0 -45
  226. package/assets/plugin/tools/close-position.js +0 -722
  227. package/assets/plugin/tools/create-order.d.ts +0 -82
  228. package/assets/plugin/tools/create-order.js +0 -1516
  229. package/assets/plugin/tools/exit-gate.d.ts +0 -58
  230. package/assets/plugin/tools/exit-gate.js +0 -162
  231. package/assets/plugin/tools/fetch-balance.d.ts +0 -5
  232. package/assets/plugin/tools/fetch-balance.js +0 -4
  233. package/assets/plugin/tools/fetch-ohlcv.d.ts +0 -11
  234. package/assets/plugin/tools/fetch-ohlcv.js +0 -8
  235. package/assets/plugin/tools/fetch-open-orders.d.ts +0 -7
  236. package/assets/plugin/tools/fetch-open-orders.js +0 -4
  237. package/assets/plugin/tools/fetch-positions.d.ts +0 -7
  238. package/assets/plugin/tools/fetch-positions.js +0 -4
  239. package/assets/plugin/tools/fetch-ticker.d.ts +0 -11
  240. package/assets/plugin/tools/fetch-ticker.js +0 -5
  241. package/assets/plugin/tools/get-agent-profile.d.ts +0 -4
  242. package/assets/plugin/tools/get-agent-profile.js +0 -6
  243. package/assets/plugin/tools/get-analytics.d.ts +0 -6
  244. package/assets/plugin/tools/get-analytics.js +0 -7
  245. package/assets/plugin/tools/get-backtest.d.ts +0 -12
  246. package/assets/plugin/tools/get-backtest.js +0 -91
  247. package/assets/plugin/tools/get-basis.d.ts +0 -7
  248. package/assets/plugin/tools/get-basis.js +0 -7
  249. package/assets/plugin/tools/get-bracket-config.d.ts +0 -11
  250. package/assets/plugin/tools/get-bracket-config.js +0 -24
  251. package/assets/plugin/tools/get-cascade-risk.d.ts +0 -7
  252. package/assets/plugin/tools/get-cascade-risk.js +0 -8
  253. package/assets/plugin/tools/get-crypto-metrics.d.ts +0 -18
  254. package/assets/plugin/tools/get-crypto-metrics.js +0 -62
  255. package/assets/plugin/tools/get-cvd.d.ts +0 -6
  256. package/assets/plugin/tools/get-cvd.js +0 -6
  257. package/assets/plugin/tools/get-divergences.d.ts +0 -6
  258. package/assets/plugin/tools/get-divergences.js +0 -6
  259. package/assets/plugin/tools/get-funding-context.d.ts +0 -6
  260. package/assets/plugin/tools/get-funding-context.js +0 -16
  261. package/assets/plugin/tools/get-liquidation-levels.d.ts +0 -7
  262. package/assets/plugin/tools/get-liquidation-levels.js +0 -7
  263. package/assets/plugin/tools/get-liquidation-pulse.d.ts +0 -9
  264. package/assets/plugin/tools/get-liquidation-pulse.js +0 -22
  265. package/assets/plugin/tools/get-market-breadth.d.ts +0 -6
  266. package/assets/plugin/tools/get-market-breadth.js +0 -8
  267. package/assets/plugin/tools/get-market-intel.d.ts +0 -19
  268. package/assets/plugin/tools/get-market-intel.js +0 -116
  269. package/assets/plugin/tools/get-market-structure.d.ts +0 -47
  270. package/assets/plugin/tools/get-market-structure.js +0 -198
  271. package/assets/plugin/tools/get-my-mined-patterns.d.ts +0 -20
  272. package/assets/plugin/tools/get-my-mined-patterns.js +0 -61
  273. package/assets/plugin/tools/get-my-proposed-learnings.d.ts +0 -20
  274. package/assets/plugin/tools/get-my-proposed-learnings.js +0 -55
  275. package/assets/plugin/tools/get-my-recent-reviews.d.ts +0 -22
  276. package/assets/plugin/tools/get-my-recent-reviews.js +0 -66
  277. package/assets/plugin/tools/get-orderbook.d.ts +0 -21
  278. package/assets/plugin/tools/get-orderbook.js +0 -32
  279. package/assets/plugin/tools/get-pattern-scan.d.ts +0 -7
  280. package/assets/plugin/tools/get-pattern-scan.js +0 -8
  281. package/assets/plugin/tools/get-regime.d.ts +0 -6
  282. package/assets/plugin/tools/get-regime.js +0 -7
  283. package/assets/plugin/tools/get-relevant-learnings.d.ts +0 -21
  284. package/assets/plugin/tools/get-relevant-learnings.js +0 -65
  285. package/assets/plugin/tools/get-resting-liquidity.d.ts +0 -6
  286. package/assets/plugin/tools/get-resting-liquidity.js +0 -11
  287. package/assets/plugin/tools/get-risk-scenario.d.ts +0 -29
  288. package/assets/plugin/tools/get-risk-scenario.js +0 -47
  289. package/assets/plugin/tools/get-risk-summary.d.ts +0 -51
  290. package/assets/plugin/tools/get-risk-summary.js +0 -118
  291. package/assets/plugin/tools/get-sentiment.d.ts +0 -4
  292. package/assets/plugin/tools/get-sentiment.js +0 -6
  293. package/assets/plugin/tools/get-session-review.d.ts +0 -7
  294. package/assets/plugin/tools/get-session-review.js +0 -8
  295. package/assets/plugin/tools/get-setup-detail.d.ts +0 -7
  296. package/assets/plugin/tools/get-setup-detail.js +0 -311
  297. package/assets/plugin/tools/get-signals.d.ts +0 -15
  298. package/assets/plugin/tools/get-signals.js +0 -54
  299. package/assets/plugin/tools/get-sizing.d.ts +0 -6
  300. package/assets/plugin/tools/get-sizing.js +0 -6
  301. package/assets/plugin/tools/get-trade-feedback.d.ts +0 -7
  302. package/assets/plugin/tools/get-trade-feedback.js +0 -8
  303. package/assets/plugin/tools/get-trade-flow.d.ts +0 -7
  304. package/assets/plugin/tools/get-trade-flow.js +0 -7
  305. package/assets/plugin/tools/get-volume-analysis.d.ts +0 -21
  306. package/assets/plugin/tools/get-volume-analysis.js +0 -74
  307. package/assets/plugin/tools/get-volume-profile.d.ts +0 -7
  308. package/assets/plugin/tools/get-volume-profile.js +0 -7
  309. package/assets/plugin/tools/get-wave9-status.d.ts +0 -127
  310. package/assets/plugin/tools/get-wave9-status.js +0 -796
  311. package/assets/plugin/tools/helpers.d.ts +0 -26
  312. package/assets/plugin/tools/helpers.js +0 -39
  313. package/assets/plugin/tools/intel-api.d.ts +0 -34
  314. package/assets/plugin/tools/intel-api.js +0 -119
  315. package/assets/plugin/tools/intel-cache.d.ts +0 -25
  316. package/assets/plugin/tools/intel-cache.js +0 -148
  317. package/assets/plugin/tools/list-strategies.d.ts +0 -17
  318. package/assets/plugin/tools/list-strategies.js +0 -23
  319. package/assets/plugin/tools/modify-stop.d.ts +0 -21
  320. package/assets/plugin/tools/modify-stop.js +0 -120
  321. package/assets/plugin/tools/modify-target.d.ts +0 -21
  322. package/assets/plugin/tools/modify-target.js +0 -110
  323. package/assets/plugin/tools/propose-learning.d.ts +0 -22
  324. package/assets/plugin/tools/propose-learning.js +0 -65
  325. package/assets/plugin/tools/query-review-outcomes.d.ts +0 -30
  326. package/assets/plugin/tools/query-review-outcomes.js +0 -64
  327. package/assets/plugin/tools/query-trades.d.ts +0 -21
  328. package/assets/plugin/tools/query-trades.js +0 -37
  329. package/assets/plugin/tools/record-position-reviews.d.ts +0 -38
  330. package/assets/plugin/tools/record-position-reviews.js +0 -147
  331. package/assets/plugin/tools/save-strategy.d.ts +0 -16
  332. package/assets/plugin/tools/save-strategy.js +0 -46
  333. package/assets/plugin/tools/scan-pairs.d.ts +0 -18
  334. package/assets/plugin/tools/scan-pairs.js +0 -231
  335. package/assets/plugin/tools/score-setup.d.ts +0 -31
  336. package/assets/plugin/tools/score-setup.js +0 -268
  337. package/assets/plugin/tools/set-bracket-requirement.d.ts +0 -18
  338. package/assets/plugin/tools/set-bracket-requirement.js +0 -81
  339. package/assets/plugin/tools/set-exchange-credentials.d.ts +0 -25
  340. package/assets/plugin/tools/set-exchange-credentials.js +0 -80
  341. package/assets/plugin/tools/set-trading-mode.d.ts +0 -26
  342. package/assets/plugin/tools/set-trading-mode.js +0 -135
  343. package/assets/plugin/tools/test-exchange-credentials.d.ts +0 -16
  344. package/assets/plugin/tools/test-exchange-credentials.js +0 -100
  345. package/assets/plugin/tools/toggle-strategy.d.ts +0 -8
  346. package/assets/plugin/tools/toggle-strategy.js +0 -15
  347. package/assets/plugin/trading-params-cache.d.ts +0 -26
  348. package/assets/plugin/trading-params-cache.js +0 -52
  349. package/assets/plugin/types.d.ts +0 -134
  350. package/assets/plugin/types.js +0 -7
  351. package/assets/plugin/util/plugin-paths.d.ts +0 -3
  352. package/assets/plugin/util/plugin-paths.js +0 -15
  353. package/assets/plugin/venues/hyperliquid/hl-balance.d.ts +0 -116
  354. package/assets/plugin/venues/hyperliquid/hl-balance.js +0 -145
  355. package/assets/plugin/venues/hyperliquid/hl-brackets.d.ts +0 -102
  356. package/assets/plugin/venues/hyperliquid/hl-brackets.js +0 -172
  357. package/assets/plugin/venues/hyperliquid/hl-cloid.d.ts +0 -22
  358. package/assets/plugin/venues/hyperliquid/hl-cloid.js +0 -82
  359. package/assets/plugin/venues/hyperliquid/hl-info-cache.d.ts +0 -46
  360. package/assets/plugin/venues/hyperliquid/hl-info-cache.js +0 -125
  361. package/assets/plugin/venues/hyperliquid/hl-live-adapter.d.ts +0 -88
  362. package/assets/plugin/venues/hyperliquid/hl-live-adapter.js +0 -353
  363. package/assets/plugin/venues/hyperliquid/hl-precision.d.ts +0 -61
  364. package/assets/plugin/venues/hyperliquid/hl-precision.js +0 -176
  365. package/assets/plugin/venues/hyperliquid/hl-private.d.ts +0 -88
  366. package/assets/plugin/venues/hyperliquid/hl-private.js +0 -357
  367. package/assets/plugin/venues/hyperliquid/hl-public.d.ts +0 -79
  368. package/assets/plugin/venues/hyperliquid/hl-public.js +0 -429
  369. package/assets/plugin/venues/hyperliquid/hl-rate-gate.d.ts +0 -57
  370. package/assets/plugin/venues/hyperliquid/hl-rate-gate.js +0 -220
  371. package/assets/plugin/venues/hyperliquid/hl-user-stream.d.ts +0 -90
  372. package/assets/plugin/venues/hyperliquid/hl-user-stream.js +0 -220
  373. package/assets/plugin/venues/registry.d.ts +0 -38
  374. package/assets/plugin/venues/registry.js +0 -46
  375. package/assets/plugin/venues/symbols.d.ts +0 -43
  376. package/assets/plugin/venues/symbols.js +0 -107
  377. package/assets/plugin/wave9/live-account-capture.d.ts +0 -67
  378. package/assets/plugin/wave9/live-account-capture.js +0 -435
  379. package/assets/plugin/wave9/live-autonomous-protection.d.ts +0 -39
  380. package/assets/plugin/wave9/live-autonomous-protection.js +0 -112
  381. package/assets/plugin/wave9/live-durable-reconciliation-scheduler.d.ts +0 -33
  382. package/assets/plugin/wave9/live-durable-reconciliation-scheduler.js +0 -115
  383. package/assets/plugin/wave9/live-execution-ledger.d.ts +0 -107
  384. package/assets/plugin/wave9/live-execution-ledger.js +0 -498
  385. package/assets/plugin/wave9/live-position-confirmation.d.ts +0 -18
  386. package/assets/plugin/wave9/live-position-confirmation.js +0 -111
  387. package/assets/plugin/wave9/live-residual-protection.d.ts +0 -18
  388. package/assets/plugin/wave9/live-residual-protection.js +0 -250
  389. package/assets/plugin/wave9/live-startup-reconciliation.d.ts +0 -38
  390. package/assets/plugin/wave9/live-startup-reconciliation.js +0 -454
  391. package/assets/plugin/wave9/live-symbol-ownership.d.ts +0 -20
  392. package/assets/plugin/wave9/live-symbol-ownership.js +0 -132
  393. package/assets/plugin/wave9/paper-admission-guard.d.ts +0 -199
  394. package/assets/plugin/wave9/paper-admission-guard.js +0 -650
  395. package/assets/plugin/wave9/usdm-evidence-provider.d.ts +0 -42
  396. package/assets/plugin/wave9/usdm-evidence-provider.js +0 -133
@@ -1,322 +0,0 @@
1
- export interface PositionDecisionsClientOptions {
2
- baseUrl: string;
3
- ingestToken: string;
4
- fetchImpl?: typeof fetch;
5
- requestTimeoutMs?: number;
6
- maxAttempts?: number;
7
- baseBackoffMs?: number;
8
- backoffCapMs?: number;
9
- }
10
- export interface PositionUpsertPayload {
11
- symbol: string;
12
- positionOpenAt: number;
13
- side: 'long' | 'short';
14
- currentSize: number;
15
- avgEntryPrice: number;
16
- /** Trading mode the position was opened in ('paper' | 'live'). Tags the
17
- * journal row so paper and live positions can be segregated. Omitted only
18
- * if the active adapter can't be resolved (treated as legacy/NULL). */
19
- mode?: 'paper' | 'live';
20
- /** Venue the position was opened on ('binance' | 'hyperliquid') — journal /
21
- * analytics segmentation (fees + funding cadence differ per venue).
22
- * Absent → NULL (legacy binance), mirroring `mode`. Migration 0058. */
23
- exchange?: string;
24
- }
25
- export interface PositionEntryPayload {
26
- positionId: string;
27
- entryAt: number;
28
- isScaleIn?: boolean;
29
- thesis: string;
30
- setupType: string;
31
- regime: string;
32
- regimeConfidence: number;
33
- scorecardVerdict: string;
34
- confluenceScore: number;
35
- confluenceComponents?: Record<string, unknown>;
36
- fillPrice: number;
37
- fillSize: number;
38
- exchangeTradeId?: string;
39
- metadata?: Record<string, unknown>;
40
- }
41
- export interface PositionReviewPayload {
42
- positionId: string;
43
- reviewAt?: number;
44
- verdict: 'hold' | 'add_on' | 'close_recommended';
45
- thesisStatus: 'intact' | 'weakening' | 'invalidated' | 'evolving';
46
- entryScore: number;
47
- currentScore: number;
48
- scoreDelta: number;
49
- confluenceComponents: Record<string, unknown>;
50
- regimeEntry: string;
51
- regimeCurrent: string;
52
- regimeConfidence: number;
53
- rMultiple: number;
54
- distanceToStopBps: number;
55
- distanceToTargetBps?: number | null;
56
- timeInPositionMinutes: number;
57
- mfeR: number;
58
- giveBackPct: number;
59
- whatChanged: string;
60
- invalidationTrigger: string;
61
- restingBandImbalance05?: number | null;
62
- cascadePulseAtReview?: 'quiet' | 'elevated' | 'active_cascade' | null;
63
- coveragePctAtReview?: number | null;
64
- imbalanceDeltaSinceEntry?: number | null;
65
- metadata?: Record<string, unknown>;
66
- }
67
- export interface PositionClosePayload {
68
- positionId: string;
69
- closeAt: number;
70
- closeReason: string;
71
- closeAssessment: Record<string, unknown>;
72
- scorecardVerdict: string;
73
- confluenceScore: number;
74
- regime: string;
75
- regimeConfidence: number;
76
- fillPrice: number;
77
- fillSize: number;
78
- realizedPnl: number;
79
- realizedR: number;
80
- mfeRAtClose: number;
81
- giveBackPctAtClose: number;
82
- exchangeTradeId?: string;
83
- metadata?: Record<string, unknown>;
84
- }
85
- /** Row shape from GET /api/internal/positions?status=open (DB-vs-exchange
86
- * reconcile). Keyed off the DB row id so a wiped state-store can't hide it. */
87
- export interface OpenPositionRow {
88
- id: string;
89
- symbol: string;
90
- side: 'long' | 'short';
91
- remainingSize: number;
92
- entryPrice: number;
93
- openedAt: number;
94
- }
95
- export interface OpenPositionsResponse {
96
- positions: OpenPositionRow[];
97
- }
98
- export interface PositionDecisionsClientHealth {
99
- inFlight: number;
100
- totalPosted: number;
101
- totalSucceeded: number;
102
- totalDroppedTerminal: number;
103
- totalDroppedRetriesExhausted: number;
104
- }
105
- export interface PriorReview {
106
- reviewAt: number;
107
- verdict: 'hold' | 'add_on' | 'close_recommended';
108
- thesisStatus: 'intact' | 'weakening' | 'invalidated' | 'evolving';
109
- scoreDelta: number;
110
- currentScore: number;
111
- rMultiple: number;
112
- regimeCurrent: string;
113
- whatChanged: string;
114
- }
115
- export interface VerdictStreak {
116
- verdict: 'hold' | 'add_on' | 'close_recommended';
117
- consecutiveCount: number;
118
- thesisProgression: ('intact' | 'weakening' | 'invalidated' | 'evolving')[];
119
- truncated: boolean;
120
- }
121
- export interface ReentryContext {
122
- recentOpenedCount: number;
123
- recentClosedCount: number;
124
- recentClosedRealizedR: number[];
125
- minutesSinceLastClose: number | null;
126
- }
127
- export interface PositionReviewContext {
128
- positionId: string;
129
- symbol: string;
130
- side: 'long' | 'short';
131
- openedAt: number;
132
- reviews: PriorReview[];
133
- verdictStreak: VerdictStreak | null;
134
- reentryContext: ReentryContext | null;
135
- }
136
- export interface RecentReviewsResponse {
137
- positions: PositionReviewContext[];
138
- }
139
- export interface ReviewOutcomesFilters {
140
- verdict?: 'hold' | 'add_on' | 'close_recommended';
141
- thesisStatus?: 'intact' | 'weakening' | 'invalidated' | 'evolving';
142
- regimeCurrent?: string;
143
- symbol?: string;
144
- side?: 'long' | 'short';
145
- setupType?: string;
146
- daysBack?: number;
147
- minScoreDelta?: number;
148
- maxScoreDelta?: number;
149
- closedOnly?: boolean;
150
- sampleLimit?: number;
151
- }
152
- export interface ReviewOutcomesStats {
153
- nTotal: number;
154
- nClosed: number;
155
- winRate: number | null;
156
- medianR: number | null;
157
- meanR: number | null;
158
- medianGiveBack: number | null;
159
- p25R: number | null;
160
- p75R: number | null;
161
- outcomeCounts: Record<string, number>;
162
- }
163
- export interface ReviewOutcomeSample {
164
- reviewId: string;
165
- positionId: string;
166
- reviewAt: string;
167
- symbol: string;
168
- side: 'long' | 'short';
169
- verdict: string;
170
- thesisStatus: string;
171
- regimeCurrent: string;
172
- setupType: string | null;
173
- scoreDelta: number;
174
- rAtReview: number;
175
- mfeAtReview: number;
176
- whatChanged: string;
177
- positionStatus: 'open' | 'closed';
178
- closeAt: string | null;
179
- finalRealizedR: number | null;
180
- finalCloseReason: string | null;
181
- minutesReviewToClose: number | null;
182
- }
183
- export interface ReviewOutcomesResponse {
184
- filters: Record<string, unknown>;
185
- stats: ReviewOutcomesStats;
186
- sample: ReviewOutcomeSample[];
187
- }
188
- export interface RelevantLearning {
189
- id: string;
190
- title: string;
191
- directive: string;
192
- triggerCondition: Record<string, unknown> | null;
193
- evidence: Record<string, unknown> | null;
194
- lastValidatedAt: string | null;
195
- updatedAt: string;
196
- }
197
- export interface RelevantLearningsResponse {
198
- learnings: RelevantLearning[];
199
- appliesAt: 'entry' | 'heartbeat' | 'close';
200
- totalCandidates: number;
201
- returnedCount: number;
202
- }
203
- export interface RelevantLearningsFilters {
204
- appliesAt: 'entry' | 'heartbeat' | 'close';
205
- setupType?: string;
206
- regime?: string;
207
- verdict?: 'hold' | 'add_on' | 'close_recommended';
208
- }
209
- export interface MyMinedPattern {
210
- id: string;
211
- patternType: string;
212
- matchConditions: Record<string, unknown>;
213
- sampleSize: number;
214
- baselineValue: number | null;
215
- observedValue: number | null;
216
- effectSize: number;
217
- pValue: number;
218
- humanSummary: string;
219
- minedAt: string;
220
- dateRangeEnd: string | null;
221
- promotedToLearningId: string | null;
222
- }
223
- export interface MyMinedPatternsResponse {
224
- patterns: MyMinedPattern[];
225
- totalReturned: number;
226
- }
227
- export interface MyMinedPatternsFilters {
228
- withinDays?: number;
229
- minSampleSize?: number;
230
- maxPValue?: number;
231
- includePromoted?: boolean;
232
- }
233
- export interface MyProposedLearning {
234
- id: string;
235
- confidence: 'hypothesis' | 'confirmed' | 'retired';
236
- appliesAt: 'entry' | 'heartbeat' | 'close';
237
- title: string;
238
- directive: string;
239
- triggerCondition: Record<string, unknown> | null;
240
- evidence: Record<string, unknown> | null;
241
- sourceMinedPatternId: string | null;
242
- proposedBy: 'operator' | 'agent';
243
- autoConfirmed: boolean;
244
- createdAt: string;
245
- updatedAt: string;
246
- }
247
- export interface MyProposedLearningsResponse {
248
- learnings: MyProposedLearning[];
249
- totalReturned: number;
250
- }
251
- export interface MyProposedLearningsFilters {
252
- includeHypothesis?: boolean;
253
- includeConfirmed?: boolean;
254
- includeRetired?: boolean;
255
- proposedBy?: 'agent' | 'operator';
256
- }
257
- export interface ProposeLearningPayload {
258
- appliesAt: 'entry' | 'heartbeat' | 'close';
259
- title: string;
260
- directive: string;
261
- sourceMinedPatternId?: string;
262
- triggerCondition?: Record<string, unknown>;
263
- evidence?: Record<string, unknown>;
264
- }
265
- export interface ProposeLearningResponse {
266
- id: string;
267
- confidence: 'hypothesis' | 'confirmed';
268
- autoConfirmed: boolean;
269
- trustMode: 'manual' | 'auto';
270
- proposalsUsed: number;
271
- proposalsLimit: number;
272
- }
273
- export declare class PositionDecisionsClient {
274
- private readonly opts;
275
- private inFlight;
276
- private totalPosted;
277
- private totalSucceeded;
278
- private totalDroppedTerminal;
279
- private totalDroppedRetriesExhausted;
280
- constructor(options: PositionDecisionsClientOptions);
281
- /** Awaited — the auto-capture pipeline needs the returned positionId before
282
- * posting children. Returns null on terminal failure (caller logs + drops). */
283
- postPosition(userId: string, payload: PositionUpsertPayload): Promise<string | null>;
284
- /** Fire-and-forget. */
285
- postEntry(userId: string, payload: PositionEntryPayload): void;
286
- /** Fire-and-forget. */
287
- postReview(userId: string, payload: PositionReviewPayload): void;
288
- /** Fire-and-forget. */
289
- postClose(userId: string, payload: PositionClosePayload): void;
290
- /** DB-vs-exchange reconcile read: this tenant's open positions. Awaited.
291
- * Returns null on terminal/retry-exhausted failure — the caller MUST treat
292
- * null as UNKNOWN (never as "no open rows"), else a failed fetch would
293
- * false-close the whole book. */
294
- getOpenPositions(userId: string): Promise<OpenPositionsResponse | null>;
295
- /** Read endpoint for the Phase 1 self-reflection feature. Awaited.
296
- * Returns null on terminal/retry-exhausted failure (caller logs + degrades). */
297
- getRecentReviews(userId: string, positionIds: string[], reviewLimit?: number): Promise<RecentReviewsResponse | null>;
298
- /** Phase 2 outcome-attribution read. Aggregate stats + sample over the
299
- * position_review_outcomes view filtered by the provided criteria. */
300
- queryReviewOutcomes(userId: string, filters: ReviewOutcomesFilters): Promise<ReviewOutcomesResponse | null>;
301
- /** Phase 4 — curated learnings read. The agent calls this at decision
302
- * time (entry/heartbeat/close) to fetch confirmed learnings whose
303
- * trigger_condition matches the current decision context. Returns null
304
- * on terminal/retry-exhausted failure (caller logs + degrades to empty). */
305
- getRelevantLearnings(userId: string, filters: RelevantLearningsFilters): Promise<RelevantLearningsResponse | null>;
306
- /** Phase 4.5 — agent self-assessment: read this user's own unpromoted
307
- * mined_patterns so the agent can pick candidates to propose. */
308
- getMyMinedPatterns(userId: string, filters: MyMinedPatternsFilters): Promise<MyMinedPatternsResponse | null>;
309
- /** Phase 4.5 — read this user's own learnings across confidence states, so
310
- * the agent can dedup before proposing a fresh hypothesis. */
311
- getMyProposedLearnings(userId: string, filters: MyProposedLearningsFilters): Promise<MyProposedLearningsResponse | null>;
312
- /** Phase 4.5 — POST a new hypothesis (or auto-confirmed) learning. Confidence
313
- * is server-determined by user trust mode; we cannot set it from here. */
314
- proposeLearning(userId: string, payload: ProposeLearningPayload): Promise<ProposeLearningResponse | null>;
315
- drain(): Promise<void>;
316
- getHealth(): PositionDecisionsClientHealth;
317
- private fireAndForget;
318
- private run;
319
- private runReturning;
320
- private runGetReturning;
321
- private sleepBackoff;
322
- }
@@ -1,296 +0,0 @@
1
- // HTTP client for the webapp's /api/internal/position-{positions,entries,reviews,closes}
2
- // ingest endpoints.
3
- //
4
- // Mirrors trade-store-client.ts retry semantics:
5
- // - 2xx : success.
6
- // - 4xx : terminal — drop + log loudly (caller bug or duplicate).
7
- // - 5xx / network : retry with exponential backoff up to maxAttempts.
8
- //
9
- // Two callable surfaces:
10
- // - postPosition() is awaited (returns the parent UUID); the auto-capture
11
- // pipeline needs the id before posting children.
12
- // - postEntry/Review/Close are fire-and-forget (don't block the WS hot path).
13
- //
14
- // All four routes accept the same auth: Bearer + X-User-Id headers.
15
- import { logger, formatError } from '../logger.js';
16
- const TAG = 'position-decisions-client';
17
- export class PositionDecisionsClient {
18
- opts;
19
- inFlight = new Set();
20
- totalPosted = 0;
21
- totalSucceeded = 0;
22
- totalDroppedTerminal = 0;
23
- totalDroppedRetriesExhausted = 0;
24
- constructor(options) {
25
- this.opts = {
26
- baseUrl: options.baseUrl.replace(/\/+$/, ''),
27
- ingestToken: options.ingestToken,
28
- fetchImpl: options.fetchImpl ?? fetch,
29
- requestTimeoutMs: options.requestTimeoutMs ?? 10_000,
30
- maxAttempts: options.maxAttempts ?? 4,
31
- baseBackoffMs: options.baseBackoffMs ?? 250,
32
- backoffCapMs: options.backoffCapMs ?? 5_000,
33
- };
34
- }
35
- /** Awaited — the auto-capture pipeline needs the returned positionId before
36
- * posting children. Returns null on terminal failure (caller logs + drops). */
37
- async postPosition(userId, payload) {
38
- const result = await this.runReturning(userId, '/api/internal/positions', payload);
39
- return result?.positionId ?? null;
40
- }
41
- /** Fire-and-forget. */
42
- postEntry(userId, payload) {
43
- this.fireAndForget(userId, '/api/internal/position-entries', payload);
44
- }
45
- /** Fire-and-forget. */
46
- postReview(userId, payload) {
47
- this.fireAndForget(userId, '/api/internal/position-reviews', payload);
48
- }
49
- /** Fire-and-forget. */
50
- postClose(userId, payload) {
51
- this.fireAndForget(userId, '/api/internal/position-closes', payload);
52
- }
53
- /** DB-vs-exchange reconcile read: this tenant's open positions. Awaited.
54
- * Returns null on terminal/retry-exhausted failure — the caller MUST treat
55
- * null as UNKNOWN (never as "no open rows"), else a failed fetch would
56
- * false-close the whole book. */
57
- async getOpenPositions(userId) {
58
- return this.runGetReturning(userId, '/api/internal/positions?status=open');
59
- }
60
- /** Read endpoint for the Phase 1 self-reflection feature. Awaited.
61
- * Returns null on terminal/retry-exhausted failure (caller logs + degrades). */
62
- async getRecentReviews(userId, positionIds, reviewLimit) {
63
- if (positionIds.length === 0)
64
- return { positions: [] };
65
- const qs = new URLSearchParams();
66
- qs.set('positionIds', positionIds.join(','));
67
- if (reviewLimit && reviewLimit > 0)
68
- qs.set('reviewLimit', String(reviewLimit));
69
- const path = `/api/internal/position-reviews/recent?${qs.toString()}`;
70
- return this.runGetReturning(userId, path);
71
- }
72
- /** Phase 2 outcome-attribution read. Aggregate stats + sample over the
73
- * position_review_outcomes view filtered by the provided criteria. */
74
- async queryReviewOutcomes(userId, filters) {
75
- const qs = new URLSearchParams();
76
- if (filters.verdict)
77
- qs.set('verdict', filters.verdict);
78
- if (filters.thesisStatus)
79
- qs.set('thesis_status', filters.thesisStatus);
80
- if (filters.regimeCurrent)
81
- qs.set('regime_current', filters.regimeCurrent);
82
- if (filters.symbol)
83
- qs.set('symbol', filters.symbol);
84
- if (filters.side)
85
- qs.set('side', filters.side);
86
- if (filters.setupType)
87
- qs.set('setup_type', filters.setupType);
88
- if (filters.daysBack !== undefined)
89
- qs.set('days_back', String(filters.daysBack));
90
- if (filters.minScoreDelta !== undefined) {
91
- qs.set('min_score_delta', String(filters.minScoreDelta));
92
- }
93
- if (filters.maxScoreDelta !== undefined) {
94
- qs.set('max_score_delta', String(filters.maxScoreDelta));
95
- }
96
- if (filters.closedOnly)
97
- qs.set('closed_only', '1');
98
- if (filters.sampleLimit !== undefined)
99
- qs.set('sample_limit', String(filters.sampleLimit));
100
- const path = `/api/internal/positions/reviews/with-outcomes${qs.toString() ? `?${qs.toString()}` : ''}`;
101
- return this.runGetReturning(userId, path);
102
- }
103
- /** Phase 4 — curated learnings read. The agent calls this at decision
104
- * time (entry/heartbeat/close) to fetch confirmed learnings whose
105
- * trigger_condition matches the current decision context. Returns null
106
- * on terminal/retry-exhausted failure (caller logs + degrades to empty). */
107
- async getRelevantLearnings(userId, filters) {
108
- const qs = new URLSearchParams();
109
- qs.set('applies_at', filters.appliesAt);
110
- if (filters.setupType)
111
- qs.set('setup_type', filters.setupType);
112
- if (filters.regime)
113
- qs.set('regime', filters.regime);
114
- if (filters.verdict)
115
- qs.set('verdict', filters.verdict);
116
- const path = `/api/internal/learnings?${qs.toString()}`;
117
- return this.runGetReturning(userId, path);
118
- }
119
- /** Phase 4.5 — agent self-assessment: read this user's own unpromoted
120
- * mined_patterns so the agent can pick candidates to propose. */
121
- async getMyMinedPatterns(userId, filters) {
122
- const qs = new URLSearchParams();
123
- if (filters.withinDays !== undefined)
124
- qs.set('within_days', String(filters.withinDays));
125
- if (filters.minSampleSize !== undefined)
126
- qs.set('min_sample_size', String(filters.minSampleSize));
127
- if (filters.maxPValue !== undefined)
128
- qs.set('max_p_value', String(filters.maxPValue));
129
- if (filters.includePromoted)
130
- qs.set('include_promoted', '1');
131
- const q = qs.toString();
132
- const path = `/api/internal/learnings/my-patterns${q ? `?${q}` : ''}`;
133
- return this.runGetReturning(userId, path);
134
- }
135
- /** Phase 4.5 — read this user's own learnings across confidence states, so
136
- * the agent can dedup before proposing a fresh hypothesis. */
137
- async getMyProposedLearnings(userId, filters) {
138
- const qs = new URLSearchParams();
139
- if (filters.includeHypothesis === false)
140
- qs.set('include_hypothesis', '0');
141
- if (filters.includeConfirmed === false)
142
- qs.set('include_confirmed', '0');
143
- if (filters.includeRetired)
144
- qs.set('include_retired', '1');
145
- if (filters.proposedBy)
146
- qs.set('proposed_by', filters.proposedBy);
147
- const q = qs.toString();
148
- const path = `/api/internal/learnings/my-proposals${q ? `?${q}` : ''}`;
149
- return this.runGetReturning(userId, path);
150
- }
151
- /** Phase 4.5 — POST a new hypothesis (or auto-confirmed) learning. Confidence
152
- * is server-determined by user trust mode; we cannot set it from here. */
153
- async proposeLearning(userId, payload) {
154
- return this.runReturning(userId, '/api/internal/learnings/propose', payload);
155
- }
156
- async drain() {
157
- if (this.inFlight.size === 0)
158
- return;
159
- logger.info(TAG, `Draining ${this.inFlight.size} in-flight decision post(s)...`);
160
- await Promise.allSettled(Array.from(this.inFlight));
161
- }
162
- getHealth() {
163
- return {
164
- inFlight: this.inFlight.size,
165
- totalPosted: this.totalPosted,
166
- totalSucceeded: this.totalSucceeded,
167
- totalDroppedTerminal: this.totalDroppedTerminal,
168
- totalDroppedRetriesExhausted: this.totalDroppedRetriesExhausted,
169
- };
170
- }
171
- // ---- Internals ----
172
- fireAndForget(userId, path, body) {
173
- this.totalPosted++;
174
- const promise = this.run(userId, path, body).finally(() => {
175
- this.inFlight.delete(promise);
176
- });
177
- this.inFlight.add(promise);
178
- }
179
- async run(userId, path, body) {
180
- await this.runReturning(userId, path, body);
181
- }
182
- async runReturning(userId, path, body) {
183
- const url = `${this.opts.baseUrl}${path}`;
184
- const json = JSON.stringify(body);
185
- for (let attempt = 1; attempt <= this.opts.maxAttempts; attempt++) {
186
- try {
187
- const ac = new AbortController();
188
- const tid = setTimeout(() => ac.abort(), this.opts.requestTimeoutMs);
189
- let res;
190
- try {
191
- res = await this.opts.fetchImpl(url, {
192
- method: 'POST',
193
- headers: {
194
- 'content-type': 'application/json',
195
- authorization: `Bearer ${this.opts.ingestToken}`,
196
- 'x-user-id': userId,
197
- },
198
- body: json,
199
- signal: ac.signal,
200
- });
201
- }
202
- finally {
203
- clearTimeout(tid);
204
- }
205
- if (res.status >= 200 && res.status < 300) {
206
- this.totalSucceeded++;
207
- try {
208
- return (await res.json());
209
- }
210
- catch {
211
- return null;
212
- }
213
- }
214
- if (res.status >= 400 && res.status < 500) {
215
- this.totalDroppedTerminal++;
216
- let errBody = '';
217
- try {
218
- errBody = await res.text();
219
- }
220
- catch {
221
- // ignore
222
- }
223
- logger.warn(TAG, `POST ${url} → ${res.status} (terminal, dropped). userId=${userId} body=${errBody.slice(0, 200)}`);
224
- return null;
225
- }
226
- logger.warn(TAG, `POST ${url} → ${res.status} (attempt ${attempt}/${this.opts.maxAttempts}).`);
227
- }
228
- catch (err) {
229
- logger.warn(TAG, `POST ${url} threw (attempt ${attempt}/${this.opts.maxAttempts}): ${formatError(err)}`);
230
- }
231
- if (attempt < this.opts.maxAttempts) {
232
- await this.sleepBackoff(attempt);
233
- }
234
- }
235
- this.totalDroppedRetriesExhausted++;
236
- logger.error(TAG, `POST ${url} dropped after ${this.opts.maxAttempts} attempts. userId=${userId}.`);
237
- return null;
238
- }
239
- async runGetReturning(userId, path) {
240
- const url = `${this.opts.baseUrl}${path}`;
241
- for (let attempt = 1; attempt <= this.opts.maxAttempts; attempt++) {
242
- try {
243
- const ac = new AbortController();
244
- const tid = setTimeout(() => ac.abort(), this.opts.requestTimeoutMs);
245
- let res;
246
- try {
247
- res = await this.opts.fetchImpl(url, {
248
- method: 'GET',
249
- headers: {
250
- authorization: `Bearer ${this.opts.ingestToken}`,
251
- 'x-user-id': userId,
252
- },
253
- signal: ac.signal,
254
- });
255
- }
256
- finally {
257
- clearTimeout(tid);
258
- }
259
- if (res.status >= 200 && res.status < 300) {
260
- try {
261
- return (await res.json());
262
- }
263
- catch {
264
- return null;
265
- }
266
- }
267
- if (res.status >= 400 && res.status < 500) {
268
- let errBody = '';
269
- try {
270
- errBody = await res.text();
271
- }
272
- catch {
273
- // ignore
274
- }
275
- logger.warn(TAG, `GET ${url} → ${res.status} (terminal, dropped). userId=${userId} body=${errBody.slice(0, 200)}`);
276
- return null;
277
- }
278
- logger.warn(TAG, `GET ${url} → ${res.status} (attempt ${attempt}/${this.opts.maxAttempts}).`);
279
- }
280
- catch (err) {
281
- logger.warn(TAG, `GET ${url} threw (attempt ${attempt}/${this.opts.maxAttempts}): ${formatError(err)}`);
282
- }
283
- if (attempt < this.opts.maxAttempts) {
284
- await this.sleepBackoff(attempt);
285
- }
286
- }
287
- logger.error(TAG, `GET ${url} failed after ${this.opts.maxAttempts} attempts. userId=${userId}.`);
288
- return null;
289
- }
290
- async sleepBackoff(attempt) {
291
- const exp = Math.min(this.opts.baseBackoffMs * 2 ** (attempt - 1), this.opts.backoffCapMs);
292
- const jitter = exp * 0.2 * (Math.random() * 2 - 1);
293
- const delay = Math.max(0, Math.round(exp + jitter));
294
- await new Promise((resolve) => setTimeout(resolve, delay));
295
- }
296
- }
@@ -1,42 +0,0 @@
1
- import { type ReadinessReport, type VenueId } from '@reefclaw/shared';
2
- /** Venue-agnostic reachability probe — BinancePublicApi.probeReachability and
3
- * HyperliquidPublicApi.probeReachability both return exactly this shape. */
4
- export interface VenueReachabilityProbe {
5
- probeReachability(): Promise<{
6
- outcome: 'reachable' | 'geo_blocked' | 'unreachable' | 'unknown';
7
- driftMs: number | null;
8
- }>;
9
- }
10
- export interface ReadinessReporterOptions {
11
- apiBaseUrl: string;
12
- token: string;
13
- /** Which venue this agent trades — decides the reachability check id
14
- * (binance_reachable vs hyperliquid_reachable) and which host `publicApi`
15
- * probes. The reporter probes ONLY the configured venue: on a
16
- * Binance-451-blocked host trading Hyperliquid, a Binance probe would be
17
- * a permanent false alarm (plan §5.11). */
18
- venue: VenueId;
19
- /** Public API of the CONFIGURED venue (probe only). */
20
- publicApi: VenueReachabilityProbe;
21
- /** Number of trading tools registered (a health signal). */
22
- toolCount: number;
23
- fetchImpl?: typeof fetch;
24
- intervalMs?: number;
25
- requestTimeoutMs?: number;
26
- }
27
- /** Run every connect-phase check once and assemble the report. Exported for
28
- * unit tests.
29
- *
30
- * `bootWarmup` marks the FIRST cycle, which fires during gateway boot while
31
- * the event loop is congested (WS start, snapshot, seed all racing). That
32
- * delay between the probe's server-time response and the local `Date.now()`
33
- * read inflates the apparent clock drift — observed −4112ms at boot
34
- * self-correcting to −108ms on the next 5-min cycle. During warm-up a
35
- * warn/fail drift is reported 'unknown' (not amber/red) so the readiness
36
- * banner doesn't cry-wolf for ~5 min after every restart; a genuinely
37
- * skewed clock still surfaces on cycle 2. */
38
- export declare function collectReadiness(opts: Pick<ReadinessReporterOptions, 'venue' | 'publicApi' | 'toolCount'>, bootWarmup?: boolean): Promise<ReadinessReport>;
39
- /** Test-only — reset the singleton guard between unit tests. */
40
- export declare function __resetReadinessReporterForTests(): void;
41
- /** Fire the readiness report once at boot then on an unref'd interval. */
42
- export declare function startReadinessReporter(opts: ReadinessReporterOptions): void;