@reefclaw/connect 0.1.11 → 0.1.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (397) hide show
  1. package/assets/bridge/gateway/heartbeat-cron.d.ts +27 -0
  2. package/assets/bridge/gateway/heartbeat-cron.js +85 -0
  3. package/assets/bridge/providers/gateway.d.ts +2 -0
  4. package/assets/bridge/providers/gateway.js +57 -16
  5. package/assets/bridge/setup.js +6 -51
  6. package/dist/deps.js +2 -2
  7. package/dist/plugin.js +35 -7
  8. package/package.json +1 -1
  9. package/assets/plugin/audit/mode-transition-audit.d.ts +0 -11
  10. package/assets/plugin/audit/mode-transition-audit.js +0 -29
  11. package/assets/plugin/balance-utils.d.ts +0 -36
  12. package/assets/plugin/balance-utils.js +0 -98
  13. package/assets/plugin/ccxt/binance-ban-gate.d.ts +0 -47
  14. package/assets/plugin/ccxt/binance-ban-gate.js +0 -420
  15. package/assets/plugin/ccxt/binance-private.d.ts +0 -346
  16. package/assets/plugin/ccxt/binance-private.js +0 -1525
  17. package/assets/plugin/ccxt/binance-public.d.ts +0 -34
  18. package/assets/plugin/ccxt/binance-public.js +0 -180
  19. package/assets/plugin/ccxt/intel-public.d.ts +0 -25
  20. package/assets/plugin/ccxt/intel-public.js +0 -80
  21. package/assets/plugin/ccxt/public-market-data-api.d.ts +0 -26
  22. package/assets/plugin/ccxt/public-market-data-api.js +0 -23
  23. package/assets/plugin/config/agent-config-client.d.ts +0 -77
  24. package/assets/plugin/config/agent-config-client.js +0 -188
  25. package/assets/plugin/config/agent-config-poller.d.ts +0 -32
  26. package/assets/plugin/config/agent-config-poller.js +0 -101
  27. package/assets/plugin/config/brackets-config.d.ts +0 -22
  28. package/assets/plugin/config/brackets-config.js +0 -58
  29. package/assets/plugin/config/entitlement-gate.d.ts +0 -51
  30. package/assets/plugin/config/entitlement-gate.js +0 -137
  31. package/assets/plugin/config/gate-store.d.ts +0 -18
  32. package/assets/plugin/config/gate-store.js +0 -61
  33. package/assets/plugin/config/plugin-config-io.d.ts +0 -222
  34. package/assets/plugin/config/plugin-config-io.js +0 -126
  35. package/assets/plugin/config/position-review-config.d.ts +0 -35
  36. package/assets/plugin/config/position-review-config.js +0 -105
  37. package/assets/plugin/config/tool-gate.d.ts +0 -53
  38. package/assets/plugin/config/tool-gate.js +0 -128
  39. package/assets/plugin/config/user-data-stream-config.d.ts +0 -89
  40. package/assets/plugin/config/user-data-stream-config.js +0 -239
  41. package/assets/plugin/connector-supervisor.d.ts +0 -36
  42. package/assets/plugin/connector-supervisor.js +0 -149
  43. package/assets/plugin/exchange-adapter.d.ts +0 -65
  44. package/assets/plugin/exchange-adapter.js +0 -4
  45. package/assets/plugin/index.d.ts +0 -30
  46. package/assets/plugin/index.js +0 -2756
  47. package/assets/plugin/ingest/pending-entry-metadata.d.ts +0 -74
  48. package/assets/plugin/ingest/pending-entry-metadata.js +0 -236
  49. package/assets/plugin/ingest/position-auto-capture.d.ts +0 -171
  50. package/assets/plugin/ingest/position-auto-capture.js +0 -709
  51. package/assets/plugin/ingest/position-decisions-client.d.ts +0 -327
  52. package/assets/plugin/ingest/position-decisions-client.js +0 -306
  53. package/assets/plugin/ingest/readiness-reporter.d.ts +0 -42
  54. package/assets/plugin/ingest/readiness-reporter.js +0 -163
  55. package/assets/plugin/ingest/reconcile-db-vs-exchange.d.ts +0 -51
  56. package/assets/plugin/ingest/reconcile-db-vs-exchange.js +0 -170
  57. package/assets/plugin/ingest/reconciler-cleanup.d.ts +0 -37
  58. package/assets/plugin/ingest/reconciler-cleanup.js +0 -147
  59. package/assets/plugin/ingest/rest-gap-filler.d.ts +0 -191
  60. package/assets/plugin/ingest/rest-gap-filler.js +0 -565
  61. package/assets/plugin/ingest/touched-symbols-store.d.ts +0 -25
  62. package/assets/plugin/ingest/touched-symbols-store.js +0 -96
  63. package/assets/plugin/ingest/trade-store-client.d.ts +0 -40
  64. package/assets/plugin/ingest/trade-store-client.js +0 -125
  65. package/assets/plugin/ingest/ws-ingest.d.ts +0 -43
  66. package/assets/plugin/ingest/ws-ingest.js +0 -126
  67. package/assets/plugin/learning/setup-family.d.ts +0 -21
  68. package/assets/plugin/learning/setup-family.js +0 -103
  69. package/assets/plugin/lifecycle/install-signal-handlers.d.ts +0 -33
  70. package/assets/plugin/lifecycle/install-signal-handlers.js +0 -112
  71. package/assets/plugin/lifecycle/shutdown-coordinator.d.ts +0 -43
  72. package/assets/plugin/lifecycle/shutdown-coordinator.js +0 -131
  73. package/assets/plugin/lifecycle/trading-operation-lock.d.ts +0 -17
  74. package/assets/plugin/lifecycle/trading-operation-lock.js +0 -14
  75. package/assets/plugin/live/bracket-id.d.ts +0 -26
  76. package/assets/plugin/live/bracket-id.js +0 -112
  77. package/assets/plugin/live/bracket-ledger.d.ts +0 -54
  78. package/assets/plugin/live/bracket-ledger.js +0 -267
  79. package/assets/plugin/live/bracket-manager.d.ts +0 -82
  80. package/assets/plugin/live/bracket-manager.js +0 -478
  81. package/assets/plugin/live/bracket-params.d.ts +0 -22
  82. package/assets/plugin/live/bracket-params.js +0 -124
  83. package/assets/plugin/live/bracket-reconciler.d.ts +0 -95
  84. package/assets/plugin/live/bracket-reconciler.js +0 -573
  85. package/assets/plugin/live/bracket-types.d.ts +0 -102
  86. package/assets/plugin/live/bracket-types.js +0 -8
  87. package/assets/plugin/live/deposit-tracker.d.ts +0 -62
  88. package/assets/plugin/live/deposit-tracker.js +0 -97
  89. package/assets/plugin/live/emergency-controls.d.ts +0 -32
  90. package/assets/plugin/live/emergency-controls.js +0 -226
  91. package/assets/plugin/live/exchange-errors.d.ts +0 -12
  92. package/assets/plugin/live/exchange-errors.js +0 -130
  93. package/assets/plugin/live/exchange-info-cache.d.ts +0 -37
  94. package/assets/plugin/live/exchange-info-cache.js +0 -134
  95. package/assets/plugin/live/fact-subscriber.d.ts +0 -78
  96. package/assets/plugin/live/fact-subscriber.js +0 -182
  97. package/assets/plugin/live/fill-price.d.ts +0 -13
  98. package/assets/plugin/live/fill-price.js +0 -37
  99. package/assets/plugin/live/intent-journal.d.ts +0 -42
  100. package/assets/plugin/live/intent-journal.js +0 -122
  101. package/assets/plugin/live/listen-key-manager.d.ts +0 -70
  102. package/assets/plugin/live/listen-key-manager.js +0 -169
  103. package/assets/plugin/live/live-adapter.d.ts +0 -319
  104. package/assets/plugin/live/live-adapter.js +0 -1906
  105. package/assets/plugin/live/live-balance-enricher.d.ts +0 -32
  106. package/assets/plugin/live/live-balance-enricher.js +0 -104
  107. package/assets/plugin/live/live-bracket-api.d.ts +0 -13
  108. package/assets/plugin/live/live-bracket-api.js +0 -20
  109. package/assets/plugin/live/live-state-store.d.ts +0 -194
  110. package/assets/plugin/live/live-state-store.js +0 -450
  111. package/assets/plugin/live/local-signal-service.d.ts +0 -57
  112. package/assets/plugin/live/local-signal-service.js +0 -151
  113. package/assets/plugin/live/local-strategy-evaluator.d.ts +0 -62
  114. package/assets/plugin/live/local-strategy-evaluator.js +0 -131
  115. package/assets/plugin/live/microstructure-assembler.d.ts +0 -54
  116. package/assets/plugin/live/microstructure-assembler.js +0 -148
  117. package/assets/plugin/live/order-poller.d.ts +0 -29
  118. package/assets/plugin/live/order-poller.js +0 -125
  119. package/assets/plugin/live/position-state-store.d.ts +0 -87
  120. package/assets/plugin/live/position-state-store.js +0 -237
  121. package/assets/plugin/live/proposal-decision-listener.d.ts +0 -70
  122. package/assets/plugin/live/proposal-decision-listener.js +0 -292
  123. package/assets/plugin/live/proposal-manager.d.ts +0 -76
  124. package/assets/plugin/live/proposal-manager.js +0 -140
  125. package/assets/plugin/live/rate-limiter.d.ts +0 -47
  126. package/assets/plugin/live/rate-limiter.js +0 -159
  127. package/assets/plugin/live/reconciler.d.ts +0 -39
  128. package/assets/plugin/live/reconciler.js +0 -175
  129. package/assets/plugin/live/setup-buckets.d.ts +0 -7
  130. package/assets/plugin/live/setup-buckets.js +0 -33
  131. package/assets/plugin/live/slippage-tracker.d.ts +0 -45
  132. package/assets/plugin/live/slippage-tracker.js +0 -78
  133. package/assets/plugin/live/stop-watcher.d.ts +0 -67
  134. package/assets/plugin/live/stop-watcher.js +0 -218
  135. package/assets/plugin/live/user-data-active-probe.d.ts +0 -54
  136. package/assets/plugin/live/user-data-active-probe.js +0 -180
  137. package/assets/plugin/live/user-data-stream-controller.d.ts +0 -200
  138. package/assets/plugin/live/user-data-stream-controller.js +0 -579
  139. package/assets/plugin/live/user-data-stream-ws.d.ts +0 -22
  140. package/assets/plugin/live/user-data-stream-ws.js +0 -63
  141. package/assets/plugin/live/user-data-stream.d.ts +0 -243
  142. package/assets/plugin/live/user-data-stream.js +0 -704
  143. package/assets/plugin/logger.d.ts +0 -2
  144. package/assets/plugin/logger.js +0 -2
  145. package/assets/plugin/mfe.d.ts +0 -21
  146. package/assets/plugin/mfe.js +0 -68
  147. package/assets/plugin/onboarding/mode-ladder.d.ts +0 -1
  148. package/assets/plugin/onboarding/mode-ladder.js +0 -3
  149. package/assets/plugin/onboarding/runtime.d.ts +0 -90
  150. package/assets/plugin/onboarding/runtime.js +0 -184
  151. package/assets/plugin/openclaw.plugin.json +0 -92
  152. package/assets/plugin/paper-adapter.d.ts +0 -24
  153. package/assets/plugin/paper-adapter.js +0 -91
  154. package/assets/plugin/persistence/state-manager.d.ts +0 -66
  155. package/assets/plugin/persistence/state-manager.js +0 -222
  156. package/assets/plugin/pinned-plan.d.ts +0 -9
  157. package/assets/plugin/pinned-plan.js +0 -23
  158. package/assets/plugin/portfolio/reentry-tracker.d.ts +0 -36
  159. package/assets/plugin/portfolio/reentry-tracker.js +0 -127
  160. package/assets/plugin/portfolio/wave9-admission.d.ts +0 -67
  161. package/assets/plugin/portfolio/wave9-admission.js +0 -262
  162. package/assets/plugin/portfolio/wave9-policy.d.ts +0 -36
  163. package/assets/plugin/portfolio/wave9-policy.js +0 -183
  164. package/assets/plugin/risk/pre-trade-check.d.ts +0 -38
  165. package/assets/plugin/risk/pre-trade-check.js +0 -345
  166. package/assets/plugin/risk/pre-trade-types.d.ts +0 -60
  167. package/assets/plugin/risk/pre-trade-types.js +0 -3
  168. package/assets/plugin/shadow/shadow-tracker.d.ts +0 -36
  169. package/assets/plugin/shadow/shadow-tracker.js +0 -151
  170. package/assets/plugin/shadow/types.d.ts +0 -42
  171. package/assets/plugin/shadow/types.js +0 -20
  172. package/assets/plugin/shared/indicators-extended.d.ts +0 -52
  173. package/assets/plugin/shared/indicators-extended.js +0 -291
  174. package/assets/plugin/shared/indicators.d.ts +0 -15
  175. package/assets/plugin/shared/indicators.js +0 -114
  176. package/assets/plugin/signals/conditions/registry.d.ts +0 -16
  177. package/assets/plugin/signals/conditions/registry.js +0 -1333
  178. package/assets/plugin/signals/conditions/types.d.ts +0 -1
  179. package/assets/plugin/signals/conditions/types.js +0 -4
  180. package/assets/plugin/signals/direction-rules.d.ts +0 -3
  181. package/assets/plugin/signals/direction-rules.js +0 -24
  182. package/assets/plugin/signals/entry-rules.d.ts +0 -6
  183. package/assets/plugin/signals/entry-rules.js +0 -33
  184. package/assets/plugin/signals/serialize-context.d.ts +0 -4
  185. package/assets/plugin/signals/serialize-context.js +0 -39
  186. package/assets/plugin/signals/stop-rules.d.ts +0 -3
  187. package/assets/plugin/signals/stop-rules.js +0 -48
  188. package/assets/plugin/signals/strategy-adapter.d.ts +0 -47
  189. package/assets/plugin/signals/strategy-adapter.js +0 -209
  190. package/assets/plugin/signals/types.d.ts +0 -1
  191. package/assets/plugin/signals/types.js +0 -8
  192. package/assets/plugin/simulator/exchange-simulator.d.ts +0 -105
  193. package/assets/plugin/simulator/exchange-simulator.js +0 -759
  194. package/assets/plugin/simulator/fill-engine.d.ts +0 -53
  195. package/assets/plugin/simulator/fill-engine.js +0 -280
  196. package/assets/plugin/simulator/paper-market-feed.d.ts +0 -26
  197. package/assets/plugin/simulator/paper-market-feed.js +0 -104
  198. package/assets/plugin/simulator/realistic-fills.d.ts +0 -59
  199. package/assets/plugin/simulator/realistic-fills.js +0 -175
  200. package/assets/plugin/simulator/types.d.ts +0 -228
  201. package/assets/plugin/simulator/types.js +0 -43
  202. package/assets/plugin/strategy/builtin-strategies.d.ts +0 -2
  203. package/assets/plugin/strategy/builtin-strategies.js +0 -113
  204. package/assets/plugin/strategy/condition-registry.d.ts +0 -3
  205. package/assets/plugin/strategy/condition-registry.js +0 -153
  206. package/assets/plugin/strategy/evaluator.d.ts +0 -70
  207. package/assets/plugin/strategy/evaluator.js +0 -98
  208. package/assets/plugin/tools/assessment-validation.d.ts +0 -141
  209. package/assets/plugin/tools/assessment-validation.js +0 -473
  210. package/assets/plugin/tools/attach-brackets.d.ts +0 -39
  211. package/assets/plugin/tools/attach-brackets.js +0 -564
  212. package/assets/plugin/tools/audit-bracket-protection.d.ts +0 -49
  213. package/assets/plugin/tools/audit-bracket-protection.js +0 -683
  214. package/assets/plugin/tools/bracket-control.d.ts +0 -12
  215. package/assets/plugin/tools/bracket-control.js +0 -35
  216. package/assets/plugin/tools/cancel-all-orders.d.ts +0 -9
  217. package/assets/plugin/tools/cancel-all-orders.js +0 -8
  218. package/assets/plugin/tools/cancel-order.d.ts +0 -14
  219. package/assets/plugin/tools/cancel-order.js +0 -60
  220. package/assets/plugin/tools/check-position-health.d.ts +0 -46
  221. package/assets/plugin/tools/check-position-health.js +0 -194
  222. package/assets/plugin/tools/clear-exchange-credentials.d.ts +0 -24
  223. package/assets/plugin/tools/clear-exchange-credentials.js +0 -70
  224. package/assets/plugin/tools/close-position.d.ts +0 -45
  225. package/assets/plugin/tools/close-position.js +0 -722
  226. package/assets/plugin/tools/create-order.d.ts +0 -82
  227. package/assets/plugin/tools/create-order.js +0 -1544
  228. package/assets/plugin/tools/exit-gate.d.ts +0 -58
  229. package/assets/plugin/tools/exit-gate.js +0 -162
  230. package/assets/plugin/tools/fetch-balance.d.ts +0 -5
  231. package/assets/plugin/tools/fetch-balance.js +0 -4
  232. package/assets/plugin/tools/fetch-ohlcv.d.ts +0 -11
  233. package/assets/plugin/tools/fetch-ohlcv.js +0 -8
  234. package/assets/plugin/tools/fetch-open-orders.d.ts +0 -7
  235. package/assets/plugin/tools/fetch-open-orders.js +0 -4
  236. package/assets/plugin/tools/fetch-positions.d.ts +0 -7
  237. package/assets/plugin/tools/fetch-positions.js +0 -4
  238. package/assets/plugin/tools/fetch-ticker.d.ts +0 -11
  239. package/assets/plugin/tools/fetch-ticker.js +0 -5
  240. package/assets/plugin/tools/get-agent-profile.d.ts +0 -4
  241. package/assets/plugin/tools/get-agent-profile.js +0 -6
  242. package/assets/plugin/tools/get-analytics.d.ts +0 -6
  243. package/assets/plugin/tools/get-analytics.js +0 -7
  244. package/assets/plugin/tools/get-backtest.d.ts +0 -12
  245. package/assets/plugin/tools/get-backtest.js +0 -91
  246. package/assets/plugin/tools/get-basis.d.ts +0 -7
  247. package/assets/plugin/tools/get-basis.js +0 -7
  248. package/assets/plugin/tools/get-bracket-config.d.ts +0 -11
  249. package/assets/plugin/tools/get-bracket-config.js +0 -24
  250. package/assets/plugin/tools/get-cascade-risk.d.ts +0 -7
  251. package/assets/plugin/tools/get-cascade-risk.js +0 -8
  252. package/assets/plugin/tools/get-crypto-metrics.d.ts +0 -18
  253. package/assets/plugin/tools/get-crypto-metrics.js +0 -62
  254. package/assets/plugin/tools/get-cvd.d.ts +0 -6
  255. package/assets/plugin/tools/get-cvd.js +0 -6
  256. package/assets/plugin/tools/get-divergences.d.ts +0 -6
  257. package/assets/plugin/tools/get-divergences.js +0 -6
  258. package/assets/plugin/tools/get-funding-context.d.ts +0 -6
  259. package/assets/plugin/tools/get-funding-context.js +0 -16
  260. package/assets/plugin/tools/get-liquidation-levels.d.ts +0 -7
  261. package/assets/plugin/tools/get-liquidation-levels.js +0 -7
  262. package/assets/plugin/tools/get-liquidation-pulse.d.ts +0 -9
  263. package/assets/plugin/tools/get-liquidation-pulse.js +0 -22
  264. package/assets/plugin/tools/get-market-breadth.d.ts +0 -6
  265. package/assets/plugin/tools/get-market-breadth.js +0 -8
  266. package/assets/plugin/tools/get-market-intel.d.ts +0 -19
  267. package/assets/plugin/tools/get-market-intel.js +0 -116
  268. package/assets/plugin/tools/get-market-structure.d.ts +0 -47
  269. package/assets/plugin/tools/get-market-structure.js +0 -198
  270. package/assets/plugin/tools/get-my-mined-patterns.d.ts +0 -20
  271. package/assets/plugin/tools/get-my-mined-patterns.js +0 -61
  272. package/assets/plugin/tools/get-my-proposed-learnings.d.ts +0 -20
  273. package/assets/plugin/tools/get-my-proposed-learnings.js +0 -55
  274. package/assets/plugin/tools/get-my-recent-reviews.d.ts +0 -22
  275. package/assets/plugin/tools/get-my-recent-reviews.js +0 -66
  276. package/assets/plugin/tools/get-orderbook.d.ts +0 -21
  277. package/assets/plugin/tools/get-orderbook.js +0 -32
  278. package/assets/plugin/tools/get-pattern-scan.d.ts +0 -7
  279. package/assets/plugin/tools/get-pattern-scan.js +0 -8
  280. package/assets/plugin/tools/get-regime.d.ts +0 -6
  281. package/assets/plugin/tools/get-regime.js +0 -7
  282. package/assets/plugin/tools/get-relevant-learnings.d.ts +0 -21
  283. package/assets/plugin/tools/get-relevant-learnings.js +0 -65
  284. package/assets/plugin/tools/get-resting-liquidity.d.ts +0 -6
  285. package/assets/plugin/tools/get-resting-liquidity.js +0 -11
  286. package/assets/plugin/tools/get-risk-scenario.d.ts +0 -29
  287. package/assets/plugin/tools/get-risk-scenario.js +0 -47
  288. package/assets/plugin/tools/get-risk-summary.d.ts +0 -51
  289. package/assets/plugin/tools/get-risk-summary.js +0 -118
  290. package/assets/plugin/tools/get-sentiment.d.ts +0 -4
  291. package/assets/plugin/tools/get-sentiment.js +0 -6
  292. package/assets/plugin/tools/get-session-review.d.ts +0 -7
  293. package/assets/plugin/tools/get-session-review.js +0 -8
  294. package/assets/plugin/tools/get-setup-detail.d.ts +0 -7
  295. package/assets/plugin/tools/get-setup-detail.js +0 -322
  296. package/assets/plugin/tools/get-signals.d.ts +0 -15
  297. package/assets/plugin/tools/get-signals.js +0 -54
  298. package/assets/plugin/tools/get-sizing.d.ts +0 -6
  299. package/assets/plugin/tools/get-sizing.js +0 -6
  300. package/assets/plugin/tools/get-trade-feedback.d.ts +0 -7
  301. package/assets/plugin/tools/get-trade-feedback.js +0 -8
  302. package/assets/plugin/tools/get-trade-flow.d.ts +0 -7
  303. package/assets/plugin/tools/get-trade-flow.js +0 -7
  304. package/assets/plugin/tools/get-volume-analysis.d.ts +0 -21
  305. package/assets/plugin/tools/get-volume-analysis.js +0 -74
  306. package/assets/plugin/tools/get-volume-profile.d.ts +0 -7
  307. package/assets/plugin/tools/get-volume-profile.js +0 -7
  308. package/assets/plugin/tools/get-wave9-status.d.ts +0 -127
  309. package/assets/plugin/tools/get-wave9-status.js +0 -796
  310. package/assets/plugin/tools/helpers.d.ts +0 -26
  311. package/assets/plugin/tools/helpers.js +0 -39
  312. package/assets/plugin/tools/intel-api.d.ts +0 -34
  313. package/assets/plugin/tools/intel-api.js +0 -119
  314. package/assets/plugin/tools/intel-cache.d.ts +0 -25
  315. package/assets/plugin/tools/intel-cache.js +0 -148
  316. package/assets/plugin/tools/list-strategies.d.ts +0 -17
  317. package/assets/plugin/tools/list-strategies.js +0 -23
  318. package/assets/plugin/tools/modify-stop.d.ts +0 -21
  319. package/assets/plugin/tools/modify-stop.js +0 -120
  320. package/assets/plugin/tools/modify-target.d.ts +0 -21
  321. package/assets/plugin/tools/modify-target.js +0 -110
  322. package/assets/plugin/tools/propose-learning.d.ts +0 -22
  323. package/assets/plugin/tools/propose-learning.js +0 -65
  324. package/assets/plugin/tools/query-review-outcomes.d.ts +0 -30
  325. package/assets/plugin/tools/query-review-outcomes.js +0 -64
  326. package/assets/plugin/tools/query-trades.d.ts +0 -21
  327. package/assets/plugin/tools/query-trades.js +0 -37
  328. package/assets/plugin/tools/record-position-reviews.d.ts +0 -38
  329. package/assets/plugin/tools/record-position-reviews.js +0 -147
  330. package/assets/plugin/tools/save-strategy.d.ts +0 -16
  331. package/assets/plugin/tools/save-strategy.js +0 -46
  332. package/assets/plugin/tools/scan-pairs.d.ts +0 -22
  333. package/assets/plugin/tools/scan-pairs.js +0 -234
  334. package/assets/plugin/tools/score-setup.d.ts +0 -31
  335. package/assets/plugin/tools/score-setup.js +0 -268
  336. package/assets/plugin/tools/set-bracket-requirement.d.ts +0 -18
  337. package/assets/plugin/tools/set-bracket-requirement.js +0 -81
  338. package/assets/plugin/tools/set-exchange-credentials.d.ts +0 -25
  339. package/assets/plugin/tools/set-exchange-credentials.js +0 -80
  340. package/assets/plugin/tools/set-trading-mode.d.ts +0 -26
  341. package/assets/plugin/tools/set-trading-mode.js +0 -135
  342. package/assets/plugin/tools/test-exchange-credentials.d.ts +0 -16
  343. package/assets/plugin/tools/test-exchange-credentials.js +0 -100
  344. package/assets/plugin/tools/toggle-strategy.d.ts +0 -8
  345. package/assets/plugin/tools/toggle-strategy.js +0 -15
  346. package/assets/plugin/trading-params-cache.d.ts +0 -26
  347. package/assets/plugin/trading-params-cache.js +0 -52
  348. package/assets/plugin/types.d.ts +0 -134
  349. package/assets/plugin/types.js +0 -7
  350. package/assets/plugin/util/plugin-paths.d.ts +0 -3
  351. package/assets/plugin/util/plugin-paths.js +0 -15
  352. package/assets/plugin/venues/hyperliquid/hl-balance.d.ts +0 -116
  353. package/assets/plugin/venues/hyperliquid/hl-balance.js +0 -145
  354. package/assets/plugin/venues/hyperliquid/hl-bracket-coordinator.d.ts +0 -123
  355. package/assets/plugin/venues/hyperliquid/hl-bracket-coordinator.js +0 -533
  356. package/assets/plugin/venues/hyperliquid/hl-brackets.d.ts +0 -102
  357. package/assets/plugin/venues/hyperliquid/hl-brackets.js +0 -172
  358. package/assets/plugin/venues/hyperliquid/hl-cloid.d.ts +0 -22
  359. package/assets/plugin/venues/hyperliquid/hl-cloid.js +0 -82
  360. package/assets/plugin/venues/hyperliquid/hl-info-cache.d.ts +0 -46
  361. package/assets/plugin/venues/hyperliquid/hl-info-cache.js +0 -125
  362. package/assets/plugin/venues/hyperliquid/hl-live-adapter.d.ts +0 -146
  363. package/assets/plugin/venues/hyperliquid/hl-live-adapter.js +0 -728
  364. package/assets/plugin/venues/hyperliquid/hl-precision.d.ts +0 -61
  365. package/assets/plugin/venues/hyperliquid/hl-precision.js +0 -176
  366. package/assets/plugin/venues/hyperliquid/hl-private.d.ts +0 -88
  367. package/assets/plugin/venues/hyperliquid/hl-private.js +0 -357
  368. package/assets/plugin/venues/hyperliquid/hl-public.d.ts +0 -79
  369. package/assets/plugin/venues/hyperliquid/hl-public.js +0 -436
  370. package/assets/plugin/venues/hyperliquid/hl-rate-gate.d.ts +0 -57
  371. package/assets/plugin/venues/hyperliquid/hl-rate-gate.js +0 -220
  372. package/assets/plugin/venues/hyperliquid/hl-user-stream.d.ts +0 -90
  373. package/assets/plugin/venues/hyperliquid/hl-user-stream.js +0 -220
  374. package/assets/plugin/venues/registry.d.ts +0 -38
  375. package/assets/plugin/venues/registry.js +0 -46
  376. package/assets/plugin/venues/symbols.d.ts +0 -43
  377. package/assets/plugin/venues/symbols.js +0 -107
  378. package/assets/plugin/wave9/live-account-capture.d.ts +0 -67
  379. package/assets/plugin/wave9/live-account-capture.js +0 -435
  380. package/assets/plugin/wave9/live-autonomous-protection.d.ts +0 -39
  381. package/assets/plugin/wave9/live-autonomous-protection.js +0 -112
  382. package/assets/plugin/wave9/live-durable-reconciliation-scheduler.d.ts +0 -33
  383. package/assets/plugin/wave9/live-durable-reconciliation-scheduler.js +0 -115
  384. package/assets/plugin/wave9/live-execution-ledger.d.ts +0 -107
  385. package/assets/plugin/wave9/live-execution-ledger.js +0 -498
  386. package/assets/plugin/wave9/live-position-confirmation.d.ts +0 -18
  387. package/assets/plugin/wave9/live-position-confirmation.js +0 -111
  388. package/assets/plugin/wave9/live-residual-protection.d.ts +0 -18
  389. package/assets/plugin/wave9/live-residual-protection.js +0 -250
  390. package/assets/plugin/wave9/live-startup-reconciliation.d.ts +0 -38
  391. package/assets/plugin/wave9/live-startup-reconciliation.js +0 -454
  392. package/assets/plugin/wave9/live-symbol-ownership.d.ts +0 -20
  393. package/assets/plugin/wave9/live-symbol-ownership.js +0 -132
  394. package/assets/plugin/wave9/paper-admission-guard.d.ts +0 -199
  395. package/assets/plugin/wave9/paper-admission-guard.js +0 -650
  396. package/assets/plugin/wave9/usdm-evidence-provider.d.ts +0 -42
  397. package/assets/plugin/wave9/usdm-evidence-provider.js +0 -133
