@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,30 @@
1
+ /**
2
+ * Instantiate actions from skills config and expose runActionsForSignal for serial processing.
3
+ */
4
+ import type { Action, HookEvent } from "../actions/types.js";
5
+ import type { SenpiEventBus } from "../types/event-bus.js";
6
+ import type { RuntimeContext } from "../types/runtime.js";
7
+ import type { TradingStrategyConfig } from "./trading-strategy-config.js";
8
+ import type { CreateActionContextDeps } from "./create-action-context.js";
9
+ export interface CreateActionsOptions extends Omit<CreateActionContextDeps, "strategies" | "playbook"> {
10
+ bus: SenpiEventBus;
11
+ /** When provided, this context is reused for all actions (built once per trading strategy by the runtime). */
12
+ runtimeContext?: RuntimeContext;
13
+ }
14
+ export interface ActionWithMeta {
15
+ action: Action;
16
+ name: string;
17
+ eventsConsumed: string[];
18
+ }
19
+ export interface CreateActionsResult {
20
+ actions: ActionWithMeta[];
21
+ runActionsForSignal: (event: HookEvent) => Promise<void>;
22
+ }
23
+ /**
24
+ * For each entry in config.actions, look up factory by action_type, build ActionConfig,
25
+ * use shared RuntimeContext (built once per trading strategy and reused), instantiate action. Returns actions
26
+ * and runActionsForSignal so the runtime can process signals serially (one at a time) to avoid slot races.
27
+ * When options.runtimeContext is provided (e.g. by Runtime), it is reused for all action factories.
28
+ */
29
+ export declare function createActions(config: TradingStrategyConfig, options: CreateActionsOptions): CreateActionsResult;
30
+ //# sourceMappingURL=create-actions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-actions.d.ts","sourceRoot":"","sources":["../../src/runtime/create-actions.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAgB,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAE1E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAK1E,MAAM,WAAW,oBAAqB,SAAQ,IAAI,CAAC,uBAAuB,EAAE,YAAY,GAAG,UAAU,CAAC;IACpG,GAAG,EAAE,aAAa,CAAC;IACnB,8GAA8G;IAC9G,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,mBAAmB,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1D;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,qBAAqB,EAAE,OAAO,EAAE,oBAAoB,GAAG,mBAAmB,CA0D/G"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Instantiate actions from skills config and expose runActionsForSignal for serial processing.
3
+ */
4
+ import { HOOK_EVENT } from "../types/hooks.js";
5
+ import { ActionRegistry } from "./action-registry.js";
6
+ import { createRuntimeContext } from "./create-runtime-context.js";
7
+ import { mapStrategiesToConfig } from "./map-strategies.js";
8
+ import { MaxLeverageCache } from "../leverage/max-leverage-cache.js";
9
+ /**
10
+ * For each entry in config.actions, look up factory by action_type, build ActionConfig,
11
+ * use shared RuntimeContext (built once per trading strategy and reused), instantiate action. Returns actions
12
+ * and runActionsForSignal so the runtime can process signals serially (one at a time) to avoid slot races.
13
+ * When options.runtimeContext is provided (e.g. by Runtime), it is reused for all action factories.
14
+ */
15
+ export function createActions(config, options) {
16
+ const context = options.runtimeContext ??
17
+ createRuntimeContext(mapStrategiesToConfig(config), {
18
+ senpi: options.senpi,
19
+ hookSystem: options.hookSystem,
20
+ llmDecision: options.llmDecision,
21
+ contextBuilder: options.contextBuilder,
22
+ riskGuard: options.riskGuard,
23
+ notifications: options.notifications,
24
+ stateManager: options.stateManager,
25
+ maxLeverageCache: new MaxLeverageCache(options.senpi),
26
+ });
27
+ const actions = [];
28
+ const actionList = config.actions ?? [];
29
+ for (const entry of actionList) {
30
+ const factory = ActionRegistry.get(entry.action_type);
31
+ if (!factory) {
32
+ throw new Error(`Unknown action_type: ${entry.action_type}`);
33
+ }
34
+ const config = {
35
+ name: entry.name,
36
+ action_type: entry.action_type,
37
+ decision_mode: entry.decision_mode ?? "none",
38
+ decision_model: entry.decision_model,
39
+ scanners: entry.scanners,
40
+ min_confidence: entry.min_confidence,
41
+ context: entry.context,
42
+ decision_prompt: entry.decision_prompt,
43
+ params: entry.params,
44
+ };
45
+ const action = factory(config, context);
46
+ const actionWithManifest = action;
47
+ const manifest = actionWithManifest?.manifest?.eventsConsumed ?? [HOOK_EVENT.ON_SIGNAL_DETECTED];
48
+ actions.push({
49
+ action,
50
+ name: entry.name,
51
+ eventsConsumed: manifest,
52
+ });
53
+ }
54
+ function runActionsForSignal(event) {
55
+ const scanPayload = event?.data;
56
+ const scannerId = scanPayload?.scanResult?.scannerId;
57
+ const promises = [];
58
+ for (const { action } of actions) {
59
+ const cfg = action.config;
60
+ const scanners = cfg?.scanners;
61
+ if (Array.isArray(scanners) && scanners.length > 0) {
62
+ if (scannerId == null || !scanners.includes(scannerId))
63
+ continue;
64
+ }
65
+ promises.push(Promise.resolve(action.handle(event)));
66
+ }
67
+ return Promise.all(promises).then(() => undefined);
68
+ }
69
+ return { actions, runActionsForSignal };
70
+ }
71
+ //# sourceMappingURL=create-actions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-actions.js","sourceRoot":"","sources":["../../src/runtime/create-actions.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAG/C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAmBrE;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,MAA6B,EAAE,OAA6B;IACxF,MAAM,OAAO,GACX,OAAO,CAAC,cAAc;QACtB,oBAAoB,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAAE;YAClD,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,gBAAgB,EAAE,IAAI,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC;SACtD,CAAC,CAAC;IACL,MAAM,OAAO,GAAqB,EAAE,CAAC;IACrC,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;IAExC,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,WAAiD,CAAC,CAAC;QAC5F,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,wBAAwB,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;QAC/D,CAAC;QACD,MAAM,MAAM,GAAiB;YAC3B,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,aAAa,EAAG,KAAK,CAAC,aAA+C,IAAI,MAAM;YAC/E,cAAc,EAAE,KAAK,CAAC,cAAc;YACpC,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,cAAc,EAAE,KAAK,CAAC,cAAc;YACpC,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,eAAe,EAAE,KAAK,CAAC,eAAe;YACtC,MAAM,EAAE,KAAK,CAAC,MAAM;SACrB,CAAC;QACF,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACxC,MAAM,kBAAkB,GAAG,MAAgE,CAAC;QAC5F,MAAM,QAAQ,GAAG,kBAAkB,EAAE,QAAQ,EAAE,cAAc,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC;QACjG,OAAO,CAAC,IAAI,CAAC;YACX,MAAM;YACN,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,cAAc,EAAE,QAAQ;SACzB,CAAC,CAAC;IACL,CAAC;IAED,SAAS,mBAAmB,CAAC,KAAgB;QAC3C,MAAM,WAAW,GAAG,KAAK,EAAE,IAA2D,CAAC;QACvF,MAAM,SAAS,GAAG,WAAW,EAAE,UAAU,EAAE,SAAS,CAAC;QACrD,MAAM,QAAQ,GAAuB,EAAE,CAAC;QACxC,KAAK,MAAM,EAAE,MAAM,EAAE,IAAI,OAAO,EAAE,CAAC;YACjC,MAAM,GAAG,GAAI,MAA+C,CAAC,MAAM,CAAC;YACpE,MAAM,QAAQ,GAAG,GAAG,EAAE,QAAQ,CAAC;YAC/B,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACnD,IAAI,SAAS,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC;oBAAE,SAAS;YACnE,CAAC;YACD,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACvD,CAAC;QACD,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IACrD,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC;AAC1C,CAAC"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Build RuntimeContext for actions: strategyStates with live StrategyStateImpl from SenpiClient.
3
+ */
4
+ import type { StrategyConfig, StrategyState } from "../types/strategy.js";
5
+ import type { RuntimeContext } from "../types/runtime.js";
6
+ import type { SenpiClient } from "../senpi/client.js";
7
+ import type { HookSystem, LlmDecision, RiskGuard } from "../actions/types.js";
8
+ import type { ContextBuilder } from "../context/types.js";
9
+ import type { NotificationService } from "../types/notification.js";
10
+ import type { ScannerRuntimeModule } from "../scanners/runtime-module.js";
11
+ import type { MaxLeverageCache } from "../leverage/max-leverage-cache.js";
12
+ export interface GetUsedSlotsByStrategy {
13
+ getUsedSlotsByStrategy(addresses: string[]): Record<string, number>;
14
+ }
15
+ /**
16
+ * Build a Map of address → StrategyState for RuntimeContext.
17
+ * Each entry is a live StrategyStateImpl backed by SenpiClient.
18
+ */
19
+ export declare function createStrategyStatesMap(strategiesMap: Map<string, StrategyConfig>, stateManager: GetUsedSlotsByStrategy, senpi: SenpiClient): Map<string, StrategyState>;
20
+ export interface CreateRuntimeContextDeps {
21
+ senpi: SenpiClient;
22
+ hookSystem: HookSystem;
23
+ llmDecision: LlmDecision;
24
+ contextBuilder: ContextBuilder;
25
+ riskGuard: RiskGuard;
26
+ notifications: NotificationService;
27
+ stateManager: GetUsedSlotsByStrategy;
28
+ scannerModule?: ScannerRuntimeModule;
29
+ maxLeverageCache: MaxLeverageCache;
30
+ }
31
+ /**
32
+ * Build RuntimeContext from strategies map and deps. Used by createActions to pass into action factories.
33
+ */
34
+ export declare function createRuntimeContext(strategiesMap: Map<string, StrategyConfig>, deps: CreateRuntimeContextDeps): RuntimeContext;
35
+ //# sourceMappingURL=create-runtime-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-runtime-context.d.ts","sourceRoot":"","sources":["../../src/runtime/create-runtime-context.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAC9E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAG1E,MAAM,WAAW,sBAAsB;IACrC,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACrE;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,EAC1C,YAAY,EAAE,sBAAsB,EACpC,KAAK,EAAE,WAAW,GACjB,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAM5B;AAED,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,WAAW,CAAC;IACnB,UAAU,EAAE,UAAU,CAAC;IACvB,WAAW,EAAE,WAAW,CAAC;IACzB,cAAc,EAAE,cAAc,CAAC;IAC/B,SAAS,EAAE,SAAS,CAAC;IACrB,aAAa,EAAE,mBAAmB,CAAC;IACnC,YAAY,EAAE,sBAAsB,CAAC;IACrC,aAAa,CAAC,EAAE,oBAAoB,CAAC;IACrC,gBAAgB,EAAE,gBAAgB,CAAC;CACpC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,EAC1C,IAAI,EAAE,wBAAwB,GAC7B,cAAc,CAahB"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Build RuntimeContext for actions: strategyStates with live StrategyStateImpl from SenpiClient.
3
+ */
4
+ import { StrategyStateImpl } from "../strategy/strategy-state.js";
5
+ /**
6
+ * Build a Map of address → StrategyState for RuntimeContext.
7
+ * Each entry is a live StrategyStateImpl backed by SenpiClient.
8
+ */
9
+ export function createStrategyStatesMap(strategiesMap, stateManager, senpi) {
10
+ const out = new Map();
11
+ for (const [key, config] of strategiesMap) {
12
+ out.set(key, new StrategyStateImpl(config, senpi));
13
+ }
14
+ return out;
15
+ }
16
+ /**
17
+ * Build RuntimeContext from strategies map and deps. Used by createActions to pass into action factories.
18
+ */
19
+ export function createRuntimeContext(strategiesMap, deps) {
20
+ const strategyStates = createStrategyStatesMap(strategiesMap, deps.stateManager, deps.senpi);
21
+ return {
22
+ senpi: deps.senpi,
23
+ hookSystem: deps.hookSystem,
24
+ llmDecision: deps.llmDecision,
25
+ contextBuilder: deps.contextBuilder,
26
+ riskGuard: deps.riskGuard,
27
+ notifications: deps.notifications,
28
+ strategyStates,
29
+ scannerModule: deps.scannerModule,
30
+ maxLeverageCache: deps.maxLeverageCache,
31
+ };
32
+ }
33
+ //# sourceMappingURL=create-runtime-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-runtime-context.js","sourceRoot":"","sources":["../../src/runtime/create-runtime-context.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAMlE;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CACrC,aAA0C,EAC1C,YAAoC,EACpC,KAAkB;IAElB,MAAM,GAAG,GAAG,IAAI,GAAG,EAAyB,CAAC;IAC7C,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,aAAa,EAAE,CAAC;QAC1C,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,iBAAiB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAcD;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAClC,aAA0C,EAC1C,IAA8B;IAE9B,MAAM,cAAc,GAAG,uBAAuB,CAAC,aAAa,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7F,OAAO;QACL,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,cAAc,EAAE,IAAI,CAAC,cAAc;QACnC,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,cAAc;QACd,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;KACxC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Build ScannerRuntimeModule from trading strategy config.
3
+ */
4
+ import type { ScannerDataProviders } from "../scanners/engine/data-providers.js";
5
+ import type { ScannerLogger } from "../scanners/protocol/context.js";
6
+ import { createScannerRuntimeModule } from "../scanners/runtime-module.js";
7
+ import type { TradingStrategyConfig } from "./trading-strategy-config.js";
8
+ /**
9
+ * Builds the standalone scanner runtime module from parsed trading strategy config.
10
+ * Scanner registrations are normalized into factories so YAML-level ids and
11
+ * optional config overrides become per-strategy scanner instances.
12
+ */
13
+ export declare function createScannerModuleFromTradingStrategy(config: TradingStrategyConfig, stateDir: string, providers?: ScannerDataProviders, logger?: ScannerLogger): ReturnType<typeof createScannerRuntimeModule>;
14
+ //# sourceMappingURL=create-scanner-module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-scanner-module.d.ts","sourceRoot":"","sources":["../../src/runtime/create-scanner-module.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AACjF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAE3E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAI1E;;;;GAIG;AACH,wBAAgB,sCAAsC,CACpD,MAAM,EAAE,qBAAqB,EAC7B,QAAQ,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,oBAAoB,EAChC,MAAM,CAAC,EAAE,aAAa,GACrB,UAAU,CAAC,OAAO,0BAA0B,CAAC,CAa/C"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Build ScannerRuntimeModule from trading strategy config.
3
+ */
4
+ import { createScannerRuntimeModule } from "../scanners/runtime-module.js";
5
+ import { mapStrategiesToScannerRegistration } from "./map-strategies-registration.js";
6
+ import { ScannerRegistry } from "./scanner-registry.js";
7
+ /**
8
+ * Builds the standalone scanner runtime module from parsed trading strategy config.
9
+ * Scanner registrations are normalized into factories so YAML-level ids and
10
+ * optional config overrides become per-strategy scanner instances.
11
+ */
12
+ export function createScannerModuleFromTradingStrategy(config, stateDir, providers, logger) {
13
+ const strategies = mapStrategiesToScannerRegistration(config);
14
+ const scanners = [];
15
+ for (const sc of config.scanners ?? []) {
16
+ scanners.push(ScannerRegistry.createScanner(sc.type, sc.name, sc.config));
17
+ }
18
+ return createScannerRuntimeModule({
19
+ stateDir,
20
+ strategies,
21
+ scanners,
22
+ providers,
23
+ logger,
24
+ });
25
+ }
26
+ //# sourceMappingURL=create-scanner-module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-scanner-module.js","sourceRoot":"","sources":["../../src/runtime/create-scanner-module.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAG3E,OAAO,EAAE,kCAAkC,EAAE,MAAM,kCAAkC,CAAC;AACtF,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD;;;;GAIG;AACH,MAAM,UAAU,sCAAsC,CACpD,MAA6B,EAC7B,QAAgB,EAChB,SAAgC,EAChC,MAAsB;IAEtB,MAAM,UAAU,GAAG,kCAAkC,CAAC,MAAM,CAAC,CAAC;IAC9D,MAAM,QAAQ,GAAmB,EAAE,CAAC;IACpC,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;QACvC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,0BAA0B,CAAC;QAChC,QAAQ;QACR,UAAU;QACV,QAAQ;QACR,SAAS;QACT,MAAM;KACP,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Build ScannerDataProviders for use when the plugin starts a strategy.
3
+ * Uses the same transport (mcpTransport or apiKey) as the runtime so scanners get getSmData, getCandles, etc.
4
+ */
5
+ import type { McpTransport } from "../senpi/types.js";
6
+ import type { ScannerDataProviders } from "../scanners/engine/data-providers.js";
7
+ import type { SenpiScannerProviderFactoryOptions } from "../scanners/providers/factory.js";
8
+ export interface CreateScannerProvidersForRunOptions {
9
+ mcpTransport?: McpTransport;
10
+ apiKey?: string;
11
+ logger?: SenpiScannerProviderFactoryOptions["logger"];
12
+ }
13
+ /**
14
+ * Builds a ScannerDataProviders instance from the same transport the runtime uses.
15
+ * Call this before run() and pass the result as scannerProviders so the scanner module has getSmData, getCandles, etc.
16
+ *
17
+ * With apiKey this creates and connects a SenpiClient here; Runtime will create a second one. A follow-up could optimize to a single connection.
18
+ */
19
+ export declare function createScannerProvidersForRun(options: CreateScannerProvidersForRunOptions): Promise<ScannerDataProviders>;
20
+ //# sourceMappingURL=create-scanner-providers-for-run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-scanner-providers-for-run.d.ts","sourceRoot":"","sources":["../../src/runtime/create-scanner-providers-for-run.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAEjF,OAAO,KAAK,EAAE,kCAAkC,EAAE,MAAM,kCAAkC,CAAC;AAE3F,MAAM,WAAW,mCAAmC;IAClD,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,kCAAkC,CAAC,QAAQ,CAAC,CAAC;CACvD;AAED;;;;;GAKG;AACH,wBAAsB,4BAA4B,CAChD,OAAO,EAAE,mCAAmC,GAC3C,OAAO,CAAC,oBAAoB,CAAC,CAqB/B"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Build ScannerDataProviders for use when the plugin starts a strategy.
3
+ * Uses the same transport (mcpTransport or apiKey) as the runtime so scanners get getSmData, getCandles, etc.
4
+ */
5
+ import { SenpiClient } from "../senpi/client.js";
6
+ import { createSenpiScannerProviders } from "../scanners/providers/factory.js";
7
+ /**
8
+ * Builds a ScannerDataProviders instance from the same transport the runtime uses.
9
+ * Call this before run() and pass the result as scannerProviders so the scanner module has getSmData, getCandles, etc.
10
+ *
11
+ * With apiKey this creates and connects a SenpiClient here; Runtime will create a second one. A follow-up could optimize to a single connection.
12
+ */
13
+ export async function createScannerProvidersForRun(options) {
14
+ const { mcpTransport, apiKey, logger } = options;
15
+ let toolClient;
16
+ if (mcpTransport) {
17
+ toolClient = {
18
+ callTool: (name, args) => mcpTransport(name, args),
19
+ };
20
+ }
21
+ else if (apiKey) {
22
+ const senpi = new SenpiClient({ apiKey });
23
+ await senpi.connect();
24
+ toolClient = senpi.asToolClient();
25
+ }
26
+ else {
27
+ throw new Error("createScannerProvidersForRun requires mcpTransport or apiKey");
28
+ }
29
+ return createSenpiScannerProviders({
30
+ client: toolClient,
31
+ logger,
32
+ });
33
+ }
34
+ //# sourceMappingURL=create-scanner-providers-for-run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-scanner-providers-for-run.js","sourceRoot":"","sources":["../../src/runtime/create-scanner-providers-for-run.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAS/E;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,OAA4C;IAE5C,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAEjD,IAAI,UAAuF,CAAC;IAE5F,IAAI,YAAY,EAAE,CAAC;QACjB,UAAU,GAAG;YACX,QAAQ,EAAE,CAAC,IAAY,EAAE,IAA6B,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC;SACpF,CAAC;IACJ,CAAC;SAAM,IAAI,MAAM,EAAE,CAAC;QAClB,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QAC1C,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;QACtB,UAAU,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC;IACpC,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;IAClF,CAAC;IAED,OAAO,2BAA2B,CAAC;QACjC,MAAM,EAAE,UAAU;QAClB,MAAM;KACP,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Default persistent state directory for the plugin when stateDir is not configured.
3
+ * Used so registry and strategy state survive restarts and are not tied to process.cwd().
4
+ */
5
+ /**
6
+ * Resolve the default plugin state directory: ~/.openclaw/senpi-state.
7
+ * Falls back to process.cwd() if homedir is not available (e.g. some containers).
8
+ */
9
+ export declare function getDefaultStateDir(): string;
10
+ //# sourceMappingURL=default-state-dir.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default-state-dir.d.ts","sourceRoot":"","sources":["../../src/runtime/default-state-dir.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAO3C"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Default persistent state directory for the plugin when stateDir is not configured.
3
+ * Used so registry and strategy state survive restarts and are not tied to process.cwd().
4
+ */
5
+ import { homedir } from "node:os";
6
+ import { join } from "node:path";
7
+ import { createLogger } from "../utils/logger.js";
8
+ const logger = createLogger("[senpi-core][default-state-dir]");
9
+ const RELATIVE_DEFAULT = ".openclaw/senpi-state";
10
+ /**
11
+ * Resolve the default plugin state directory: ~/.openclaw/senpi-state.
12
+ * Falls back to process.cwd() if homedir is not available (e.g. some containers).
13
+ */
14
+ export function getDefaultStateDir() {
15
+ const home = homedir();
16
+ if (typeof home !== "string" || home.length === 0) {
17
+ logger.warn("homedir() unavailable; using process.cwd() for default stateDir");
18
+ return process.cwd();
19
+ }
20
+ return join(home, RELATIVE_DEFAULT);
21
+ }
22
+ //# sourceMappingURL=default-state-dir.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default-state-dir.js","sourceRoot":"","sources":["../../src/runtime/default-state-dir.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,MAAM,GAAG,YAAY,CAAC,iCAAiC,CAAC,CAAC;AAE/D,MAAM,gBAAgB,GAAG,uBAAuB,CAAC;AAEjD;;;GAGG;AACH,MAAM,UAAU,kBAAkB;IAChC,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClD,MAAM,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC;QAC/E,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC;IACvB,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;AACtC,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Resolve ${VAR} and ${VAR:-default} in strings using process.env.
3
+ * SECURITY: Do not log the result of resolveEnvInObject when it may contain
4
+ * resolved secrets (e.g. API keys). Callers must never log full resolved config.
5
+ */
6
+ /**
7
+ * Replaces ${VAR} and ${VAR:-default} in a string using process.env.
8
+ * - ${VAR} → value of process.env.VAR or empty string if unset
9
+ * - ${VAR:-default} → value of process.env.VAR or "default" if unset
10
+ */
11
+ export declare function resolveEnvInString(s: string): string;
12
+ /**
13
+ * Recursively walks plain objects and arrays and resolves string values
14
+ * with resolveEnvInString. Non-strings are left unchanged.
15
+ */
16
+ export declare function resolveEnvInObject<T>(obj: T): T;
17
+ //# sourceMappingURL=env-resolve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-resolve.d.ts","sourceRoot":"","sources":["../../src/runtime/env-resolve.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAOpD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAkB/C"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Resolve ${VAR} and ${VAR:-default} in strings using process.env.
3
+ * SECURITY: Do not log the result of resolveEnvInObject when it may contain
4
+ * resolved secrets (e.g. API keys). Callers must never log full resolved config.
5
+ */
6
+ const VAR_PATTERN = /\$\{([^}:]+)(?::-([^}]*))?\}/g;
7
+ /**
8
+ * Replaces ${VAR} and ${VAR:-default} in a string using process.env.
9
+ * - ${VAR} → value of process.env.VAR or empty string if unset
10
+ * - ${VAR:-default} → value of process.env.VAR or "default" if unset
11
+ */
12
+ export function resolveEnvInString(s) {
13
+ if (typeof s !== "string")
14
+ return s;
15
+ return s.replace(VAR_PATTERN, (_, name, defaultVal) => {
16
+ const val = process.env[name];
17
+ if (val !== undefined && val !== "")
18
+ return val;
19
+ return defaultVal !== undefined ? defaultVal : "";
20
+ });
21
+ }
22
+ /**
23
+ * Recursively walks plain objects and arrays and resolves string values
24
+ * with resolveEnvInString. Non-strings are left unchanged.
25
+ */
26
+ export function resolveEnvInObject(obj) {
27
+ if (obj === null || obj === undefined) {
28
+ return obj;
29
+ }
30
+ if (typeof obj === "string") {
31
+ return resolveEnvInString(obj);
32
+ }
33
+ if (Array.isArray(obj)) {
34
+ return obj.map((item) => resolveEnvInObject(item));
35
+ }
36
+ if (typeof obj === "object" && obj.constructor === Object) {
37
+ const result = {};
38
+ for (const [k, v] of Object.entries(obj)) {
39
+ result[k] = resolveEnvInObject(v);
40
+ }
41
+ return result;
42
+ }
43
+ return obj;
44
+ }
45
+ //# sourceMappingURL=env-resolve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-resolve.js","sourceRoot":"","sources":["../../src/runtime/env-resolve.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,GAAG,+BAA+B,CAAC;AAEpD;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,CAAS;IAC1C,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,CAAC,CAAC;IACpC,OAAO,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,IAAY,EAAE,UAA8B,EAAE,EAAE;QAChF,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,EAAE;YAAE,OAAO,GAAG,CAAC;QAChD,OAAO,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;IACpD,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAI,GAAM;IAC1C,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtC,OAAO,GAAG,CAAC;IACb,CAAC;IACD,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,kBAAkB,CAAC,GAAG,CAAM,CAAC;IACtC,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAM,CAAC;IAC1D,CAAC;IACD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;QAC1D,MAAM,MAAM,GAA4B,EAAE,CAAC;QAC3C,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACzC,MAAM,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC;QACpC,CAAC;QACD,OAAO,MAAW,CAAC;IACrB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * HookSystem adapter: wraps SenpiEventBus for fire/on by event type.
3
+ */
4
+ import type { SenpiEventBus } from "../types/event-bus.js";
5
+ import type { HookSystem } from "../types/hooks.js";
6
+ export declare function createHookSystem(bus: SenpiEventBus): HookSystem;
7
+ //# sourceMappingURL=hook-system.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook-system.d.ts","sourceRoot":"","sources":["../../src/runtime/hook-system.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAA4B,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE9E,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,aAAa,GAAG,UAAU,CAW/D"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * HookSystem adapter: wraps SenpiEventBus for fire/on by event type.
3
+ */
4
+ export function createHookSystem(bus) {
5
+ return {
6
+ async fire(event) {
7
+ bus.emit(event.type, event);
8
+ },
9
+ on(eventType, handler) {
10
+ bus.on(eventType, (payload) => {
11
+ void handler(payload);
12
+ });
13
+ },
14
+ };
15
+ }
16
+ //# sourceMappingURL=hook-system.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook-system.js","sourceRoot":"","sources":["../../src/runtime/hook-system.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,MAAM,UAAU,gBAAgB,CAAC,GAAkB;IACjD,OAAO;QACL,KAAK,CAAC,IAAI,CAAE,KAAgB;YAC1B,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC9B,CAAC;QACD,EAAE,CAAC,SAAwB,EAAE,OAA4C;YACvE,GAAG,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,OAAgB,EAAE,EAAE;gBACrC,KAAK,OAAO,CAAC,OAAoB,CAAC,CAAC;YACrC,CAAC,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Runtime public API re-exports.
3
+ */
4
+ export { loadTradingStrategy } from "./load-trading-strategy.js";
5
+ export type { LoadTradingStrategyOptions } from "./load-trading-strategy.js";
6
+ export { run } from "./run.js";
7
+ export type { RunOptions, RuntimeHandle } from "./run.js";
8
+ export { createScannerProvidersForRun } from "./create-scanner-providers-for-run.js";
9
+ export type { CreateScannerProvidersForRunOptions } from "./create-scanner-providers-for-run.js";
10
+ export { Runtime } from "./runtime.js";
11
+ export type { RuntimeOptions } from "./runtime.js";
12
+ export type { TradingStrategyConfig, TradingStrategyStrategy, TradingStrategyScanner, TradingStrategyAction, TradingStrategyExit } from "./trading-strategy-config.js";
13
+ export { tradingStrategyConfigSchema } from "./trading-strategy-config.js";
14
+ export { resolveEnvInString, resolveEnvInObject } from "./env-resolve.js";
15
+ export { parseInterval } from "./parse-interval.js";
16
+ export { mapStrategiesToConfig } from "./map-strategies.js";
17
+ export { mapStrategiesToScannerRegistration } from "./map-strategies-registration.js";
18
+ export { mapTradingStrategyExitToDslConfig } from "./map-exit-config.js";
19
+ export { ScannerRegistry } from "./scanner-registry.js";
20
+ export { ActionRegistry } from "./action-registry.js";
21
+ export { createRuntimeBus } from "./bus.js";
22
+ export { createHookSystem } from "./hook-system.js";
23
+ export { buildActionScanPayload } from "./build-action-scan-payload.js";
24
+ export type { BuildActionScanPayloadOptions } from "./build-action-scan-payload.js";
25
+ export { createContextBuilder, RuntimeContextBuilder, signalProvider, strategyProvider, interpolatePrompt } from "../context/index.js";
26
+ export type { ContextEntry, ContextProviderRequest, ContextProvider, ContextBuilder } from "../context/index.js";
27
+ export { createRiskGuard } from "./risk-guard.js";
28
+ export { createNotificationService } from "./notifications.js";
29
+ export type { NotificationServiceOptions } from "./notifications.js";
30
+ export { createScannerModuleFromTradingStrategy } from "./create-scanner-module.js";
31
+ export { createActionContext } from "./create-action-context.js";
32
+ export type { CreateActionContextDeps } from "./create-action-context.js";
33
+ export { createRuntimeContext, createStrategyStatesMap } from "./create-runtime-context.js";
34
+ export type { CreateRuntimeContextDeps, GetUsedSlotsByStrategy } from "./create-runtime-context.js";
35
+ export { createActions } from "./create-actions.js";
36
+ export type { CreateActionsOptions, CreateActionsResult, ActionWithMeta } from "./create-actions.js";
37
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,YAAY,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AAC7E,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC1D,OAAO,EAAE,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AACrF,YAAY,EAAE,mCAAmC,EAAE,MAAM,uCAAuC,CAAC;AACjG,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,YAAY,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACvK,OAAO,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,kCAAkC,EAAE,MAAM,kCAAkC,CAAC;AACtF,OAAO,EAAE,iCAAiC,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,YAAY,EAAE,6BAA6B,EAAE,MAAM,gCAAgC,CAAC;AACpF,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,cAAc,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACvI,YAAY,EAAE,YAAY,EAAE,sBAAsB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACjH,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,YAAY,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAE,sCAAsC,EAAE,MAAM,4BAA4B,CAAC;AACpF,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,YAAY,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAC1E,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAC5F,YAAY,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACpG,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,YAAY,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Runtime public API re-exports.
3
+ */
4
+ export { loadTradingStrategy } from "./load-trading-strategy.js";
5
+ export { run } from "./run.js";
6
+ export { createScannerProvidersForRun } from "./create-scanner-providers-for-run.js";
7
+ export { Runtime } from "./runtime.js";
8
+ export { tradingStrategyConfigSchema } from "./trading-strategy-config.js";
9
+ export { resolveEnvInString, resolveEnvInObject } from "./env-resolve.js";
10
+ export { parseInterval } from "./parse-interval.js";
11
+ export { mapStrategiesToConfig } from "./map-strategies.js";
12
+ export { mapStrategiesToScannerRegistration } from "./map-strategies-registration.js";
13
+ export { mapTradingStrategyExitToDslConfig } from "./map-exit-config.js";
14
+ export { ScannerRegistry } from "./scanner-registry.js";
15
+ export { ActionRegistry } from "./action-registry.js";
16
+ export { createRuntimeBus } from "./bus.js";
17
+ export { createHookSystem } from "./hook-system.js";
18
+ export { buildActionScanPayload } from "./build-action-scan-payload.js";
19
+ export { createContextBuilder, RuntimeContextBuilder, signalProvider, strategyProvider, interpolatePrompt } from "../context/index.js";
20
+ export { createRiskGuard } from "./risk-guard.js";
21
+ export { createNotificationService } from "./notifications.js";
22
+ export { createScannerModuleFromTradingStrategy } from "./create-scanner-module.js";
23
+ export { createActionContext } from "./create-action-context.js";
24
+ export { createRuntimeContext, createStrategyStatesMap } from "./create-runtime-context.js";
25
+ export { createActions } from "./create-actions.js";
26
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjE,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/B,OAAO,EAAE,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AAErF,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAGvC,OAAO,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,kCAAkC,EAAE,MAAM,kCAAkC,CAAC;AACtF,OAAO,EAAE,iCAAiC,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAExE,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,cAAc,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAEvI,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAE/D,OAAO,EAAE,sCAAsC,EAAE,MAAM,4BAA4B,CAAC;AACpF,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjE,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAE5F,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Load and validate trading strategy YAML. Resolves env vars and validates with Zod.
3
+ * SECURITY: Do not log the resolved config or pathOrContent; they may contain
4
+ * secrets substituted from environment variables.
5
+ */
6
+ import { type TradingStrategyConfig } from "./trading-strategy-schema.js";
7
+ export interface LoadTradingStrategyOptions {
8
+ fromPath?: boolean;
9
+ }
10
+ /**
11
+ * Minimal valid YAML structure shown in validation errors so users can fix their file.
12
+ * Keep this in sync with tradingStrategyConfigSchema (name + non-empty strategies with wallet).
13
+ */
14
+ export declare const MINIMAL_STRATEGY_YAML_SAMPLE = "# Required: name and at least one strategy with a wallet\nname: my-strategy\nstrategies:\n my-first-strategy:\n wallet: \"your-wallet-address\"\n # optional: budget, slots, enabled, etc.\n\n# Optional: scanners, actions, exit. Run: openclaw senpi guide examples\n";
15
+ /**
16
+ * Load trading strategy from a file path or YAML string.
17
+ * - If fromPath is true, pathOrContent is a file path.
18
+ * - Otherwise pathOrContent is the YAML string.
19
+ * After parse, env vars are resolved and the result is validated with the Zod schema.
20
+ * Throws with path-based error messages on validation failure.
21
+ */
22
+ export declare function loadTradingStrategy(pathOrContent: string, options?: LoadTradingStrategyOptions): Promise<TradingStrategyConfig>;
23
+ //# sourceMappingURL=load-trading-strategy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-trading-strategy.d.ts","sourceRoot":"","sources":["../../src/runtime/load-trading-strategy.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAA+B,KAAK,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAGvG,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;GAGG;AACH,eAAO,MAAM,4BAA4B,mRAQxC,CAAC;AA4EF;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACvC,aAAa,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE,0BAA0B,GACnC,OAAO,CAAC,qBAAqB,CAAC,CAiChC"}