@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,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();