@@ -1,101 +0,0 @@
1
- // Agent-config poller — boots the ToolGate from central config and keeps it
2
- // fresh (docs/TOOL_DISTRIBUTION_ARCHITECTURE.md §5b).
3
- //
4
- // Boot: fetch → valid + version-acceptable → apply + write cache
5
- // fetch fails → last-known-good cache file → apply
6
- // nothing → hardcoded safe default (nothing disabled)
7
- // Runtime: re-poll every RC_AGENT_CONFIG_POLL_MS (default 60s). Every failed
8
- // poll is a keep-last-known-good no-op. Version-lower responses are
9
- // rejected (rollback guard). The interval is unref()'d so it never
10
- // holds the process open at shutdown.
11
- //
12
- // No token → the poller does not start at all: the gate stays empty (all
13
- // tools on), byte-identical to pre-feature behavior. A module-level singleton
14
- // guard mirrors `pluginInitialised` in index.ts — OpenClaw calls register()
15
- // multiple times per process and we must never spawn a second timer.
16
- import { defaultAgentConfig, fetchAgentConfig, isAcceptableVersion, readCachedConfig, writeCachedConfig, } from './agent-config-client.js';
17
- import { logger } from '../logger.js';
18
- const TAG = 'agent-config';
19
- const DEFAULT_POLL_MS = 60_000;
20
- const MIN_POLL_MS = 5_000;
21
- export function resolvePollIntervalMs() {
22
- const raw = Number(process.env.RC_AGENT_CONFIG_POLL_MS);
23
- if (!Number.isFinite(raw) || raw <= 0)
24
- return DEFAULT_POLL_MS;
25
- return Math.max(MIN_POLL_MS, raw);
26
- }
27
- let pollerStarted = false;
28
- /** Test-only — allows the singleton guard to be reset between unit tests. */
29
- export function __resetPollerSingleton() {
30
- pollerStarted = false;
31
- }
32
- export function startAgentConfigPoller(opts) {
33
- const noop = {
34
- stop: () => { },
35
- getCurrent: () => defaultAgentConfig(),
36
- };
37
- if (pollerStarted) {
38
- logger.warn(TAG, 'poller already started — ignoring duplicate start');
39
- return noop;
40
- }
41
- if (!opts.token || !opts.token.trim()) {
42
- logger.info(TAG, 'no connection token — central tool config disabled, all tools enabled (safe default)');
43
- return noop;
44
- }
45
- pollerStarted = true;
46
- const intervalMs = opts.intervalMs ?? resolvePollIntervalMs();
47
- let current = defaultAgentConfig();
48
- let loggedFetchFailure = false;
49
- const applyIfAcceptable = (fetched, source) => {
50
- if (!isAcceptableVersion(fetched, current)) {
51
- logger.warn(TAG, `rejected ${source} config v${fetched.version} < applied v${current.version} (rollback guard)`);
52
- return false;
53
- }
54
- current = fetched;
55
- opts.gate.apply(fetched);
56
- opts.gateStore?.apply(fetched.gates);
57
- opts.entitlementGate?.apply(fetched.entitlement);
58
- return true;
59
- };
60
- const poll = async (isBoot) => {
61
- const fetched = await fetchAgentConfig({
62
- apiBaseUrl: opts.apiBaseUrl,
63
- token: opts.token,
64
- fetchImpl: opts.fetchImpl,
65
- });
66
- if (fetched) {
67
- loggedFetchFailure = false;
68
- if (applyIfAcceptable(fetched, 'network')) {
69
- writeCachedConfig(fetched, opts.cachePath);
70
- }
71
- return;
72
- }
73
- if (isBoot) {
74
- // Network unavailable at boot — fall back to the last-known-good cache.
75
- const cached = readCachedConfig(opts.cachePath);
76
- if (cached) {
77
- logger.info(TAG, `boot fetch failed — applying last-known-good cache v${cached.version}`);
78
- applyIfAcceptable(cached, 'cache');
79
- }
80
- else {
81
- logger.info(TAG, 'boot fetch failed, no cache — safe defaults (all tools enabled)');
82
- }
83
- return;
84
- }
85
- // Runtime failure: keep last-known-good silently (log once per outage).
86
- if (!loggedFetchFailure) {
87
- loggedFetchFailure = true;
88
- logger.warn(TAG, `config poll failed — keeping last-known-good v${current.version}`);
89
- }
90
- };
91
- void poll(true);
92
- const timer = setInterval(() => {
93
- void poll(false);
94
- }, intervalMs);
95
- timer.unref();
96
- logger.info(TAG, `poller started (interval ${Math.round(intervalMs / 1000)}s)`);
97
- return {
98
- stop: () => clearInterval(timer),
99
- getCurrent: () => current,
100
- };
101
- }
@@ -1,22 +0,0 @@
1
- import { type PluginConfigFile } from './plugin-config-io.js';
2
- export type BracketMode = 'off' | 'observe' | 'enforce';
3
- /** Read bracket mode from a config object. Invalid values fall back to 'off'. */
4
- export declare function getBracketMode(config?: PluginConfigFile, remoteOverride?: BracketMode): BracketMode;
5
- /** Convenience: load from disk and return the effective mode. */
6
- export declare function loadBracketMode(): BracketMode;
7
- /** Is the feature enabled at all (observe or enforce)? */
8
- export declare function bracketsEnabled(mode: BracketMode): boolean;
9
- /** Should the stop-watcher still run alongside brackets? Only 'enforce' turns it off for live. */
10
- export declare function stopWatcherActiveInLive(mode: BracketMode): boolean;
11
- /** Per-side requirement flags. Default both true — operator can untick
12
- * individually from the Trading Parameters panel to accept the documented
13
- * risk. Read alongside the bracket mode so a single config read covers
14
- * everything the pre-trade gate needs. */
15
- export interface BracketRequirements {
16
- requireStopLoss: boolean;
17
- requireTakeProfit: boolean;
18
- }
19
- export declare function getBracketRequirements(config?: PluginConfigFile): BracketRequirements;
20
- /** Convenience loader. Returns defaults on a missing/corrupt file — same
21
- * policy as loadBracketMode: don't gate trading on a corrupt flag read. */
22
- export declare function loadBracketRequirements(): BracketRequirements;
@@ -1,58 +0,0 @@
1
- // Feature flag reader for the bracket-orders system.
2
- //
3
- // Ordering of sources (first hit wins):
4
- // 1. Remote override from intelligence (set via admin dashboard OTA) — stored
5
- // in memory on the plugin after push; not persisted to plugin-config.json.
6
- // Wired in Phase 2; for Phase 1 this is always undefined.
7
- // 2. Local plugin-config.json `brackets.mode` field.
8
- // 3. Default: 'off' (legacy stop-watcher remains authoritative).
9
- import { readPluginConfig } from './plugin-config-io.js';
10
- const VALID = new Set(['off', 'observe', 'enforce']);
11
- /** Read bracket mode from a config object. Invalid values fall back to 'off'. */
12
- export function getBracketMode(config, remoteOverride) {
13
- if (remoteOverride && VALID.has(remoteOverride))
14
- return remoteOverride;
15
- const raw = config?.brackets?.mode;
16
- if (typeof raw === 'string' && VALID.has(raw)) {
17
- return raw;
18
- }
19
- return 'off';
20
- }
21
- /** Convenience: load from disk and return the effective mode. */
22
- export function loadBracketMode() {
23
- try {
24
- return getBracketMode(readPluginConfig());
25
- }
26
- catch {
27
- // If plugin-config.json is malformed, we deliberately default to 'off'
28
- // rather than throw — other subsystems will alert; trading should not
29
- // be gated on bracket-mode reading a corrupt file.
30
- return 'off';
31
- }
32
- }
33
- /** Is the feature enabled at all (observe or enforce)? */
34
- export function bracketsEnabled(mode) {
35
- return mode !== 'off';
36
- }
37
- /** Should the stop-watcher still run alongside brackets? Only 'enforce' turns it off for live. */
38
- export function stopWatcherActiveInLive(mode) {
39
- return mode !== 'enforce';
40
- }
41
- export function getBracketRequirements(config) {
42
- const b = config?.brackets;
43
- return {
44
- // Explicit `false` turns off; anything else (undefined, true, junk) stays on.
45
- requireStopLoss: b?.requireStopLoss !== false,
46
- requireTakeProfit: b?.requireTakeProfit !== false,
47
- };
48
- }
49
- /** Convenience loader. Returns defaults on a missing/corrupt file — same
50
- * policy as loadBracketMode: don't gate trading on a corrupt flag read. */
51
- export function loadBracketRequirements() {
52
- try {
53
- return getBracketRequirements(readPluginConfig());
54
- }
55
- catch {
56
- return { requireStopLoss: true, requireTakeProfit: true };
57
- }
58
- }
@@ -1,51 +0,0 @@
1
- import type { AgentEntitlement } from './agent-config-client.js';
2
- /** The ONLY tools an expired entitlement may pause. Deliberately a denylist
3
- * (not "everything except safety"): a tool added tomorrow is un-gated by
4
- * default, which is the conservative failure mode in a trading product.
5
- * Intel/data tools are NOT here — the intelligence service and webapp 403
6
- * those server-side with the same actionable message. */
7
- export declare const ENTITLEMENT_GATED_TOOLS: ReadonlySet<string>;
8
- export type EntitlementGateMode = 'enforce' | 'shadow' | 'off';
9
- export declare function resolveEntitlementGateMode(): EntitlementGateMode;
10
- /** Structured, agent-visible result for a blocked call. Worded so the agent
11
- * stops cleanly (no retry loop), keeps managing the existing book, and tells
12
- * the operator exactly how to restore service. */
13
- export declare function entitlementBlockedResult(name: string): {
14
- ok: false;
15
- error: 'entitlement_expired';
16
- tool: string;
17
- message: string;
18
- };
19
- /** Minimal structural view of a registered plugin tool — same shape as
20
- * tool-gate.ts GateablePluginTool (kept local to avoid a cross-module type
21
- * dependency for one interface). */
22
- export interface EntitlementGateableTool {
23
- name: string;
24
- execute: (...args: any[]) => any;
25
- }
26
- export declare class EntitlementGate {
27
- private readonly mode;
28
- private entitlement;
29
- /** Avoids log spam: one line per state transition, not per blocked call. */
30
- private lastLoggedKey;
31
- constructor(mode?: EntitlementGateMode);
32
- getMode(): EntitlementGateMode;
33
- getEntitlement(): AgentEntitlement | undefined;
34
- /** Apply the entitlement slice of a validated config (poller path).
35
- * `undefined` (server omitted it / validation dropped it) CLEARS the held
36
- * verdict — the gate then fails open rather than enforcing a stale one
37
- * the server no longer asserts. */
38
- apply(entitlement: AgentEntitlement | undefined): void;
39
- /** Should this call be blocked? Non-gated names short-circuit FIRST (the
40
- * safety set can never be touched, in any mode, with any payload); then
41
- * only an explicit server verdict of paidAccess=false blocks. */
42
- isBlocked(name: string): boolean;
43
- /** Wrap a tool's execute with the gate check — same hot-apply pattern as
44
- * ToolGate.wrapTool (state is consulted per call, not at registration). */
45
- wrapTool<T extends EntitlementGateableTool>(tool: T, jsonResult: (data: unknown) => unknown): T;
46
- /** Test-only. */
47
- __reset(): void;
48
- }
49
- /** Module singleton — one gate per plugin process, shared by the poller
50
- * (writer) and the tool-wrap in index.ts (consumer), mirroring gateStore. */
51
- export declare const entitlementGate: EntitlementGate;
@@ -1,137 +0,0 @@
1
- // EntitlementGate — the plugin-side enforcement point for account-level
2
- // (billing) restrictions: when the server-resolved entitlement says the user
3
- // has no paid access (trial expired past its end, subscription lapsed past
4
- // the 7-day grace), NEW ENTRIES pause. Everything else keeps working.
5
- //
6
- // ★ SAFETY ANALYSIS (why this can never add risk to an existing book):
7
- // the gate blocks ONLY the names in ENTITLEMENT_GATED_TOOLS — today exactly
8
- // `create_order`, the one tool that ADDS risk and the one thing our servers
9
- // cannot 403 (it goes plugin → Binance directly). Every risk-REDUCING and
10
- // safety path (close_position, modify_stop, attach_brackets,
11
- // audit_bracket_protection, record_position_reviews, the operator-control
12
- // tools, kill/flatten/pause via the skill) is untouched by construction: it
13
- // is not in the gated set, and a pin test asserts the set can never grow into
14
- // the safety floor. This mirrors what an auto-pause on loss limits already
15
- // does (no new entries, existing positions fully manageable) — an operation
16
- // the product already considers safe.
17
- //
18
- // ★ THREAT MODEL HONESTY: the plugin runs on the trader's own hardware, so
19
- // this gate is the COURTESY layer — it makes the agent stop cleanly with an
20
- // actionable message instead of burning failed calls. The HARD enforcement is
21
- // server-side: webapp Pro routes and the intelligence API both 403 on
22
- // paidAccess=false, which removes the data the agent trades on.
23
- //
24
- // Fail direction: no entitlement data (older webapp, outage, garbage payload,
25
- // no token) → ALLOW. Billing enforcement must never brick a paying customer
26
- // because our config channel hiccuped; last-known-good semantics come from
27
- // the agent-config cache like every other centrally-delivered value.
28
- //
29
- // Kill-switch: RC_ENTITLEMENT_GATE=off (never blocks) | shadow (log-only)
30
- // | default enforce — same convention as RC_TOOL_GATE / RC_CENTRAL_GATES.
31
- import { logger } from '../logger.js';
32
- const TAG = 'entitlement-gate';
33
- /** The ONLY tools an expired entitlement may pause. Deliberately a denylist
34
- * (not "everything except safety"): a tool added tomorrow is un-gated by
35
- * default, which is the conservative failure mode in a trading product.
36
- * Intel/data tools are NOT here — the intelligence service and webapp 403
37
- * those server-side with the same actionable message. */
38
- export const ENTITLEMENT_GATED_TOOLS = new Set(['create_order']);
39
- export function resolveEntitlementGateMode() {
40
- const raw = (process.env.RC_ENTITLEMENT_GATE ?? '').toLowerCase();
41
- if (raw === 'off')
42
- return 'off';
43
- if (raw === 'shadow')
44
- return 'shadow';
45
- return 'enforce';
46
- }
47
- /** Structured, agent-visible result for a blocked call. Worded so the agent
48
- * stops cleanly (no retry loop), keeps managing the existing book, and tells
49
- * the operator exactly how to restore service. */
50
- export function entitlementBlockedResult(name) {
51
- return {
52
- ok: false,
53
- error: 'entitlement_expired',
54
- tool: name,
55
- message: `New entries are paused: the ReefClaw subscription for this connection has expired ` +
56
- `(trial ended or payment lapsed). Do not retry this call. Existing positions remain fully ` +
57
- `manageable — close_position, modify_stop, attach_brackets, and all emergency/operator ` +
58
- `controls work normally, and protective brackets stay enforced by the exchange. ` +
59
- `Tell your operator to renew at https://reefclaw.com (Settings → Billing) to resume trading.`,
60
- };
61
- }
62
- export class EntitlementGate {
63
- mode;
64
- entitlement;
65
- /** Avoids log spam: one line per state transition, not per blocked call. */
66
- lastLoggedKey = '';
67
- constructor(mode = resolveEntitlementGateMode()) {
68
- this.mode = mode;
69
- if (mode !== 'enforce')
70
- logger.info(TAG, `mode=${mode}`);
71
- }
72
- getMode() {
73
- return this.mode;
74
- }
75
- getEntitlement() {
76
- return this.entitlement;
77
- }
78
- /** Apply the entitlement slice of a validated config (poller path).
79
- * `undefined` (server omitted it / validation dropped it) CLEARS the held
80
- * verdict — the gate then fails open rather than enforcing a stale one
81
- * the server no longer asserts. */
82
- apply(entitlement) {
83
- const key = entitlement ? `${entitlement.state}:${entitlement.paidAccess}` : '(none)';
84
- if (key !== this.lastLoggedKey) {
85
- this.lastLoggedKey = key;
86
- logger.info(TAG, entitlement
87
- ? `entitlement: state=${entitlement.state} paidAccess=${entitlement.paidAccess}` +
88
- (entitlement.graceUntil ? ` graceUntil=${entitlement.graceUntil}` : '')
89
- : 'entitlement: no server verdict — gate inactive (fail-open)');
90
- }
91
- this.entitlement = entitlement;
92
- }
93
- /** Should this call be blocked? Non-gated names short-circuit FIRST (the
94
- * safety set can never be touched, in any mode, with any payload); then
95
- * only an explicit server verdict of paidAccess=false blocks. */
96
- isBlocked(name) {
97
- if (this.mode === 'off')
98
- return false;
99
- if (!ENTITLEMENT_GATED_TOOLS.has(name))
100
- return false;
101
- if (!this.entitlement)
102
- return false; // unknown → allow
103
- if (this.entitlement.paidAccess !== false)
104
- return false;
105
- if (this.mode === 'shadow') {
106
- logger.info(TAG, `SHADOW: would block ${name} (state=${this.entitlement.state})`);
107
- return false;
108
- }
109
- return true;
110
- }
111
- /** Wrap a tool's execute with the gate check — same hot-apply pattern as
112
- * ToolGate.wrapTool (state is consulted per call, not at registration). */
113
- wrapTool(tool, jsonResult) {
114
- if (!ENTITLEMENT_GATED_TOOLS.has(tool.name))
115
- return tool;
116
- const originalExecute = tool.execute.bind(tool);
117
- return {
118
- ...tool,
119
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
120
- execute: (...args) => {
121
- if (this.isBlocked(tool.name)) {
122
- logger.info(TAG, `blocked ${tool.name} (entitlement state=${this.entitlement?.state ?? 'unknown'})`);
123
- return Promise.resolve(jsonResult(entitlementBlockedResult(tool.name)));
124
- }
125
- return originalExecute(...args);
126
- },
127
- };
128
- }
129
- /** Test-only. */
130
- __reset() {
131
- this.entitlement = undefined;
132
- this.lastLoggedKey = '';
133
- }
134
- }
135
- /** Module singleton — one gate per plugin process, shared by the poller
136
- * (writer) and the tool-wrap in index.ts (consumer), mirroring gateStore. */
137
- export const entitlementGate = new EntitlementGate();
@@ -1,18 +0,0 @@
1
- import type { AgentGates } from './agent-config-client.js';
2
- declare class GateStore {
3
- private gates;
4
- /** Apply a validated gates object (poller path). Logs only on change. */
5
- apply(gates: AgentGates): void;
6
- /** The central exitGate mode, or null when central has no value (or the
7
- * kill-switch is on) — null tells the reader to fall back to the file. */
8
- getExitGate(): AgentGates['exitGate'] | null;
9
- /** The central positionReview.mode, or null when central has no value (or the
10
- * kill-switch is on) — null tells the reader to fall back to the file. */
11
- getPositionReviewMode(): AgentGates['positionReviewMode'] | null;
12
- /** Test-only. */
13
- __reset(): void;
14
- }
15
- /** Module singleton — one store per plugin process, shared by the poller
16
- * (writer) and the config readers (consumers). */
17
- export declare const gateStore: GateStore;
18
- export {};
@@ -1,61 +0,0 @@
1
- // GateStore — the plugin-side holder for centrally-delivered operational-gate
2
- // values (TOOL_DISTRIBUTION_ARCHITECTURE.md §11 step 3; slice 2 = exitGate,
3
- // slice 3 = positionReviewMode).
4
- //
5
- // The agent-config poller applies each validated config's `gates` here; the
6
- // per-feature config readers (position-review-config.ts loadExitGateMode +
7
- // loadPositionReviewMode) consult the store FIRST and fall back to the local
8
- // plugin-config.json when no central value is present:
9
- //
10
- // central (this store) → ~/.reefclaw/plugin-config.json → hardcoded default
11
- //
12
- // Values in the store have already passed the plugin-side enum validation in
13
- // agent-config-client.ts (validateGates) — central can never deliver a value
14
- // outside a gate's enum (§5b). A config-server outage never lands here either:
15
- // the poller keeps last-known-good, and with no applied config the store is
16
- // empty → the local file rules, byte-identical to pre-central behavior.
17
- //
18
- // Kill-switch: RC_CENTRAL_GATES=off makes the store report no central values
19
- // (local file rules again) without a redeploy — same convention as
20
- // RC_TOOL_GATE for the tool allowlist.
21
- import { logger } from '../logger.js';
22
- const TAG = 'gate-store';
23
- function centralGatesEnabled() {
24
- return (process.env.RC_CENTRAL_GATES ?? '').toLowerCase() !== 'off';
25
- }
26
- const UNSET = '(unset — local config rules)';
27
- class GateStore {
28
- gates = {};
29
- /** Apply a validated gates object (poller path). Logs only on change. */
30
- apply(gates) {
31
- const next = gates ?? {};
32
- const changed = next.exitGate !== this.gates.exitGate ||
33
- next.positionReviewMode !== this.gates.positionReviewMode;
34
- this.gates = { ...next };
35
- if (changed) {
36
- logger.info(TAG, `applied central gates: exitGate=${next.exitGate ?? UNSET} ` +
37
- `positionReviewMode=${next.positionReviewMode ?? UNSET}`);
38
- }
39
- }
40
- /** The central exitGate mode, or null when central has no value (or the
41
- * kill-switch is on) — null tells the reader to fall back to the file. */
42
- getExitGate() {
43
- if (!centralGatesEnabled())
44
- return null;
45
- return this.gates.exitGate ?? null;
46
- }
47
- /** The central positionReview.mode, or null when central has no value (or the
48
- * kill-switch is on) — null tells the reader to fall back to the file. */
49
- getPositionReviewMode() {
50
- if (!centralGatesEnabled())
51
- return null;
52
- return this.gates.positionReviewMode ?? null;
53
- }
54
- /** Test-only. */
55
- __reset() {
56
- this.gates = {};
57
- }
58
- }
59
- /** Module singleton — one store per plugin process, shared by the poller
60
- * (writer) and the config readers (consumers). */
61
- export const gateStore = new GateStore();