@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,110 +0,0 @@
1
- // Tool: modify_target — move the exchange-side take-profit on an open live
2
- // position. Mirror of modify_stop; see that file for rationale.
3
- import { validateTargetDirection } from '../live/bracket-params.js';
4
- import { formatError } from '../logger.js';
5
- import { isWave9ManagedPosition } from '../wave9/paper-admission-guard.js';
6
- export async function modifyTargetTool(args, deps) {
7
- if (!args.symbol)
8
- return { error: 'symbol is required.' };
9
- if (!Number.isFinite(args.new_target_price) || args.new_target_price <= 0) {
10
- return { error: 'new_target_price must be a positive number.' };
11
- }
12
- if (!deps.adapter.isLive) {
13
- return modifyTargetPaper(deps.adapter, args);
14
- }
15
- if (deps.checkWave9LiveSymbolOwnership && !deps.operationLock) {
16
- return {
17
- error: 'Live modify_target refused: the shared trading operation lock is required ' +
18
- 'while Wave 9 LIVE ownership checks are enabled.',
19
- };
20
- }
21
- const modifyLive = async () => {
22
- if (deps.checkWave9LiveSymbolOwnership) {
23
- let ownership;
24
- try {
25
- ownership = await deps.checkWave9LiveSymbolOwnership(args.symbol);
26
- }
27
- catch (err) {
28
- return {
29
- error: `modify_target refused at mutation boundary: Wave 9 LIVE ownership check failed ` +
30
- `for ${args.symbol} (${formatError(err)}).`,
31
- };
32
- }
33
- if (ownership.status === 'owned' || ownership.status === 'ambiguous') {
34
- return {
35
- error: `modify_target refused at mutation boundary: ${args.symbol} has ` +
36
- `${ownership.status} Wave 9 LIVE ownership (${ownership.reason}). ` +
37
- 'Wave 9 is targetless and exits only on stop or completed-daily reversal.',
38
- };
39
- }
40
- }
41
- const mgr = deps.adapter.getBracketManager?.();
42
- const ledger = deps.adapter.getBracketLedger?.();
43
- if (!mgr || !ledger) {
44
- return { error: 'Bracket orders are not enabled. Set brackets.mode in plugin-config.json to "observe" or "enforce".' };
45
- }
46
- const entry = ledger.getBySymbol(args.symbol);
47
- if (!entry) {
48
- return { error: `No active bracket for ${args.symbol}.` };
49
- }
50
- const refPrice = entry.stopPrice && entry.targetPrice
51
- ? (entry.stopPrice + entry.targetPrice) / 2
52
- : await deps.adapter.getLastPrice(args.symbol);
53
- if (refPrice != null && refPrice > 0) {
54
- const msg = validateTargetDirection(entry.entrySide, refPrice, args.new_target_price);
55
- if (msg)
56
- return { error: msg };
57
- }
58
- try {
59
- await mgr.modifyTarget(args.symbol, args.new_target_price);
60
- return {
61
- ok: true,
62
- symbol: args.symbol,
63
- old_target_price: entry.targetPrice ?? null,
64
- new_target_price: args.new_target_price,
65
- };
66
- }
67
- catch (err) {
68
- return { error: formatError(err) };
69
- }
70
- };
71
- try {
72
- return deps.operationLock
73
- ? await deps.operationLock.withAccountLock(`generic-modify-target-final:${args.symbol}`, modifyLive)
74
- : await modifyLive();
75
- }
76
- catch (err) {
77
- return { error: formatError(err) };
78
- }
79
- }
80
- /** Paper: move the take-profit on the open position's metadata in place. */
81
- function modifyTargetPaper(adapter, args) {
82
- const sim = adapter.getSimulator();
83
- const pos = sim.getPositions(args.symbol)[0];
84
- if (!pos) {
85
- return { error: `No open position for ${args.symbol}.` };
86
- }
87
- if (isWave9ManagedPosition(pos)) {
88
- return { error: 'modify_target refused: Wave 9 is targetless and exits only on stop or completed-daily reversal.' };
89
- }
90
- const refPrice = pos.markPrice;
91
- const entrySide = pos.side === 'long' ? 'buy' : 'sell';
92
- if (Number.isFinite(refPrice) && refPrice > 0) {
93
- const msg = validateTargetDirection(entrySide, refPrice, args.new_target_price);
94
- if (msg)
95
- return { error: msg };
96
- }
97
- const oldTarget = pos.targetPrice ?? null;
98
- try {
99
- sim.updatePositionMetadata(args.symbol, { targetPrice: args.new_target_price });
100
- }
101
- catch (err) {
102
- return { error: formatError(err) };
103
- }
104
- return {
105
- ok: true,
106
- symbol: args.symbol,
107
- old_target_price: oldTarget,
108
- new_target_price: args.new_target_price,
109
- };
110
- }
@@ -1,22 +0,0 @@
1
- import type { PositionDecisionsClient, ProposeLearningResponse } from '../ingest/position-decisions-client.js';
2
- export interface ProposeLearningArgs {
3
- applies_at: 'entry' | 'heartbeat' | 'close';
4
- title: string;
5
- directive: string;
6
- source_mined_pattern_id?: string;
7
- trigger_condition?: Record<string, unknown>;
8
- evidence?: Record<string, unknown>;
9
- }
10
- export interface ProposeLearningDeps {
11
- decisionsClient?: PositionDecisionsClient;
12
- userId?: string;
13
- }
14
- export type ProposeLearningResult = (ProposeLearningResponse & {
15
- ok: true;
16
- }) | {
17
- error: string;
18
- throttled?: boolean;
19
- proposals_used?: number;
20
- proposals_limit?: number;
21
- };
22
- export declare function proposeLearningTool(args: ProposeLearningArgs, deps: ProposeLearningDeps): Promise<ProposeLearningResult>;
@@ -1,65 +0,0 @@
1
- // Tool: propose_learning — Phase 4.5 agent-side write capability.
2
- //
3
- // The agent calls this once per UTC day during its self-assessment routine,
4
- // after reading get_my_mined_patterns + get_my_proposed_learnings, to draft a
5
- // new candidate learning for its operator to review.
6
- //
7
- // Critically:
8
- // - confidence is determined SERVER-SIDE by the operator's trust mode.
9
- // The agent never writes 'confirmed' directly. Under trust=auto, the
10
- // server flips confidence='confirmed' + auto_confirmed=true so the
11
- // proposal takes effect immediately.
12
- // - proposed_by is hardcoded 'agent' in the route — never trusted from
13
- // this caller.
14
- // - Server-side throttle of 3 proposals per 24h per user means most days
15
- // the agent will draft 0-3, not 30.
16
- //
17
- // Directive style guide (enforced in SKILL.md, not in code, to preserve
18
- // agency over wording): n / effect size / p / a recent concrete example /
19
- // default action / override conditions.
20
- import { logger, formatError } from '../logger.js';
21
- const TAG = 'propose-learning';
22
- const APPLIES_AT_VALUES = new Set(['entry', 'heartbeat', 'close']);
23
- export async function proposeLearningTool(args, deps) {
24
- if (!deps.decisionsClient || !deps.userId) {
25
- return { error: 'Position-decisions ingest is not configured; cannot propose learnings.' };
26
- }
27
- if (!args.applies_at || !APPLIES_AT_VALUES.has(args.applies_at)) {
28
- return { error: "applies_at is required and must be one of: 'entry', 'heartbeat', 'close'." };
29
- }
30
- if (typeof args.title !== 'string' || args.title.trim().length < 4) {
31
- return { error: 'title required (min 4 chars).' };
32
- }
33
- if (typeof args.directive !== 'string' || args.directive.trim().length < 20) {
34
- return { error: 'directive required (min 20 chars).' };
35
- }
36
- let response;
37
- try {
38
- response = await deps.decisionsClient.proposeLearning(deps.userId, {
39
- appliesAt: args.applies_at,
40
- title: args.title.trim(),
41
- directive: args.directive.trim(),
42
- sourceMinedPatternId: args.source_mined_pattern_id,
43
- triggerCondition: args.trigger_condition,
44
- evidence: args.evidence,
45
- });
46
- }
47
- catch (err) {
48
- logger.warn(TAG, `proposeLearning threw: ${formatError(err)}`);
49
- return { error: 'Failed to post proposal to webapp.' };
50
- }
51
- if (!response) {
52
- // The client treats 4xx as terminal-dropped and 5xx+network as retry-
53
- // exhausted. Either way we get null and surface a generic error. The
54
- // throttle status (429) would have been a 4xx terminal drop without a
55
- // structured body returned through this path — agent can call
56
- // get_my_proposed_learnings to check.
57
- return {
58
- error: 'Proposal was not accepted (could be throttled, validation error, or network failure). Inspect logs and recent proposals to diagnose.',
59
- };
60
- }
61
- return {
62
- ok: true,
63
- ...response,
64
- };
65
- }
@@ -1,30 +0,0 @@
1
- import type { PositionDecisionsClient, ReviewOutcomesResponse } from '../ingest/position-decisions-client.js';
2
- export interface QueryReviewOutcomesArgs {
3
- verdict?: 'hold' | 'add_on' | 'close_recommended';
4
- thesis_status?: 'intact' | 'weakening' | 'invalidated' | 'evolving';
5
- regime_current?: string;
6
- symbol?: string;
7
- side?: 'long' | 'short';
8
- setup_type?: string;
9
- days_back?: number;
10
- min_score_delta?: number;
11
- max_score_delta?: number;
12
- closed_only?: boolean;
13
- sample_limit?: number;
14
- }
15
- export interface QueryReviewOutcomesDeps {
16
- decisionsClient?: PositionDecisionsClient;
17
- userId?: string;
18
- }
19
- export type QueryReviewOutcomesResult = (ReviewOutcomesResponse & {
20
- ok: true;
21
- }) | {
22
- ok: true;
23
- note: string;
24
- filters: Record<string, unknown>;
25
- stats: ReviewOutcomesResponse['stats'];
26
- sample: [];
27
- } | {
28
- error: string;
29
- };
30
- export declare function queryReviewOutcomesTool(args: QueryReviewOutcomesArgs, deps: QueryReviewOutcomesDeps): Promise<QueryReviewOutcomesResult>;
@@ -1,64 +0,0 @@
1
- // Tool: query_review_outcomes — Phase 2 of the Agent Learning Loop.
2
- //
3
- // Aggregate-stats + sample over the position_review_outcomes view. Lets the
4
- // agent ask "what happened to positions where I filed verdict=hold +
5
- // thesis_status=weakening over the last 7 days?" and receive a count, win
6
- // rate, median R, and a small sample of matching reviews.
7
- //
8
- // Use case: at session start (and daily), the agent runs this for its
9
- // most-used (verdict, thesis_status) combinations. Any combination showing
10
- // median R < 0 across 5+ closed samples is the agent's evidence that the
11
- // pattern is bleeding edge.
12
- //
13
- // See docs/AGENT_LEARNING_LOOP_PLAN.md §3 Phase 2.
14
- import { logger, formatError } from '../logger.js';
15
- const TAG = 'query-review-outcomes';
16
- export async function queryReviewOutcomesTool(args, deps) {
17
- if (!deps.decisionsClient || !deps.userId) {
18
- return {
19
- ok: true,
20
- note: 'Position-decisions ingest is not configured; outcomes are unavailable.',
21
- filters: { ...args },
22
- stats: emptyStats(),
23
- sample: [],
24
- };
25
- }
26
- const filters = {
27
- verdict: args.verdict,
28
- thesisStatus: args.thesis_status,
29
- regimeCurrent: args.regime_current,
30
- symbol: args.symbol,
31
- side: args.side,
32
- setupType: args.setup_type,
33
- daysBack: args.days_back,
34
- minScoreDelta: args.min_score_delta,
35
- maxScoreDelta: args.max_score_delta,
36
- closedOnly: args.closed_only,
37
- sampleLimit: args.sample_limit,
38
- };
39
- let response;
40
- try {
41
- response = await deps.decisionsClient.queryReviewOutcomes(deps.userId, filters);
42
- }
43
- catch (err) {
44
- logger.warn(TAG, `queryReviewOutcomes threw: ${formatError(err)}`);
45
- return { error: 'Failed to fetch review outcomes from webapp.' };
46
- }
47
- if (!response) {
48
- return { error: 'Webapp /api/internal/positions/reviews/with-outcomes returned no result.' };
49
- }
50
- return { ok: true, ...response };
51
- }
52
- function emptyStats() {
53
- return {
54
- nTotal: 0,
55
- nClosed: 0,
56
- winRate: null,
57
- medianR: null,
58
- meanR: null,
59
- medianGiveBack: null,
60
- p25R: null,
61
- p75R: null,
62
- outcomeCounts: {},
63
- };
64
- }
@@ -1,21 +0,0 @@
1
- import type { IntelApiDeps } from './intel-api.js';
2
- export interface QueryTradesArgs {
3
- symbol?: string;
4
- setup_type?: string;
5
- strategy?: string;
6
- regime?: string;
7
- direction?: string;
8
- outcome?: string;
9
- min_duration_seconds?: number;
10
- max_duration_seconds?: number;
11
- min_pnl_pct?: number;
12
- max_pnl_pct?: number;
13
- min_confluence_score?: number;
14
- hours?: number;
15
- feature_filters?: string;
16
- group_by?: string;
17
- limit?: number;
18
- }
19
- export declare function queryTradesTool(args: QueryTradesArgs, deps: IntelApiDeps): Promise<Record<string, unknown> | {
20
- error: string;
21
- }>;
@@ -1,37 +0,0 @@
1
- // Tool: query_trades — flexible trade history query with filters + aggregation.
2
- // Lets the agent ask arbitrary questions about its own performance:
3
- // "what's my win rate when ADX > 40?", "best setup per regime?", etc.
4
- import { fetchIntelApi } from './intel-api.js';
5
- export async function queryTradesTool(args, deps) {
6
- // Parse feature_filters from JSON string if provided
7
- let featureFilters;
8
- if (args.feature_filters) {
9
- try {
10
- featureFilters = JSON.parse(args.feature_filters);
11
- }
12
- catch {
13
- return { error: 'feature_filters must be valid JSON array, e.g. [{"field":"adx","op":"gt","value":40}]' };
14
- }
15
- }
16
- return fetchIntelApi('/api/trades/query', deps, {
17
- method: 'POST',
18
- body: {
19
- symbol: args.symbol,
20
- setup_type: args.setup_type,
21
- strategy: args.strategy,
22
- regime: args.regime,
23
- direction: args.direction,
24
- outcome: args.outcome,
25
- min_duration_seconds: args.min_duration_seconds,
26
- max_duration_seconds: args.max_duration_seconds,
27
- min_pnl_pct: args.min_pnl_pct,
28
- max_pnl_pct: args.max_pnl_pct,
29
- min_confluence_score: args.min_confluence_score,
30
- hours: args.hours,
31
- feature_filters: featureFilters,
32
- group_by: args.group_by,
33
- limit: args.limit,
34
- },
35
- timeoutMs: 15_000,
36
- });
37
- }
@@ -1,38 +0,0 @@
1
- import type { IExchangeAdapter } from '../exchange-adapter.js';
2
- import { type RecordPositionReviewsArgs } from './assessment-validation.js';
3
- import type { PositionDecisionsClient } from '../ingest/position-decisions-client.js';
4
- import type { PositionStateStore } from '../live/position-state-store.js';
5
- import type { MicrostructureAssembler } from '../live/microstructure-assembler.js';
6
- export interface RecordPositionReviewsDeps {
7
- adapter: IExchangeAdapter;
8
- decisionsClient?: PositionDecisionsClient;
9
- stateStore?: PositionStateStore;
10
- /** User id used for the webapp ingest header. */
11
- userId?: string;
12
- /** Current gate mode — drives the superset rule. */
13
- gateMode?: 'off' | 'shadow' | 'observe' | 'enforce';
14
- /** Optional snapshot of currently-open symbols at heartbeat-tick time.
15
- * Plugin embeds this into the heartbeat result; agent passes it through.
16
- * When absent we derive from adapter.getPositions(). */
17
- openSymbolsSnapshot?: ReadonlySet<string>;
18
- /** Optional pre-fetched microstructure context — when supplied, the tool
19
- * fills review rows from this map without going to the assembler. Used by
20
- * tests that don't want to mock the network. */
21
- microstructureBySymbol?: Map<string, {
22
- restingBandImbalance05?: number;
23
- cascadePulse60s?: 'quiet' | 'elevated' | 'active_cascade';
24
- coverageBpc?: number;
25
- }>;
26
- /** When provided AND `microstructureBySymbol` is NOT supplied, the tool
27
- * fetches microstructure for every reviewed symbol via the assembler
28
- * before processing reviews. Resolves PR1 deferral #3. */
29
- microstructureAssembler?: MicrostructureAssembler;
30
- }
31
- export interface RecordPositionReviewsResult {
32
- ok: boolean;
33
- filed: number;
34
- error?: string;
35
- }
36
- export declare function recordPositionReviewsTool(args: RecordPositionReviewsArgs, deps: RecordPositionReviewsDeps): Promise<RecordPositionReviewsResult | {
37
- error: string;
38
- }>;
@@ -1,147 +0,0 @@
1
- // Tool: record_position_reviews — plural-form per-heartbeat-per-open-position
2
- // review filing. Schema-validated like v2.10.0 close validator. POSTs each
3
- // review to the webapp's /api/internal/position-reviews endpoint and updates
4
- // the local position-state-store's lastReviewAt for stale-gate evaluation.
5
- //
6
- // Mode behavior (positionReview.mode in plugin-config):
7
- // - off : tool callable, validator runs, but no SKILL.md mandate.
8
- // Used while feature is being soaked.
9
- // - shadow : SKILL.md mandates the call; validator only runs per-review.
10
- // - observe : same as shadow + soft-warn create_order on stale review.
11
- // - enforce : same + superset rule + hard-reject create_order on stale.
12
- //
13
- // Auto-capture of orderbook context (microstructure.heartbeatPush='on'):
14
- // the agent need not pass restingBandImbalance05 / cascadePulseAtReview /
15
- // coveragePctAtReview — the tool fills them from the latest intel reading.
16
- // When the flag is off, fields stay null.
17
- //
18
- // See docs/POSITION_DECISION_JOURNAL_PLAN.md.
19
- import { logger, formatError } from '../logger.js';
20
- import { validatePositionReviews, } from './assessment-validation.js';
21
- import { normalizeBracketSymbol } from '../live/bracket-ledger.js';
22
- const TAG = 'record-position-reviews';
23
- export async function recordPositionReviewsTool(args, deps) {
24
- // Build the open-symbols snapshot for the superset check.
25
- // Normalize every symbol — Binance live form returns settle-suffixed
26
- // 'SOL/USDT:USDT' while the state-store + agent-side reviews use the
27
- // canonical 'SOL/USDT'. Without this the superset check rejects every
28
- // heartbeat and the discipline gate becomes a brick wall.
29
- let openSymbols;
30
- if (deps.openSymbolsSnapshot) {
31
- openSymbols = new Set(Array.from(deps.openSymbolsSnapshot, normalizeBracketSymbol));
32
- }
33
- else {
34
- let positions;
35
- try {
36
- positions = await deps.adapter.getPositionsOrNull();
37
- }
38
- catch (err) {
39
- logger.warn(TAG, `getPositions threw for superset check: ${formatError(err)}`);
40
- positions = null;
41
- }
42
- if (positions === null) {
43
- // Fetch failed / threw — the open-position set is UNKNOWN, not empty.
44
- // In enforce mode the superset rule iterates ctx.openSymbols; an empty
45
- // set makes `missing` empty so the gate trivially PASSES — i.e. the
46
- // agent could file zero reviews during a rate-limit window and the
47
- // discipline gate would silently miss it. Reject so the agent retries
48
- // next heartbeat (same null != empty contract as audit / reconciler).
49
- // At lower gate modes the superset rule never runs (openSymbols unused),
50
- // so proceeding with an empty set is harmless.
51
- const mode = deps.gateMode ?? 'off';
52
- if (mode === 'enforce') {
53
- logger.warn(TAG, 'getPositions unavailable (null) in enforce mode — cannot verify review superset; rejecting for retry');
54
- return {
55
- error: 'Exchange position state unavailable — cannot verify review coverage. Retry next heartbeat.',
56
- };
57
- }
58
- logger.warn(TAG, 'getPositions unavailable (null); proceeding (superset gate not enforced at this mode)');
59
- openSymbols = new Set();
60
- }
61
- else {
62
- openSymbols = new Set(positions.map((p) => normalizeBracketSymbol(p.symbol)));
63
- }
64
- }
65
- // Validator gate.
66
- const v = validatePositionReviews(args, {
67
- openSymbols,
68
- gateMode: deps.gateMode ?? 'off',
69
- });
70
- if (!v.ok) {
71
- logger.warn(TAG, `record_position_reviews rejected: ${v.error}`);
72
- return { error: v.error ?? 'Invalid record_position_reviews arguments.' };
73
- }
74
- // Cast — validator confirmed the shape.
75
- const reviews = args.reviews.slice();
76
- // Resolve microstructure context. Caller-supplied map wins (tests); else
77
- // fetch via the assembler (live path). Returns an empty map when the
78
- // heartbeatPush flag is off — review rows then get null orderbook fields.
79
- let microstructure = deps.microstructureBySymbol;
80
- if (!microstructure && deps.microstructureAssembler) {
81
- try {
82
- const symbols = reviews
83
- .map((r) => r.symbol)
84
- .filter((s) => typeof s === 'string' && s.length > 0);
85
- microstructure = await deps.microstructureAssembler.forSymbols(symbols);
86
- }
87
- catch (err) {
88
- logger.warn(TAG, `microstructure fetch threw — proceeding with null fields: ${formatError(err)}`);
89
- microstructure = new Map();
90
- }
91
- }
92
- // Forward each review to the webapp + update local state-store.
93
- // We POST in parallel — they target append-only endpoints and the order is
94
- // not load-bearing (each row carries its own reviewAt).
95
- let filed = 0;
96
- if (deps.decisionsClient && deps.userId) {
97
- const promises = [];
98
- for (const r of reviews) {
99
- const stateEntry = deps.stateStore?.get(r.symbol);
100
- const positionId = stateEntry?.webappPositionId;
101
- if (!positionId) {
102
- logger.warn(TAG, `No webappPositionId for ${r.symbol} — review will not be persisted to webapp until the position upserts.`);
103
- continue;
104
- }
105
- const micro = microstructure?.get(r.symbol);
106
- const payload = {
107
- positionId,
108
- reviewAt: Date.now(),
109
- verdict: r.verdict,
110
- thesisStatus: r.thesis_status,
111
- entryScore: r.entry_score,
112
- currentScore: r.current_score,
113
- scoreDelta: r.score_delta,
114
- confluenceComponents: r.confluence_components ?? {},
115
- regimeEntry: r.regime_entry,
116
- regimeCurrent: r.regime_current,
117
- regimeConfidence: r.regime_confidence,
118
- rMultiple: r.r_multiple,
119
- distanceToStopBps: r.distance_to_stop_bps,
120
- distanceToTargetBps: r.distance_to_target_bps ?? null,
121
- timeInPositionMinutes: r.time_in_position_minutes,
122
- mfeR: r.mfe_r,
123
- giveBackPct: r.give_back_pct,
124
- whatChanged: r.what_changed,
125
- invalidationTrigger: r.invalidation_trigger,
126
- // Auto-filled microstructure when push is on.
127
- restingBandImbalance05: micro?.restingBandImbalance05 ?? null,
128
- cascadePulseAtReview: micro?.cascadePulse60s ?? null,
129
- coveragePctAtReview: micro?.coverageBpc != null ? micro.coverageBpc / 100 : null,
130
- imbalanceDeltaSinceEntry: null, // filled in once we add per-position imbalance baselines
131
- };
132
- // Fire-and-forget — caller doesn't block on the network.
133
- deps.decisionsClient.postReview(deps.userId, payload);
134
- filed++;
135
- // Update state-store for stale-gate + exit-gate.
136
- if (deps.stateStore) {
137
- deps.stateStore.recordReview(r.symbol, r.verdict, undefined, r.thesis_status);
138
- }
139
- }
140
- await Promise.allSettled(promises);
141
- }
142
- else {
143
- logger.info(TAG, `record_position_reviews validated ${reviews.length} reviews; no decisionsClient configured (off-mode).`);
144
- filed = 0;
145
- }
146
- return { ok: true, filed };
147
- }
@@ -1,16 +0,0 @@
1
- import type { IntelApiDeps } from './intel-api.js';
2
- export interface SaveStrategyArgs {
3
- name: string;
4
- description?: string;
5
- regimes: string;
6
- direction_rule: string;
7
- conditions: string;
8
- entry_type: string;
9
- entry_params?: string;
10
- stop_type: string;
11
- stop_params?: string;
12
- target_r_multiples: string;
13
- }
14
- export declare function saveStrategyTool(args: SaveStrategyArgs, deps: IntelApiDeps): Promise<Record<string, unknown> | {
15
- error: string;
16
- }>;
@@ -1,46 +0,0 @@
1
- // Tool: save_strategy — create or update a strategy in the Strategy Box.
2
- // Posts a declarative strategy config to the Intelligence API.
3
- import { fetchIntelApi } from './intel-api.js';
4
- export async function saveStrategyTool(args, deps) {
5
- let conditions;
6
- try {
7
- conditions = JSON.parse(args.conditions);
8
- }
9
- catch {
10
- return { error: 'conditions must be valid JSON array of {type, params} objects' };
11
- }
12
- let entryParams = {};
13
- if (args.entry_params) {
14
- try {
15
- entryParams = JSON.parse(args.entry_params);
16
- }
17
- catch {
18
- return { error: 'entry_params must be valid JSON' };
19
- }
20
- }
21
- let stopParams = {};
22
- if (args.stop_params) {
23
- try {
24
- stopParams = JSON.parse(args.stop_params);
25
- }
26
- catch {
27
- return { error: 'stop_params must be valid JSON' };
28
- }
29
- }
30
- const config = {
31
- name: args.name,
32
- description: args.description ?? '',
33
- version: 1,
34
- regimeWhitelist: args.regimes.split(',').map(s => s.trim()),
35
- minConfidence: 0.7,
36
- directionRule: args.direction_rule,
37
- conditions,
38
- entryRule: { type: args.entry_type, params: entryParams },
39
- stopRule: { type: args.stop_type, params: stopParams },
40
- targetRMultiples: args.target_r_multiples.split(',').map(s => parseFloat(s.trim())),
41
- };
42
- return fetchIntelApi('/api/strategies', deps, {
43
- method: 'POST',
44
- body: config,
45
- });
46
- }
@@ -1,18 +0,0 @@
1
- import type { IntelApiDeps } from './intel-api.js';
2
- import type { PositionDecisionsClient } from '../ingest/position-decisions-client.js';
3
- export interface ScanPairsArgs {
4
- /** Minimum confluence score (number of conditions met) to include in rankings. */
5
- min_score?: number;
6
- /** Optional whitelist of symbols to scan. When omitted, scans all configured pairs. */
7
- symbols?: string[];
8
- }
9
- export interface ScanPairsDecisionsDeps {
10
- decisionsClient?: PositionDecisionsClient;
11
- userId?: string;
12
- }
13
- export declare function scanPairsTool(args: ScanPairsArgs, deps: IntelApiDeps, decisionsDeps?: ScanPairsDecisionsDeps): Promise<Record<string, unknown> | {
14
- error: string;
15
- }>;
16
- export declare const __testing__: {
17
- resetCaches(): void;
18
- };