@senpi/trading-recipe 1.0.21

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 (553) hide show
  1. package/README.md +117 -0
  2. package/dist/actions/close-position/close-position.action.d.ts +16 -0
  3. package/dist/actions/close-position/close-position.action.d.ts.map +1 -0
  4. package/dist/actions/close-position/close-position.action.js +215 -0
  5. package/dist/actions/close-position/close-position.action.js.map +1 -0
  6. package/dist/actions/decision-engine.d.ts +32 -0
  7. package/dist/actions/decision-engine.d.ts.map +1 -0
  8. package/dist/actions/decision-engine.js +103 -0
  9. package/dist/actions/decision-engine.js.map +1 -0
  10. package/dist/actions/llm-decision/anthropic-llm-decision.d.ts +12 -0
  11. package/dist/actions/llm-decision/anthropic-llm-decision.d.ts.map +1 -0
  12. package/dist/actions/llm-decision/anthropic-llm-decision.js +74 -0
  13. package/dist/actions/llm-decision/anthropic-llm-decision.js.map +1 -0
  14. package/dist/actions/llm-decision/factory.d.ts +17 -0
  15. package/dist/actions/llm-decision/factory.d.ts.map +1 -0
  16. package/dist/actions/llm-decision/factory.js +29 -0
  17. package/dist/actions/llm-decision/factory.js.map +1 -0
  18. package/dist/actions/llm-decision/index.d.ts +8 -0
  19. package/dist/actions/llm-decision/index.d.ts.map +1 -0
  20. package/dist/actions/llm-decision/index.js +5 -0
  21. package/dist/actions/llm-decision/index.js.map +1 -0
  22. package/dist/actions/llm-decision/openclaw-llm-decision.d.ts +14 -0
  23. package/dist/actions/llm-decision/openclaw-llm-decision.d.ts.map +1 -0
  24. package/dist/actions/llm-decision/openclaw-llm-decision.js +58 -0
  25. package/dist/actions/llm-decision/openclaw-llm-decision.js.map +1 -0
  26. package/dist/actions/llm-decision/shared.d.ts +41 -0
  27. package/dist/actions/llm-decision/shared.d.ts.map +1 -0
  28. package/dist/actions/llm-decision/shared.js +117 -0
  29. package/dist/actions/llm-decision/shared.js.map +1 -0
  30. package/dist/actions/open-position/open-position.action.d.ts +16 -0
  31. package/dist/actions/open-position/open-position.action.d.ts.map +1 -0
  32. package/dist/actions/open-position/open-position.action.js +275 -0
  33. package/dist/actions/open-position/open-position.action.js.map +1 -0
  34. package/dist/actions/types.d.ts +123 -0
  35. package/dist/actions/types.d.ts.map +1 -0
  36. package/dist/actions/types.js +3 -0
  37. package/dist/actions/types.js.map +1 -0
  38. package/dist/cli/guide-commands.d.ts +26 -0
  39. package/dist/cli/guide-commands.d.ts.map +1 -0
  40. package/dist/cli/guide-commands.js +345 -0
  41. package/dist/cli/guide-commands.js.map +1 -0
  42. package/dist/cli/senpi-commands.d.ts +20 -0
  43. package/dist/cli/senpi-commands.d.ts.map +1 -0
  44. package/dist/cli/senpi-commands.js +115 -0
  45. package/dist/cli/senpi-commands.js.map +1 -0
  46. package/dist/constants/dsl/index.d.ts +45 -0
  47. package/dist/constants/dsl/index.d.ts.map +1 -0
  48. package/dist/constants/dsl/index.js +45 -0
  49. package/dist/constants/dsl/index.js.map +1 -0
  50. package/dist/context/context-builder.d.ts +14 -0
  51. package/dist/context/context-builder.d.ts.map +1 -0
  52. package/dist/context/context-builder.js +36 -0
  53. package/dist/context/context-builder.js.map +1 -0
  54. package/dist/context/index.d.ts +5 -0
  55. package/dist/context/index.d.ts.map +1 -0
  56. package/dist/context/index.js +5 -0
  57. package/dist/context/index.js.map +1 -0
  58. package/dist/context/interpolate.d.ts +6 -0
  59. package/dist/context/interpolate.d.ts.map +1 -0
  60. package/dist/context/interpolate.js +15 -0
  61. package/dist/context/interpolate.js.map +1 -0
  62. package/dist/context/providers/asset-trend.provider.d.ts +42 -0
  63. package/dist/context/providers/asset-trend.provider.d.ts.map +1 -0
  64. package/dist/context/providers/asset-trend.provider.js +94 -0
  65. package/dist/context/providers/asset-trend.provider.js.map +1 -0
  66. package/dist/context/providers/index.d.ts +5 -0
  67. package/dist/context/providers/index.d.ts.map +1 -0
  68. package/dist/context/providers/index.js +5 -0
  69. package/dist/context/providers/index.js.map +1 -0
  70. package/dist/context/providers/regime.provider.d.ts +14 -0
  71. package/dist/context/providers/regime.provider.d.ts.map +1 -0
  72. package/dist/context/providers/regime.provider.js +29 -0
  73. package/dist/context/providers/regime.provider.js.map +1 -0
  74. package/dist/context/providers/signal.provider.d.ts +11 -0
  75. package/dist/context/providers/signal.provider.d.ts.map +1 -0
  76. package/dist/context/providers/signal.provider.js +27 -0
  77. package/dist/context/providers/signal.provider.js.map +1 -0
  78. package/dist/context/providers/strategy.provider.d.ts +14 -0
  79. package/dist/context/providers/strategy.provider.d.ts.map +1 -0
  80. package/dist/context/providers/strategy.provider.js +68 -0
  81. package/dist/context/providers/strategy.provider.js.map +1 -0
  82. package/dist/context/types.d.ts +30 -0
  83. package/dist/context/types.d.ts.map +1 -0
  84. package/dist/context/types.js +2 -0
  85. package/dist/context/types.js.map +1 -0
  86. package/dist/dsl/config/index.d.ts +59 -0
  87. package/dist/dsl/config/index.d.ts.map +1 -0
  88. package/dist/dsl/config/index.js +171 -0
  89. package/dist/dsl/config/index.js.map +1 -0
  90. package/dist/dsl/constants/index.d.ts +3 -0
  91. package/dist/dsl/constants/index.d.ts.map +1 -0
  92. package/dist/dsl/constants/index.js +3 -0
  93. package/dist/dsl/constants/index.js.map +1 -0
  94. package/dist/dsl/engine/index.d.ts +7 -0
  95. package/dist/dsl/engine/index.d.ts.map +1 -0
  96. package/dist/dsl/engine/index.js +310 -0
  97. package/dist/dsl/engine/index.js.map +1 -0
  98. package/dist/dsl/events/bus-types.d.ts +7 -0
  99. package/dist/dsl/events/bus-types.d.ts.map +1 -0
  100. package/dist/dsl/events/bus-types.js +6 -0
  101. package/dist/dsl/events/bus-types.js.map +1 -0
  102. package/dist/dsl/events/guards.d.ts +17 -0
  103. package/dist/dsl/events/guards.d.ts.map +1 -0
  104. package/dist/dsl/events/guards.js +94 -0
  105. package/dist/dsl/events/guards.js.map +1 -0
  106. package/dist/dsl/events/handlers.d.ts +15 -0
  107. package/dist/dsl/events/handlers.d.ts.map +1 -0
  108. package/dist/dsl/events/handlers.js +252 -0
  109. package/dist/dsl/events/handlers.js.map +1 -0
  110. package/dist/dsl/events/index.d.ts +4 -0
  111. package/dist/dsl/events/index.d.ts.map +1 -0
  112. package/dist/dsl/events/index.js +4 -0
  113. package/dist/dsl/events/index.js.map +1 -0
  114. package/dist/dsl/index.d.ts +13 -0
  115. package/dist/dsl/index.d.ts.map +1 -0
  116. package/dist/dsl/index.js +35 -0
  117. package/dist/dsl/index.js.map +1 -0
  118. package/dist/dsl/monitor/index.d.ts +18 -0
  119. package/dist/dsl/monitor/index.d.ts.map +1 -0
  120. package/dist/dsl/monitor/index.js +310 -0
  121. package/dist/dsl/monitor/index.js.map +1 -0
  122. package/dist/dsl/plugin/index.d.ts +29 -0
  123. package/dist/dsl/plugin/index.d.ts.map +1 -0
  124. package/dist/dsl/plugin/index.js +85 -0
  125. package/dist/dsl/plugin/index.js.map +1 -0
  126. package/dist/dsl/types/index.d.ts +3 -0
  127. package/dist/dsl/types/index.d.ts.map +1 -0
  128. package/dist/dsl/types/index.js +3 -0
  129. package/dist/dsl/types/index.js.map +1 -0
  130. package/dist/health/index.d.ts +9 -0
  131. package/dist/health/index.d.ts.map +1 -0
  132. package/dist/health/index.js +9 -0
  133. package/dist/health/index.js.map +1 -0
  134. package/dist/index.d.ts +95 -0
  135. package/dist/index.d.ts.map +1 -0
  136. package/dist/index.js +235 -0
  137. package/dist/index.js.map +1 -0
  138. package/dist/leverage/max-leverage-cache.d.ts +10 -0
  139. package/dist/leverage/max-leverage-cache.d.ts.map +1 -0
  140. package/dist/leverage/max-leverage-cache.js +51 -0
  141. package/dist/leverage/max-leverage-cache.js.map +1 -0
  142. package/dist/leverage/resolve-leverage.d.ts +9 -0
  143. package/dist/leverage/resolve-leverage.d.ts.map +1 -0
  144. package/dist/leverage/resolve-leverage.js +15 -0
  145. package/dist/leverage/resolve-leverage.js.map +1 -0
  146. package/dist/risk/index.d.ts +9 -0
  147. package/dist/risk/index.d.ts.map +1 -0
  148. package/dist/risk/index.js +9 -0
  149. package/dist/risk/index.js.map +1 -0
  150. package/dist/runtime/action-registry.d.ts +12 -0
  151. package/dist/runtime/action-registry.d.ts.map +1 -0
  152. package/dist/runtime/action-registry.js +20 -0
  153. package/dist/runtime/action-registry.js.map +1 -0
  154. package/dist/runtime/build-action-scan-payload.d.ts +20 -0
  155. package/dist/runtime/build-action-scan-payload.d.ts.map +1 -0
  156. package/dist/runtime/build-action-scan-payload.js +40 -0
  157. package/dist/runtime/build-action-scan-payload.js.map +1 -0
  158. package/dist/runtime/bus.d.ts +6 -0
  159. package/dist/runtime/bus.d.ts.map +1 -0
  160. package/dist/runtime/bus.js +19 -0
  161. package/dist/runtime/bus.js.map +1 -0
  162. package/dist/runtime/create-action-context.d.ts +34 -0
  163. package/dist/runtime/create-action-context.d.ts.map +1 -0
  164. package/dist/runtime/create-action-context.js +22 -0
  165. package/dist/runtime/create-action-context.js.map +1 -0
  166. package/dist/runtime/create-actions.d.ts +30 -0
  167. package/dist/runtime/create-actions.d.ts.map +1 -0
  168. package/dist/runtime/create-actions.js +71 -0
  169. package/dist/runtime/create-actions.js.map +1 -0
  170. package/dist/runtime/create-runtime-context.d.ts +35 -0
  171. package/dist/runtime/create-runtime-context.d.ts.map +1 -0
  172. package/dist/runtime/create-runtime-context.js +33 -0
  173. package/dist/runtime/create-runtime-context.js.map +1 -0
  174. package/dist/runtime/create-scanner-module.d.ts +14 -0
  175. package/dist/runtime/create-scanner-module.d.ts.map +1 -0
  176. package/dist/runtime/create-scanner-module.js +26 -0
  177. package/dist/runtime/create-scanner-module.js.map +1 -0
  178. package/dist/runtime/create-scanner-providers-for-run.d.ts +20 -0
  179. package/dist/runtime/create-scanner-providers-for-run.d.ts.map +1 -0
  180. package/dist/runtime/create-scanner-providers-for-run.js +34 -0
  181. package/dist/runtime/create-scanner-providers-for-run.js.map +1 -0
  182. package/dist/runtime/default-state-dir.d.ts +10 -0
  183. package/dist/runtime/default-state-dir.d.ts.map +1 -0
  184. package/dist/runtime/default-state-dir.js +22 -0
  185. package/dist/runtime/default-state-dir.js.map +1 -0
  186. package/dist/runtime/env-resolve.d.ts +17 -0
  187. package/dist/runtime/env-resolve.d.ts.map +1 -0
  188. package/dist/runtime/env-resolve.js +45 -0
  189. package/dist/runtime/env-resolve.js.map +1 -0
  190. package/dist/runtime/hook-system.d.ts +7 -0
  191. package/dist/runtime/hook-system.d.ts.map +1 -0
  192. package/dist/runtime/hook-system.js +16 -0
  193. package/dist/runtime/hook-system.js.map +1 -0
  194. package/dist/runtime/index.d.ts +37 -0
  195. package/dist/runtime/index.d.ts.map +1 -0
  196. package/dist/runtime/index.js +26 -0
  197. package/dist/runtime/index.js.map +1 -0
  198. package/dist/runtime/load-trading-strategy.d.ts +23 -0
  199. package/dist/runtime/load-trading-strategy.d.ts.map +1 -0
  200. package/dist/runtime/load-trading-strategy.js +130 -0
  201. package/dist/runtime/load-trading-strategy.js.map +1 -0
  202. package/dist/runtime/map-exit-config.d.ts +12 -0
  203. package/dist/runtime/map-exit-config.d.ts.map +1 -0
  204. package/dist/runtime/map-exit-config.js +91 -0
  205. package/dist/runtime/map-exit-config.js.map +1 -0
  206. package/dist/runtime/map-strategies-registration.d.ts +12 -0
  207. package/dist/runtime/map-strategies-registration.d.ts.map +1 -0
  208. package/dist/runtime/map-strategies-registration.js +52 -0
  209. package/dist/runtime/map-strategies-registration.js.map +1 -0
  210. package/dist/runtime/map-strategies.d.ts +12 -0
  211. package/dist/runtime/map-strategies.d.ts.map +1 -0
  212. package/dist/runtime/map-strategies.js +66 -0
  213. package/dist/runtime/map-strategies.js.map +1 -0
  214. package/dist/runtime/notifications.d.ts +12 -0
  215. package/dist/runtime/notifications.d.ts.map +1 -0
  216. package/dist/runtime/notifications.js +83 -0
  217. package/dist/runtime/notifications.js.map +1 -0
  218. package/dist/runtime/parse-interval.d.ts +11 -0
  219. package/dist/runtime/parse-interval.d.ts.map +1 -0
  220. package/dist/runtime/parse-interval.js +35 -0
  221. package/dist/runtime/parse-interval.js.map +1 -0
  222. package/dist/runtime/reconcile-state.d.ts +25 -0
  223. package/dist/runtime/reconcile-state.d.ts.map +1 -0
  224. package/dist/runtime/reconcile-state.js +112 -0
  225. package/dist/runtime/reconcile-state.js.map +1 -0
  226. package/dist/runtime/risk-guard.d.ts +6 -0
  227. package/dist/runtime/risk-guard.d.ts.map +1 -0
  228. package/dist/runtime/risk-guard.js +14 -0
  229. package/dist/runtime/risk-guard.js.map +1 -0
  230. package/dist/runtime/run.d.ts +21 -0
  231. package/dist/runtime/run.d.ts.map +1 -0
  232. package/dist/runtime/run.js +35 -0
  233. package/dist/runtime/run.js.map +1 -0
  234. package/dist/runtime/runtime.d.ts +40 -0
  235. package/dist/runtime/runtime.d.ts.map +1 -0
  236. package/dist/runtime/runtime.js +251 -0
  237. package/dist/runtime/runtime.js.map +1 -0
  238. package/dist/runtime/scanner-registry.d.ts +22 -0
  239. package/dist/runtime/scanner-registry.d.ts.map +1 -0
  240. package/dist/runtime/scanner-registry.js +83 -0
  241. package/dist/runtime/scanner-registry.js.map +1 -0
  242. package/dist/runtime/strategy-registry.d.ts +49 -0
  243. package/dist/runtime/strategy-registry.d.ts.map +1 -0
  244. package/dist/runtime/strategy-registry.js +156 -0
  245. package/dist/runtime/strategy-registry.js.map +1 -0
  246. package/dist/runtime/trading-strategy-config.d.ts +6 -0
  247. package/dist/runtime/trading-strategy-config.d.ts.map +1 -0
  248. package/dist/runtime/trading-strategy-config.js +5 -0
  249. package/dist/runtime/trading-strategy-config.js.map +1 -0
  250. package/dist/runtime/trading-strategy-schema.d.ts +20093 -0
  251. package/dist/runtime/trading-strategy-schema.d.ts.map +1 -0
  252. package/dist/runtime/trading-strategy-schema.js +115 -0
  253. package/dist/runtime/trading-strategy-schema.js.map +1 -0
  254. package/dist/scanners/__tests__/fixtures/index.d.ts +3 -0
  255. package/dist/scanners/__tests__/fixtures/index.d.ts.map +1 -0
  256. package/dist/scanners/__tests__/fixtures/index.js +3 -0
  257. package/dist/scanners/__tests__/fixtures/index.js.map +1 -0
  258. package/dist/scanners/__tests__/fixtures/scan-results.d.ts +23 -0
  259. package/dist/scanners/__tests__/fixtures/scan-results.d.ts.map +1 -0
  260. package/dist/scanners/__tests__/fixtures/scan-results.js +128 -0
  261. package/dist/scanners/__tests__/fixtures/scan-results.js.map +1 -0
  262. package/dist/scanners/__tests__/fixtures/signals.d.ts +18 -0
  263. package/dist/scanners/__tests__/fixtures/signals.d.ts.map +1 -0
  264. package/dist/scanners/__tests__/fixtures/signals.js +84 -0
  265. package/dist/scanners/__tests__/fixtures/signals.js.map +1 -0
  266. package/dist/scanners/__tests__/test-helpers.d.ts +4 -0
  267. package/dist/scanners/__tests__/test-helpers.d.ts.map +1 -0
  268. package/dist/scanners/__tests__/test-helpers.js +23 -0
  269. package/dist/scanners/__tests__/test-helpers.js.map +1 -0
  270. package/dist/scanners/artifacts.d.ts +119 -0
  271. package/dist/scanners/artifacts.d.ts.map +1 -0
  272. package/dist/scanners/artifacts.js +72 -0
  273. package/dist/scanners/artifacts.js.map +1 -0
  274. package/dist/scanners/create-scanner.d.ts +13 -0
  275. package/dist/scanners/create-scanner.d.ts.map +1 -0
  276. package/dist/scanners/create-scanner.js +11 -0
  277. package/dist/scanners/create-scanner.js.map +1 -0
  278. package/dist/scanners/engine/config-validator.d.ts +7 -0
  279. package/dist/scanners/engine/config-validator.d.ts.map +1 -0
  280. package/dist/scanners/engine/config-validator.js +16 -0
  281. package/dist/scanners/engine/config-validator.js.map +1 -0
  282. package/dist/scanners/engine/data-providers.d.ts +47 -0
  283. package/dist/scanners/engine/data-providers.d.ts.map +1 -0
  284. package/dist/scanners/engine/data-providers.js +8 -0
  285. package/dist/scanners/engine/data-providers.js.map +1 -0
  286. package/dist/scanners/engine/engine.d.ts +76 -0
  287. package/dist/scanners/engine/engine.d.ts.map +1 -0
  288. package/dist/scanners/engine/engine.js +399 -0
  289. package/dist/scanners/engine/engine.js.map +1 -0
  290. package/dist/scanners/engine/index.d.ts +9 -0
  291. package/dist/scanners/engine/index.d.ts.map +1 -0
  292. package/dist/scanners/engine/index.js +7 -0
  293. package/dist/scanners/engine/index.js.map +1 -0
  294. package/dist/scanners/engine/input-resolver.d.ts +21 -0
  295. package/dist/scanners/engine/input-resolver.d.ts.map +1 -0
  296. package/dist/scanners/engine/input-resolver.js +149 -0
  297. package/dist/scanners/engine/input-resolver.js.map +1 -0
  298. package/dist/scanners/engine/lifecycle.d.ts +21 -0
  299. package/dist/scanners/engine/lifecycle.d.ts.map +1 -0
  300. package/dist/scanners/engine/lifecycle.js +2 -0
  301. package/dist/scanners/engine/lifecycle.js.map +1 -0
  302. package/dist/scanners/engine/result-builder.d.ts +30 -0
  303. package/dist/scanners/engine/result-builder.d.ts.map +1 -0
  304. package/dist/scanners/engine/result-builder.js +129 -0
  305. package/dist/scanners/engine/result-builder.js.map +1 -0
  306. package/dist/scanners/engine/strategy-registry.d.ts +45 -0
  307. package/dist/scanners/engine/strategy-registry.d.ts.map +1 -0
  308. package/dist/scanners/engine/strategy-registry.js +93 -0
  309. package/dist/scanners/engine/strategy-registry.js.map +1 -0
  310. package/dist/scanners/events.d.ts +41 -0
  311. package/dist/scanners/events.d.ts.map +1 -0
  312. package/dist/scanners/events.js +33 -0
  313. package/dist/scanners/events.js.map +1 -0
  314. package/dist/scanners/implementations/emerging-movers.d.ts +215 -0
  315. package/dist/scanners/implementations/emerging-movers.d.ts.map +1 -0
  316. package/dist/scanners/implementations/emerging-movers.js +709 -0
  317. package/dist/scanners/implementations/emerging-movers.js.map +1 -0
  318. package/dist/scanners/implementations/index.d.ts +8 -0
  319. package/dist/scanners/implementations/index.d.ts.map +1 -0
  320. package/dist/scanners/implementations/index.js +8 -0
  321. package/dist/scanners/implementations/index.js.map +1 -0
  322. package/dist/scanners/implementations/indicators.d.ts +40 -0
  323. package/dist/scanners/implementations/indicators.d.ts.map +1 -0
  324. package/dist/scanners/implementations/indicators.js +114 -0
  325. package/dist/scanners/implementations/indicators.js.map +1 -0
  326. package/dist/scanners/implementations/liquidation-watchdog.d.ts +74 -0
  327. package/dist/scanners/implementations/liquidation-watchdog.d.ts.map +1 -0
  328. package/dist/scanners/implementations/liquidation-watchdog.js +268 -0
  329. package/dist/scanners/implementations/liquidation-watchdog.js.map +1 -0
  330. package/dist/scanners/implementations/market-regime.d.ts +52 -0
  331. package/dist/scanners/implementations/market-regime.d.ts.map +1 -0
  332. package/dist/scanners/implementations/market-regime.js +201 -0
  333. package/dist/scanners/implementations/market-regime.js.map +1 -0
  334. package/dist/scanners/implementations/momentum.d.ts +21 -0
  335. package/dist/scanners/implementations/momentum.d.ts.map +1 -0
  336. package/dist/scanners/implementations/momentum.js +128 -0
  337. package/dist/scanners/implementations/momentum.js.map +1 -0
  338. package/dist/scanners/implementations/oi-tracker.d.ts +13 -0
  339. package/dist/scanners/implementations/oi-tracker.d.ts.map +1 -0
  340. package/dist/scanners/implementations/oi-tracker.js +67 -0
  341. package/dist/scanners/implementations/oi-tracker.js.map +1 -0
  342. package/dist/scanners/implementations/opportunity.d.ts +104 -0
  343. package/dist/scanners/implementations/opportunity.d.ts.map +1 -0
  344. package/dist/scanners/implementations/opportunity.js +441 -0
  345. package/dist/scanners/implementations/opportunity.js.map +1 -0
  346. package/dist/scanners/implementations/prescreener.d.ts +20 -0
  347. package/dist/scanners/implementations/prescreener.d.ts.map +1 -0
  348. package/dist/scanners/implementations/prescreener.js +97 -0
  349. package/dist/scanners/implementations/prescreener.js.map +1 -0
  350. package/dist/scanners/implementations/sm-flip.d.ts +43 -0
  351. package/dist/scanners/implementations/sm-flip.d.ts.map +1 -0
  352. package/dist/scanners/implementations/sm-flip.js +200 -0
  353. package/dist/scanners/implementations/sm-flip.js.map +1 -0
  354. package/dist/scanners/index.d.ts +25 -0
  355. package/dist/scanners/index.d.ts.map +1 -0
  356. package/dist/scanners/index.js +18 -0
  357. package/dist/scanners/index.js.map +1 -0
  358. package/dist/scanners/input-descriptors.d.ts +61 -0
  359. package/dist/scanners/input-descriptors.d.ts.map +1 -0
  360. package/dist/scanners/input-descriptors.js +43 -0
  361. package/dist/scanners/input-descriptors.js.map +1 -0
  362. package/dist/scanners/protocol/context.d.ts +75 -0
  363. package/dist/scanners/protocol/context.d.ts.map +1 -0
  364. package/dist/scanners/protocol/context.js +2 -0
  365. package/dist/scanners/protocol/context.js.map +1 -0
  366. package/dist/scanners/protocol/hooks.d.ts +18 -0
  367. package/dist/scanners/protocol/hooks.d.ts.map +1 -0
  368. package/dist/scanners/protocol/hooks.js +12 -0
  369. package/dist/scanners/protocol/hooks.js.map +1 -0
  370. package/dist/scanners/protocol/index.d.ts +5 -0
  371. package/dist/scanners/protocol/index.d.ts.map +1 -0
  372. package/dist/scanners/protocol/index.js +2 -0
  373. package/dist/scanners/protocol/index.js.map +1 -0
  374. package/dist/scanners/protocol/scanner.d.ts +47 -0
  375. package/dist/scanners/protocol/scanner.d.ts.map +1 -0
  376. package/dist/scanners/protocol/scanner.js +2 -0
  377. package/dist/scanners/protocol/scanner.js.map +1 -0
  378. package/dist/scanners/providers/adapter.d.ts +23 -0
  379. package/dist/scanners/providers/adapter.d.ts.map +1 -0
  380. package/dist/scanners/providers/adapter.js +227 -0
  381. package/dist/scanners/providers/adapter.js.map +1 -0
  382. package/dist/scanners/providers/cache.d.ts +20 -0
  383. package/dist/scanners/providers/cache.d.ts.map +1 -0
  384. package/dist/scanners/providers/cache.js +61 -0
  385. package/dist/scanners/providers/cache.js.map +1 -0
  386. package/dist/scanners/providers/client.d.ts +53 -0
  387. package/dist/scanners/providers/client.d.ts.map +1 -0
  388. package/dist/scanners/providers/client.js +174 -0
  389. package/dist/scanners/providers/client.js.map +1 -0
  390. package/dist/scanners/providers/factory.d.ts +43 -0
  391. package/dist/scanners/providers/factory.d.ts.map +1 -0
  392. package/dist/scanners/providers/factory.js +192 -0
  393. package/dist/scanners/providers/factory.js.map +1 -0
  394. package/dist/scanners/providers/types.d.ts +61 -0
  395. package/dist/scanners/providers/types.d.ts.map +1 -0
  396. package/dist/scanners/providers/types.js +6 -0
  397. package/dist/scanners/providers/types.js.map +1 -0
  398. package/dist/scanners/runtime-module.d.ts +54 -0
  399. package/dist/scanners/runtime-module.d.ts.map +1 -0
  400. package/dist/scanners/runtime-module.js +90 -0
  401. package/dist/scanners/runtime-module.js.map +1 -0
  402. package/dist/scanners/scanner-definition.d.ts +58 -0
  403. package/dist/scanners/scanner-definition.d.ts.map +1 -0
  404. package/dist/scanners/scanner-definition.js +19 -0
  405. package/dist/scanners/scanner-definition.js.map +1 -0
  406. package/dist/scanners/schema-utils.d.ts +6 -0
  407. package/dist/scanners/schema-utils.d.ts.map +1 -0
  408. package/dist/scanners/schema-utils.js +14 -0
  409. package/dist/scanners/schema-utils.js.map +1 -0
  410. package/dist/scanners/score-utils.d.ts +19 -0
  411. package/dist/scanners/score-utils.d.ts.map +1 -0
  412. package/dist/scanners/score-utils.js +47 -0
  413. package/dist/scanners/score-utils.js.map +1 -0
  414. package/dist/scanners/store/fs-utils.d.ts +12 -0
  415. package/dist/scanners/store/fs-utils.d.ts.map +1 -0
  416. package/dist/scanners/store/fs-utils.js +47 -0
  417. package/dist/scanners/store/fs-utils.js.map +1 -0
  418. package/dist/scanners/store/index.d.ts +5 -0
  419. package/dist/scanners/store/index.d.ts.map +1 -0
  420. package/dist/scanners/store/index.js +5 -0
  421. package/dist/scanners/store/index.js.map +1 -0
  422. package/dist/scanners/store/runtime-store.d.ts +50 -0
  423. package/dist/scanners/store/runtime-store.d.ts.map +1 -0
  424. package/dist/scanners/store/runtime-store.js +91 -0
  425. package/dist/scanners/store/runtime-store.js.map +1 -0
  426. package/dist/scanners/store/shared-artifact-store.d.ts +31 -0
  427. package/dist/scanners/store/shared-artifact-store.d.ts.map +1 -0
  428. package/dist/scanners/store/shared-artifact-store.js +89 -0
  429. package/dist/scanners/store/shared-artifact-store.js.map +1 -0
  430. package/dist/scanners/store/signal-store.d.ts +36 -0
  431. package/dist/scanners/store/signal-store.d.ts.map +1 -0
  432. package/dist/scanners/store/signal-store.js +135 -0
  433. package/dist/scanners/store/signal-store.js.map +1 -0
  434. package/dist/scanners/types.d.ts +115 -0
  435. package/dist/scanners/types.d.ts.map +1 -0
  436. package/dist/scanners/types.js +3 -0
  437. package/dist/scanners/types.js.map +1 -0
  438. package/dist/scripts/run-dsl-standalone-live.d.ts +27 -0
  439. package/dist/scripts/run-dsl-standalone-live.d.ts.map +1 -0
  440. package/dist/scripts/run-dsl-standalone-live.js +207 -0
  441. package/dist/scripts/run-dsl-standalone-live.js.map +1 -0
  442. package/dist/scripts/run-dsl-standalone-mock.d.ts +13 -0
  443. package/dist/scripts/run-dsl-standalone-mock.d.ts.map +1 -0
  444. package/dist/scripts/run-dsl-standalone-mock.js +255 -0
  445. package/dist/scripts/run-dsl-standalone-mock.js.map +1 -0
  446. package/dist/senpi/client.d.ts +77 -0
  447. package/dist/senpi/client.d.ts.map +1 -0
  448. package/dist/senpi/client.js +523 -0
  449. package/dist/senpi/client.js.map +1 -0
  450. package/dist/senpi/constants.d.ts +7 -0
  451. package/dist/senpi/constants.d.ts.map +1 -0
  452. package/dist/senpi/constants.js +7 -0
  453. package/dist/senpi/constants.js.map +1 -0
  454. package/dist/senpi/index.d.ts +3 -0
  455. package/dist/senpi/index.d.ts.map +1 -0
  456. package/dist/senpi/index.js +2 -0
  457. package/dist/senpi/index.js.map +1 -0
  458. package/dist/senpi/types.d.ts +132 -0
  459. package/dist/senpi/types.d.ts.map +1 -0
  460. package/dist/senpi/types.js +3 -0
  461. package/dist/senpi/types.js.map +1 -0
  462. package/dist/state/index.d.ts +3 -0
  463. package/dist/state/index.d.ts.map +1 -0
  464. package/dist/state/index.js +3 -0
  465. package/dist/state/index.js.map +1 -0
  466. package/dist/state/paths.d.ts +8 -0
  467. package/dist/state/paths.d.ts.map +1 -0
  468. package/dist/state/paths.js +19 -0
  469. package/dist/state/paths.js.map +1 -0
  470. package/dist/state/state-manager.d.ts +58 -0
  471. package/dist/state/state-manager.d.ts.map +1 -0
  472. package/dist/state/state-manager.js +221 -0
  473. package/dist/state/state-manager.js.map +1 -0
  474. package/dist/strategy/index.d.ts +2 -0
  475. package/dist/strategy/index.d.ts.map +1 -0
  476. package/dist/strategy/index.js +2 -0
  477. package/dist/strategy/index.js.map +1 -0
  478. package/dist/strategy/strategy-state.d.ts +48 -0
  479. package/dist/strategy/strategy-state.d.ts.map +1 -0
  480. package/dist/strategy/strategy-state.js +185 -0
  481. package/dist/strategy/strategy-state.js.map +1 -0
  482. package/dist/types/action.d.ts +15 -0
  483. package/dist/types/action.d.ts.map +1 -0
  484. package/dist/types/action.js +2 -0
  485. package/dist/types/action.js.map +1 -0
  486. package/dist/types/dsl/index.d.ts +215 -0
  487. package/dist/types/dsl/index.d.ts.map +1 -0
  488. package/dist/types/dsl/index.js +5 -0
  489. package/dist/types/dsl/index.js.map +1 -0
  490. package/dist/types/event-bus.d.ts +11 -0
  491. package/dist/types/event-bus.d.ts.map +1 -0
  492. package/dist/types/event-bus.js +6 -0
  493. package/dist/types/event-bus.js.map +1 -0
  494. package/dist/types/hooks.d.ts +27 -0
  495. package/dist/types/hooks.d.ts.map +1 -0
  496. package/dist/types/hooks.js +15 -0
  497. package/dist/types/hooks.js.map +1 -0
  498. package/dist/types/index.d.ts +6 -0
  499. package/dist/types/index.d.ts.map +1 -0
  500. package/dist/types/index.js +6 -0
  501. package/dist/types/index.js.map +1 -0
  502. package/dist/types/notification.d.ts +4 -0
  503. package/dist/types/notification.d.ts.map +1 -0
  504. package/dist/types/notification.js +3 -0
  505. package/dist/types/notification.js.map +1 -0
  506. package/dist/types/runtime.d.ts +18 -0
  507. package/dist/types/runtime.d.ts.map +1 -0
  508. package/dist/types/runtime.js +2 -0
  509. package/dist/types/runtime.js.map +1 -0
  510. package/dist/types/scanner.d.ts +59 -0
  511. package/dist/types/scanner.d.ts.map +1 -0
  512. package/dist/types/scanner.js +13 -0
  513. package/dist/types/scanner.js.map +1 -0
  514. package/dist/types/strategy.d.ts +100 -0
  515. package/dist/types/strategy.d.ts.map +1 -0
  516. package/dist/types/strategy.js +2 -0
  517. package/dist/types/strategy.js.map +1 -0
  518. package/dist/utils/logger/dsl.d.ts +8 -0
  519. package/dist/utils/logger/dsl.d.ts.map +1 -0
  520. package/dist/utils/logger/dsl.js +7 -0
  521. package/dist/utils/logger/dsl.js.map +1 -0
  522. package/dist/utils/logger.d.ts +13 -0
  523. package/dist/utils/logger.d.ts.map +1 -0
  524. package/dist/utils/logger.js +65 -0
  525. package/dist/utils/logger.js.map +1 -0
  526. package/dist/utils/response.d.ts +14 -0
  527. package/dist/utils/response.d.ts.map +1 -0
  528. package/dist/utils/response.js +44 -0
  529. package/dist/utils/response.js.map +1 -0
  530. package/dist/version.d.ts +2 -0
  531. package/dist/version.d.ts.map +1 -0
  532. package/dist/version.js +2 -0
  533. package/dist/version.js.map +1 -0
  534. package/examples/.env.example +15 -0
  535. package/examples/README.md +75 -0
  536. package/examples/scanners-consumer-quickstart.mjs +134 -0
  537. package/examples/scanners-emerging-movers-v4.mjs +285 -0
  538. package/examples/scanners-liquidation-watchdog.mjs +331 -0
  539. package/examples/scanners-live-mcp.mjs +208 -0
  540. package/examples/scanners-multi-strategy.mjs +165 -0
  541. package/examples/scanners-scheduled-events.mjs +95 -0
  542. package/examples/scanners-senpi-provider-client.mjs +182 -0
  543. package/examples/scanners-single-strategy.mjs +198 -0
  544. package/examples/strategies/README.md +45 -0
  545. package/examples/strategies/dsl-showcase.yaml +60 -0
  546. package/examples/strategies/fox-minimal-loosened.yaml +201 -0
  547. package/examples/strategies/fox-minimal.yaml +209 -0
  548. package/examples/strategies/minimal.yaml +49 -0
  549. package/examples/strategies/viper.yaml +64 -0
  550. package/examples/strategies/wolf.yaml +62 -0
  551. package/examples/yamls/sample-with-dsl-and-emerging-movers.yaml +116 -0
  552. package/openclaw.plugin.json +15 -0
  553. package/package.json +52 -0
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/context/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Config parsing and validation from playbook exit block.
3
+ */
4
+ import type { DslPluginConfig } from "../../types/dsl/index.js";
5
+ export interface ExitBlockConfig {
6
+ engine?: string;
7
+ interval_seconds?: number;
8
+ preset?: string;
9
+ dsl_presets?: Record<string, RawPreset>;
10
+ }
11
+ interface RawPreset {
12
+ tiers?: RawTier[];
13
+ max_loss_pct?: number;
14
+ phase1?: RawPhase1;
15
+ phase2_trigger_tier?: number;
16
+ phase2?: RawPhase2;
17
+ lock_mode?: string;
18
+ }
19
+ interface RawTier {
20
+ trigger_pct?: number;
21
+ triggerPct?: number;
22
+ lock_pct?: number;
23
+ lockPct?: number;
24
+ lock_hw_pct?: number;
25
+ lockHwPct?: number;
26
+ breaches?: number;
27
+ retrace?: number;
28
+ }
29
+ interface RawPhase1 {
30
+ enabled?: boolean;
31
+ consecutiveBreachesRequired?: number;
32
+ consecutive_breaches_required?: number;
33
+ max_loss_pct?: number;
34
+ hard_timeout?: {
35
+ enabled?: boolean;
36
+ interval_in_minutes?: number;
37
+ };
38
+ weak_peak_cut?: {
39
+ enabled?: boolean;
40
+ interval_in_minutes?: number;
41
+ min_value?: number;
42
+ };
43
+ dead_weight_cut?: {
44
+ enabled?: boolean;
45
+ interval_in_minutes?: number;
46
+ };
47
+ }
48
+ interface RawPhase2 {
49
+ enabled?: boolean;
50
+ retraceThreshold?: number;
51
+ retrace_threshold?: number;
52
+ consecutiveBreachesRequired?: number;
53
+ consecutive_breaches_required?: number;
54
+ tiers?: RawTier[];
55
+ }
56
+ export declare function parseDslPluginConfig(raw: ExitBlockConfig): DslPluginConfig;
57
+ export declare function getDefaultIntervalMs(): number;
58
+ export {};
59
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/dsl/config/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAEV,eAAe,EAMhB,MAAM,0BAA0B,CAAC;AAWlC,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;CACzC;AAED,UAAU,SAAS;IACjB,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,OAAO;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,SAAS;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,6BAA6B,CAAC,EAAE,MAAM,CAAC;IACvC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,mBAAmB,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACnE,aAAa,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACxF,eAAe,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,mBAAmB,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACvE;AAED,UAAU,SAAS;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,6BAA6B,CAAC,EAAE,MAAM,CAAC;IACvC,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;CACnB;AA0JD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,eAAe,GAAG,eAAe,CA2B1E;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C"}
@@ -0,0 +1,171 @@
1
+ /**
2
+ * Config parsing and validation from playbook exit block.
3
+ */
4
+ import { MIN_INTERVAL_SECONDS, DEFAULT_INTERVAL_MS } from "../../constants/dsl/index.js";
5
+ /** Parse lock_mode from config (accepts snake_case from YAML or camelCase). Default pctOfHighWater. */
6
+ function parseLockMode(raw) {
7
+ const v = raw?.toLowerCase();
8
+ if (v === "fixed_roe" || v === "fixedroe")
9
+ return "fixedRoe";
10
+ if (v === "pct_of_high_water" || v === "pctofhighwater")
11
+ return "pctOfHighWater";
12
+ return "pctOfHighWater";
13
+ }
14
+ /** Clamp interval to at least minIntervalMinutes (cron run interval). */
15
+ function clampInterval(intervalInMinutes, minIntervalMinutes) {
16
+ return Math.max(intervalInMinutes, minIntervalMinutes);
17
+ }
18
+ function parsePhase1HardTimeout(raw, minIntervalMinutes) {
19
+ if (!raw?.enabled)
20
+ return undefined;
21
+ const intervalInMinutes = clampInterval(Number(raw.interval_in_minutes), minIntervalMinutes);
22
+ if (!(intervalInMinutes > 0))
23
+ return undefined;
24
+ return { enabled: true, intervalInMinutes };
25
+ }
26
+ function parsePhase1WeakPeakCut(raw, minIntervalMinutes) {
27
+ if (!raw?.enabled)
28
+ return undefined;
29
+ const intervalInMinutes = clampInterval(Number(raw.interval_in_minutes), minIntervalMinutes);
30
+ if (!(intervalInMinutes > 0))
31
+ return undefined;
32
+ const minValue = typeof raw.min_value === "number" ? raw.min_value : 3.0;
33
+ return { enabled: true, intervalInMinutes, minValue };
34
+ }
35
+ function parsePhase1DeadWeightCut(raw, minIntervalMinutes) {
36
+ if (!raw?.enabled)
37
+ return undefined;
38
+ const intervalInMinutes = clampInterval(Number(raw.interval_in_minutes), minIntervalMinutes);
39
+ if (!(intervalInMinutes > 0))
40
+ return undefined;
41
+ return { enabled: true, intervalInMinutes };
42
+ }
43
+ function parseTier(raw, defaultBreaches = 1) {
44
+ const triggerPct = Number(raw.trigger_pct ?? raw.triggerPct);
45
+ const lockPctRaw = raw.lock_pct ?? raw.lockPct;
46
+ const lockHwPctRaw = raw.lock_hw_pct ?? raw.lockHwPct;
47
+ const lockPct = lockPctRaw != null ? Number(lockPctRaw) : undefined;
48
+ const lockHwPct = lockHwPctRaw != null ? Number(lockHwPctRaw) : undefined;
49
+ const breaches = Number(raw.breaches) || defaultBreaches;
50
+ if (!(triggerPct > 0))
51
+ throw new Error("tier trigger_pct must be > 0");
52
+ if (lockPct == null && lockHwPct == null) {
53
+ throw new Error("tier must have either lock_pct or lock_hw_pct");
54
+ }
55
+ if (lockPct != null && (!(lockPct > 0) || lockPct > 100)) {
56
+ throw new Error("tier lock_pct must be in (0, 100]");
57
+ }
58
+ if (lockHwPct != null && (lockHwPct < 0 || lockHwPct > 100)) {
59
+ throw new Error("tier lock_hw_pct must be in [0, 100]");
60
+ }
61
+ if (!(breaches >= 1))
62
+ throw new Error("tier breaches must be >= 1");
63
+ const retraceRaw = raw.retrace ?? raw.retraceFromHW;
64
+ const retraceFromHW = typeof retraceRaw === "number" && retraceRaw > 0 ? retraceRaw : undefined;
65
+ const tier = { triggerPct, breaches, ...(retraceFromHW != null && { retraceFromHW }) };
66
+ if (lockPct != null)
67
+ tier.lockPct = lockPct;
68
+ if (lockHwPct != null)
69
+ tier.lockHwPct = lockHwPct;
70
+ return tier;
71
+ }
72
+ function parsePreset(name, raw, minIntervalMinutes = 0) {
73
+ const hasPhase2Tiers = raw.phase2?.tiers && Array.isArray(raw.phase2.tiers) && raw.phase2.tiers.length > 0;
74
+ if (hasPhase2Tiers) {
75
+ return parsePresetPhaseFormat(name, raw, minIntervalMinutes);
76
+ }
77
+ const tiersRaw = raw.tiers;
78
+ if (!Array.isArray(tiersRaw) || tiersRaw.length === 0) {
79
+ throw new Error(`preset "${name}" must have tiers or phase2.tiers`);
80
+ }
81
+ const tiers = tiersRaw.map((t) => parseTier(t));
82
+ for (let i = 1; i < tiers.length; i++) {
83
+ if (tiers[i].triggerPct <= tiers[i - 1].triggerPct) {
84
+ throw new Error(`preset "${name}": tiers must be sorted ascending by trigger_pct`);
85
+ }
86
+ }
87
+ const maxLossPct = Number(raw.max_loss_pct);
88
+ if (!(maxLossPct > 0))
89
+ throw new Error(`preset "${name}": max_loss_pct must be > 0`);
90
+ const lockMode = parseLockMode(raw.lock_mode);
91
+ return { tiers, maxLossPct, lockMode };
92
+ }
93
+ function parsePresetPhaseFormat(name, raw, minIntervalMinutes = 0) {
94
+ const phase2 = raw.phase2;
95
+ if (!phase2?.tiers || !Array.isArray(phase2.tiers) || phase2.tiers.length === 0) {
96
+ throw new Error(`preset "${name}": phase2.tiers must be a non-empty array`);
97
+ }
98
+ const phase2BreachesDefault = typeof phase2.consecutiveBreachesRequired === "number"
99
+ ? phase2.consecutiveBreachesRequired
100
+ : typeof phase2.consecutive_breaches_required === "number"
101
+ ? phase2.consecutive_breaches_required
102
+ : 1;
103
+ const tiers = phase2.tiers.map((t) => parseTier(t, phase2BreachesDefault));
104
+ for (let i = 1; i < tiers.length; i++) {
105
+ if (tiers[i].triggerPct <= tiers[i - 1].triggerPct) {
106
+ throw new Error(`preset "${name}": phase2.tiers must be sorted ascending by trigger_pct`);
107
+ }
108
+ }
109
+ const phase1 = raw.phase1;
110
+ const maxLossPct = Number(phase1?.max_loss_pct ?? raw.max_loss_pct);
111
+ if (!(maxLossPct > 0)) {
112
+ throw new Error(`preset "${name}": phase1.max_loss_pct or max_loss_pct must be > 0`);
113
+ }
114
+ const phase2TriggerTier = typeof raw.phase2_trigger_tier === "number" ? raw.phase2_trigger_tier : 0;
115
+ const phase2Retrace = typeof phase2.retraceThreshold === "number"
116
+ ? phase2.retraceThreshold
117
+ : typeof phase2.retrace_threshold === "number"
118
+ ? phase2.retrace_threshold
119
+ : undefined;
120
+ const phase1Breaches = typeof phase1?.consecutiveBreachesRequired === "number"
121
+ ? phase1.consecutiveBreachesRequired
122
+ : typeof phase1?.consecutive_breaches_required === "number"
123
+ ? phase1.consecutive_breaches_required
124
+ : undefined;
125
+ const phase2Breaches = phase2BreachesDefault;
126
+ const lockMode = parseLockMode(raw.lock_mode);
127
+ const phase1HardTimeout = parsePhase1HardTimeout(phase1?.hard_timeout, minIntervalMinutes);
128
+ const phase1WeakPeakCut = parsePhase1WeakPeakCut(phase1?.weak_peak_cut, minIntervalMinutes);
129
+ const phase1DeadWeightCut = parsePhase1DeadWeightCut(phase1?.dead_weight_cut, minIntervalMinutes);
130
+ return {
131
+ tiers,
132
+ maxLossPct,
133
+ phase2TriggerTier,
134
+ phase2RetraceFromHW: phase2Retrace,
135
+ phase1BreachesRequired: phase1Breaches,
136
+ phase2BreachesRequired: phase2Breaches,
137
+ lockMode,
138
+ ...(phase1HardTimeout && { phase1HardTimeout }),
139
+ ...(phase1WeakPeakCut && { phase1WeakPeakCut }),
140
+ ...(phase1DeadWeightCut && { phase1DeadWeightCut }),
141
+ };
142
+ }
143
+ export function parseDslPluginConfig(raw) {
144
+ const intervalSeconds = raw.interval_seconds ?? 30;
145
+ if (typeof intervalSeconds !== "number" ||
146
+ !Number.isInteger(intervalSeconds) ||
147
+ intervalSeconds < MIN_INTERVAL_SECONDS) {
148
+ throw new Error(`interval_seconds must be a positive integer >= ${MIN_INTERVAL_SECONDS}, got: ${String(raw.interval_seconds)}`);
149
+ }
150
+ const intervalMs = intervalSeconds * 1000;
151
+ const minIntervalMinutes = intervalMs / 60_000;
152
+ const presetsRaw = raw.dsl_presets ?? {};
153
+ const presets = {};
154
+ for (const [name, p] of Object.entries(presetsRaw)) {
155
+ if (p && typeof p === "object")
156
+ presets[name] = parsePreset(name, p, minIntervalMinutes);
157
+ }
158
+ const presetKeys = Object.keys(presets);
159
+ if (presetKeys.length === 0) {
160
+ throw new Error("At least one dsl_presets entry is required");
161
+ }
162
+ const preset = typeof raw.preset === "string" ? raw.preset : presetKeys[0];
163
+ if (!presets[preset]) {
164
+ throw new Error(`Preset "${preset}" not found in dsl_presets`);
165
+ }
166
+ return { intervalMs, preset, presets };
167
+ }
168
+ export function getDefaultIntervalMs() {
169
+ return DEFAULT_INTERVAL_MS;
170
+ }
171
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/dsl/config/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /** Re-export from shared constants/dsl. */
2
+ export * from "../../constants/dsl/index.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/dsl/constants/index.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,cAAc,8BAA8B,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** Re-export from shared constants/dsl. */
2
+ export * from "../../constants/dsl/index.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/dsl/constants/index.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,cAAc,8BAA8B,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Pure DSL tick: state + price → next state and actions.
3
+ */
4
+ import type { DslState, DslTickResult } from "../../types/dsl/index.js";
5
+ export declare function roundTo(value: number, decimals?: number): number;
6
+ export declare function dslTick(state: DslState, price: number, now: string): DslTickResult;
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/dsl/engine/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAGxE,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAuB,GAAG,MAAM,CAGhF;AAwLD,wBAAgB,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,aAAa,CAoJlF"}
@@ -0,0 +1,310 @@
1
+ /**
2
+ * Pure DSL tick: state + price → next state and actions.
3
+ */
4
+ import { CLOSE_REASON, PRICE_DECIMALS } from "../../constants/dsl/index.js";
5
+ export function roundTo(value, decimals = PRICE_DECIMALS) {
6
+ const f = 10 ** decimals;
7
+ return Math.round(value * f) / f;
8
+ }
9
+ /** ROE % at given price. */
10
+ function computeCurrentROE(state, price) {
11
+ return state.direction === "LONG"
12
+ ? ((price - state.entryPrice) / state.entryPrice) * state.leverage * 100
13
+ : ((state.entryPrice - price) / state.entryPrice) * state.leverage * 100;
14
+ }
15
+ /** Convert floor ROE % to price (LONG: entry*(1+roe/100/lev), SHORT: entry*(1-roe/100/lev)). */
16
+ function roeToPriceFloor(state, floorRoe) {
17
+ const pct = floorRoe / 100 / state.leverage;
18
+ if (state.direction === "LONG")
19
+ return roundTo(state.entryPrice * (1 + pct));
20
+ return roundTo(state.entryPrice * (1 - pct));
21
+ }
22
+ /** Fixed ROE mode: lock lockPct % of (entry → HW) range. Uses actual HW at trigger time. */
23
+ function lockPctFloor(state, lockPct) {
24
+ const hw = state.highWaterPrice;
25
+ const pct = lockPct / 100;
26
+ if (state.direction === "LONG") {
27
+ return roundTo(state.entryPrice + (hw - state.entryPrice) * pct);
28
+ }
29
+ return roundTo(state.entryPrice - (state.entryPrice - hw) * pct);
30
+ }
31
+ /** Tier floor: HW mode (lockHwPct) or fixedRoe (lockPct). */
32
+ function computeTierFloor(state, tierIndex) {
33
+ const tier = state.tiers[tierIndex];
34
+ if (!tier)
35
+ return state.phase1.absoluteFloor;
36
+ if (state.lockMode === "pctOfHighWater" && tier.lockHwPct != null) {
37
+ const floorRoe = state.highWaterRoe * (tier.lockHwPct / 100);
38
+ return roeToPriceFloor(state, floorRoe);
39
+ }
40
+ if (tier.lockPct != null)
41
+ return lockPctFloor(state, tier.lockPct);
42
+ return state.phase1.absoluteFloor;
43
+ }
44
+ /** Phase 1 trailing floor: HW retrace (phase1.retraceThreshold as ROE % → price fraction). Matches Python effective_floor Phase 1. */
45
+ function phase1TrailingFloor(state) {
46
+ const hw = state.highWaterPrice;
47
+ const retraceRoePct = state.phase1.retraceThreshold;
48
+ const retracePrice = retraceRoePct / 100 / state.leverage;
49
+ if (state.direction === "LONG")
50
+ return roundTo(hw * (1 - retracePrice));
51
+ return roundTo(hw * (1 + retracePrice));
52
+ }
53
+ /** Phase 2 floor from high-water retrace. Retrace is ROE % → divide by leverage for price fraction (matches Python). */
54
+ function phase2Floor(state) {
55
+ const tier = state.currentTierIndex != null ? state.tiers[state.currentTierIndex] : undefined;
56
+ const retracePct = tier?.retraceFromHW ?? state.phase2.retraceFromHW;
57
+ const pct = retracePct / 100 / state.leverage;
58
+ if (state.direction === "LONG") {
59
+ return roundTo(state.highWaterPrice * (1 - pct));
60
+ }
61
+ return roundTo(state.highWaterPrice * (1 + pct));
62
+ }
63
+ function effectiveFloor(state) {
64
+ if (state.phase === 1) {
65
+ const absFloor = state.phase1.absoluteFloor;
66
+ const trailing = phase1TrailingFloor(state);
67
+ return state.direction === "LONG" ? Math.max(absFloor, trailing) : Math.min(absFloor, trailing);
68
+ }
69
+ if (state.phase === 2 && state.currentTierIndex == null) {
70
+ return phase2Floor(state);
71
+ }
72
+ const fromTier = state.tierFloorPrice;
73
+ const fromHw = phase2Floor(state);
74
+ if (state.direction === "LONG")
75
+ return Math.max(fromTier, fromHw);
76
+ return Math.min(fromTier, fromHw);
77
+ }
78
+ function isBreach(state, price) {
79
+ if (state.direction === "LONG")
80
+ return price <= state.floorPrice;
81
+ return price >= state.floorPrice;
82
+ }
83
+ /** Effective consecutive breaches required (tier override or phase default). */
84
+ function resolveBreachesRequired(state) {
85
+ const tier = state.currentTierIndex != null ? state.tiers[state.currentTierIndex] : undefined;
86
+ if (tier != null)
87
+ return tier.breaches;
88
+ return state.phase === 1
89
+ ? state.phase1.consecutiveBreachesRequired
90
+ : state.phase2.consecutiveBreachesRequired;
91
+ }
92
+ /** Tier floor as ROE %; 0 when no tier. */
93
+ function computeLockedProfitPct(state) {
94
+ if (state.currentTierIndex == null)
95
+ return 0;
96
+ const floorPrice = state.tierFloorPrice;
97
+ return state.direction === "LONG"
98
+ ? ((floorPrice - state.entryPrice) / state.entryPrice) * state.leverage * 100
99
+ : ((state.entryPrice - floorPrice) / state.entryPrice) * state.leverage * 100;
100
+ }
101
+ /** ROE % to next tier trigger; null at max tier. Clamped to 0 when already past trigger (same tick). */
102
+ function computeDistanceToNextTierPct(state, currentROE) {
103
+ const idx = state.currentTierIndex ?? -1;
104
+ const nextIdx = idx + 1;
105
+ if (nextIdx >= state.tiers.length)
106
+ return null;
107
+ const nextTier = state.tiers[nextIdx];
108
+ return Math.max(0, nextTier.triggerPct - currentROE);
109
+ }
110
+ function updateHighWater(state, price, now) {
111
+ let hw = state.highWaterPrice;
112
+ if (state.direction === "LONG" && price > hw)
113
+ hw = price;
114
+ if (state.direction === "SHORT" && price < hw)
115
+ hw = price;
116
+ const highWaterRoe = state.direction === "LONG"
117
+ ? ((hw - state.entryPrice) / state.entryPrice) * state.leverage * 100
118
+ : ((state.entryPrice - hw) / state.entryPrice) * state.leverage * 100;
119
+ return {
120
+ ...state,
121
+ highWaterPrice: hw,
122
+ hwTimestamp: hw !== state.highWaterPrice ? now : state.hwTimestamp,
123
+ lastCheck: now,
124
+ lastPrice: price,
125
+ peakROE: Math.max(state.peakROE, highWaterRoe),
126
+ highWaterRoe,
127
+ };
128
+ }
129
+ function tierIndexFromPrice(state, price) {
130
+ // triggerPct is ROE % (see dsl-reference.md); price move % * leverage = ROE %
131
+ const movePct = state.direction === "LONG"
132
+ ? ((price - state.entryPrice) / state.entryPrice) * state.leverage * 100
133
+ : ((state.entryPrice - price) / state.entryPrice) * state.leverage * 100;
134
+ let idx = -1;
135
+ for (let i = 0; i < state.tiers.length; i++) {
136
+ if (movePct >= state.tiers[i].triggerPct)
137
+ idx = i;
138
+ }
139
+ return idx;
140
+ }
141
+ /** Write all tick-updated derived fields onto state. Call after floor/tier/phase are final. */
142
+ function writeDerivedFields(next, price, now) {
143
+ const hw = next.highWaterPrice;
144
+ const floor = next.floorPrice;
145
+ const direction = next.direction;
146
+ const currentROE = computeCurrentROE(next, price);
147
+ const trailingFloor = next.phase === 1
148
+ ? (next.direction === "LONG"
149
+ ? Math.max(next.phase1.absoluteFloor, phase1TrailingFloor(next))
150
+ : Math.min(next.phase1.absoluteFloor, phase1TrailingFloor(next)))
151
+ : phase2Floor(next);
152
+ const distanceToFloor = direction === "LONG" ? price - floor : floor - price;
153
+ const distancePct = floor > 0 ? (distanceToFloor / floor) * 100 : 0;
154
+ const retracePct = hw > 0
155
+ ? direction === "LONG"
156
+ ? ((hw - price) / hw) * 100
157
+ : ((price - hw) / hw) * 100
158
+ : 0;
159
+ const elapsedMinutes = (new Date(now).getTime() - new Date(next.createdAt).getTime()) / 60_000;
160
+ const breachesRequired = resolveBreachesRequired(next);
161
+ const lockedProfitPct = next.currentTierIndex != null ? Math.max(0, computeLockedProfitPct(next)) : 0;
162
+ const distanceToNextTierPct = computeDistanceToNextTierPct(next, currentROE);
163
+ return {
164
+ ...next,
165
+ currentROE,
166
+ trailingFloor,
167
+ distanceToFloor,
168
+ distancePct,
169
+ retracePct,
170
+ elapsedMinutes,
171
+ breachesRequired,
172
+ lockedProfitPct,
173
+ distanceToNextTierPct,
174
+ };
175
+ }
176
+ export function dslTick(state, price, now) {
177
+ const prevFloorPrice = state.floorPrice;
178
+ let next = updateHighWater(state, price, now);
179
+ let floor = effectiveFloor(next);
180
+ let action = "none";
181
+ let closeReason;
182
+ const newTierIndexForBreach = tierIndexFromPrice(next, price);
183
+ const prevTierIndexForBreach = next.currentTierIndex ?? -1;
184
+ // Breach counting: increment on breach, close only when count >= required.
185
+ // Reset count only when not in breach and not advancing tier (Python: reset on phase transition, not on tier advance).
186
+ if (isBreach(next, price)) {
187
+ const breachesRequired = resolveBreachesRequired(next);
188
+ const newCount = (next.currentBreachCount ?? 0) + 1;
189
+ next = { ...next, currentBreachCount: newCount };
190
+ if (newCount >= breachesRequired) {
191
+ action = "close";
192
+ closeReason = CLOSE_REASON.DSL_BREACH;
193
+ next = { ...next, floorPrice: floor };
194
+ }
195
+ }
196
+ else {
197
+ const advancingTier = newTierIndexForBreach > prevTierIndexForBreach;
198
+ if (!advancingTier)
199
+ next = { ...next, currentBreachCount: 0 };
200
+ }
201
+ // Phase 1 time-based cuts (only when phase === 1 and not already closing)
202
+ if (action === "none" && next.phase === 1) {
203
+ const elapsedMinutes = (new Date(now).getTime() - new Date(next.createdAt).getTime()) / 60_000;
204
+ const p1 = next.phase1;
205
+ const peakROE = next.peakROE;
206
+ const currentROE = computeCurrentROE(next, price);
207
+ if (p1.hardTimeout?.enabled && elapsedMinutes >= p1.hardTimeout.intervalInMinutes) {
208
+ action = "close";
209
+ closeReason = CLOSE_REASON.PHASE1_TIMEOUT;
210
+ }
211
+ else if (p1.weakPeakCut?.enabled &&
212
+ elapsedMinutes >= p1.weakPeakCut.intervalInMinutes) {
213
+ const minVal = p1.weakPeakCut.minValue;
214
+ if (peakROE < minVal && currentROE < peakROE) {
215
+ action = "close";
216
+ closeReason = CLOSE_REASON.WEAK_PEAK_CUT;
217
+ }
218
+ }
219
+ else if (p1.deadWeightCut?.enabled &&
220
+ elapsedMinutes >= p1.deadWeightCut.intervalInMinutes) {
221
+ const neverPositive = next.direction === "LONG"
222
+ ? next.highWaterPrice <= next.entryPrice
223
+ : next.highWaterPrice >= next.entryPrice;
224
+ if (neverPositive) {
225
+ action = "close";
226
+ closeReason = CLOSE_REASON.DEAD_WEIGHT_CUT;
227
+ }
228
+ }
229
+ }
230
+ if (action === "close") {
231
+ next = writeDerivedFields(next, price, now);
232
+ next = { ...next, closeReason: closeReason ?? null };
233
+ const floorChanged = next.floorPrice !== prevFloorPrice;
234
+ return {
235
+ tierChanged: false,
236
+ phaseChanged: false,
237
+ action: "close",
238
+ newFloorPrice: undefined,
239
+ newTierIndex: undefined,
240
+ newPhase: undefined,
241
+ state: next,
242
+ floorChanged,
243
+ closeReason,
244
+ };
245
+ }
246
+ const newTierIndex = newTierIndexForBreach;
247
+ const prevTierIndex = next.currentTierIndex;
248
+ let tierChanged = false;
249
+ let phaseChanged = false;
250
+ let newFloorPrice = floor;
251
+ let newPhase = next.phase;
252
+ if (newTierIndex > (prevTierIndex ?? -1)) {
253
+ tierChanged = true;
254
+ const tierFloor = computeTierFloor(next, newTierIndex);
255
+ const effFloor = next.phase === 1 ? effectiveFloor(next) : phase2Floor(next);
256
+ const floorPrice = next.direction === "LONG"
257
+ ? Math.max(effFloor, tierFloor)
258
+ : Math.min(effFloor, tierFloor);
259
+ next = {
260
+ ...next,
261
+ currentTierIndex: newTierIndex,
262
+ tierFloorPrice: tierFloor,
263
+ floorPrice,
264
+ tierSince: now,
265
+ };
266
+ newFloorPrice = next.floorPrice;
267
+ if (next.phase === 1 && newTierIndex >= next.phase2TriggerTier) {
268
+ phaseChanged = true;
269
+ newPhase = 2;
270
+ next = { ...next, phase: 2, phaseSince: now, currentBreachCount: 0 };
271
+ next.floorPrice =
272
+ next.direction === "LONG"
273
+ ? Math.max(next.floorPrice, phase2Floor(next))
274
+ : Math.min(next.floorPrice, phase2Floor(next));
275
+ newFloorPrice = next.floorPrice;
276
+ }
277
+ }
278
+ // Per-tick floor recalculation in HW mode (Phase 2, tier active)
279
+ if (next.phase === 2 &&
280
+ next.currentTierIndex != null &&
281
+ next.currentTierIndex >= 0 &&
282
+ next.lockMode === "pctOfHighWater") {
283
+ const newTierFloor = computeTierFloor(next, next.currentTierIndex);
284
+ const ratcheted = next.tierFloorPrice === 0
285
+ ? newTierFloor
286
+ : next.direction === "LONG"
287
+ ? Math.max(newTierFloor, next.tierFloorPrice)
288
+ : Math.min(newTierFloor, next.tierFloorPrice);
289
+ next = { ...next, tierFloorPrice: ratcheted };
290
+ floor = effectiveFloor(next);
291
+ next = { ...next, floorPrice: floor };
292
+ newFloorPrice = floor;
293
+ }
294
+ else if (!tierChanged && !phaseChanged) {
295
+ next = { ...next, floorPrice: floor };
296
+ }
297
+ next = writeDerivedFields(next, price, now);
298
+ const floorChanged = next.floorPrice !== prevFloorPrice;
299
+ return {
300
+ tierChanged,
301
+ phaseChanged,
302
+ action: "none",
303
+ newFloorPrice: tierChanged || phaseChanged ? newFloorPrice : undefined,
304
+ newTierIndex: tierChanged ? newTierIndex : undefined,
305
+ newPhase: phaseChanged ? newPhase : undefined,
306
+ state: next,
307
+ floorChanged: floorChanged || tierChanged || phaseChanged,
308
+ };
309
+ }
310
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/dsl/engine/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Event bus constants and re-export (SenpiEventBus lives in src/types/event-bus.ts).
3
+ */
4
+ export { type SenpiEventBus } from "../../types/event-bus.js";
5
+ export declare const SENPI_COMPONENT_REGISTER = "senpi.component.register";
6
+ export declare const SENPI_PLAYBOOK_READY = "senpi.playbook.ready";
7
+ //# sourceMappingURL=bus-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bus-types.d.ts","sourceRoot":"","sources":["../../../src/dsl/events/bus-types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,eAAO,MAAM,wBAAwB,6BAA6B,CAAC;AACnE,eAAO,MAAM,oBAAoB,yBAAyB,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Event bus constants and re-export (SenpiEventBus lives in src/types/event-bus.ts).
3
+ */
4
+ export const SENPI_COMPONENT_REGISTER = "senpi.component.register";
5
+ export const SENPI_PLAYBOOK_READY = "senpi.playbook.ready";
6
+ //# sourceMappingURL=bus-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bus-types.js","sourceRoot":"","sources":["../../../src/dsl/events/bus-types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,MAAM,CAAC,MAAM,wBAAwB,GAAG,0BAA0B,CAAC;AACnE,MAAM,CAAC,MAAM,oBAAoB,GAAG,sBAAsB,CAAC"}