@senpi/trading-runtime 1.0.0

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 (535) hide show
  1. package/README.md +117 -0
  2. package/dist/actions/decision-engine.d.ts +28 -0
  3. package/dist/actions/decision-engine.d.ts.map +1 -0
  4. package/dist/actions/decision-engine.js +65 -0
  5. package/dist/actions/decision-engine.js.map +1 -0
  6. package/dist/actions/llm-decision/anthropic-llm-decision.d.ts +12 -0
  7. package/dist/actions/llm-decision/anthropic-llm-decision.d.ts.map +1 -0
  8. package/dist/actions/llm-decision/anthropic-llm-decision.js +74 -0
  9. package/dist/actions/llm-decision/anthropic-llm-decision.js.map +1 -0
  10. package/dist/actions/llm-decision/factory.d.ts +17 -0
  11. package/dist/actions/llm-decision/factory.d.ts.map +1 -0
  12. package/dist/actions/llm-decision/factory.js +29 -0
  13. package/dist/actions/llm-decision/factory.js.map +1 -0
  14. package/dist/actions/llm-decision/index.d.ts +8 -0
  15. package/dist/actions/llm-decision/index.d.ts.map +1 -0
  16. package/dist/actions/llm-decision/index.js +5 -0
  17. package/dist/actions/llm-decision/index.js.map +1 -0
  18. package/dist/actions/llm-decision/openclaw-llm-decision.d.ts +14 -0
  19. package/dist/actions/llm-decision/openclaw-llm-decision.d.ts.map +1 -0
  20. package/dist/actions/llm-decision/openclaw-llm-decision.js +58 -0
  21. package/dist/actions/llm-decision/openclaw-llm-decision.js.map +1 -0
  22. package/dist/actions/llm-decision/shared.d.ts +41 -0
  23. package/dist/actions/llm-decision/shared.d.ts.map +1 -0
  24. package/dist/actions/llm-decision/shared.js +117 -0
  25. package/dist/actions/llm-decision/shared.js.map +1 -0
  26. package/dist/actions/open-position/open-position.action.d.ts +15 -0
  27. package/dist/actions/open-position/open-position.action.d.ts.map +1 -0
  28. package/dist/actions/open-position/open-position.action.js +302 -0
  29. package/dist/actions/open-position/open-position.action.js.map +1 -0
  30. package/dist/actions/types.d.ts +123 -0
  31. package/dist/actions/types.d.ts.map +1 -0
  32. package/dist/actions/types.js +3 -0
  33. package/dist/actions/types.js.map +1 -0
  34. package/dist/cli/guide-commands.d.ts +26 -0
  35. package/dist/cli/guide-commands.d.ts.map +1 -0
  36. package/dist/cli/guide-commands.js +332 -0
  37. package/dist/cli/guide-commands.js.map +1 -0
  38. package/dist/cli/senpi-commands.d.ts +22 -0
  39. package/dist/cli/senpi-commands.d.ts.map +1 -0
  40. package/dist/cli/senpi-commands.js +138 -0
  41. package/dist/cli/senpi-commands.js.map +1 -0
  42. package/dist/constants/dsl/index.d.ts +39 -0
  43. package/dist/constants/dsl/index.d.ts.map +1 -0
  44. package/dist/constants/dsl/index.js +39 -0
  45. package/dist/constants/dsl/index.js.map +1 -0
  46. package/dist/context/context-builder.d.ts +14 -0
  47. package/dist/context/context-builder.d.ts.map +1 -0
  48. package/dist/context/context-builder.js +36 -0
  49. package/dist/context/context-builder.js.map +1 -0
  50. package/dist/context/index.d.ts +5 -0
  51. package/dist/context/index.d.ts.map +1 -0
  52. package/dist/context/index.js +5 -0
  53. package/dist/context/index.js.map +1 -0
  54. package/dist/context/interpolate.d.ts +6 -0
  55. package/dist/context/interpolate.d.ts.map +1 -0
  56. package/dist/context/interpolate.js +15 -0
  57. package/dist/context/interpolate.js.map +1 -0
  58. package/dist/context/providers/asset-trend.provider.d.ts +42 -0
  59. package/dist/context/providers/asset-trend.provider.d.ts.map +1 -0
  60. package/dist/context/providers/asset-trend.provider.js +94 -0
  61. package/dist/context/providers/asset-trend.provider.js.map +1 -0
  62. package/dist/context/providers/index.d.ts +5 -0
  63. package/dist/context/providers/index.d.ts.map +1 -0
  64. package/dist/context/providers/index.js +5 -0
  65. package/dist/context/providers/index.js.map +1 -0
  66. package/dist/context/providers/regime.provider.d.ts +14 -0
  67. package/dist/context/providers/regime.provider.d.ts.map +1 -0
  68. package/dist/context/providers/regime.provider.js +29 -0
  69. package/dist/context/providers/regime.provider.js.map +1 -0
  70. package/dist/context/providers/signal.provider.d.ts +11 -0
  71. package/dist/context/providers/signal.provider.d.ts.map +1 -0
  72. package/dist/context/providers/signal.provider.js +27 -0
  73. package/dist/context/providers/signal.provider.js.map +1 -0
  74. package/dist/context/providers/strategy.provider.d.ts +14 -0
  75. package/dist/context/providers/strategy.provider.d.ts.map +1 -0
  76. package/dist/context/providers/strategy.provider.js +68 -0
  77. package/dist/context/providers/strategy.provider.js.map +1 -0
  78. package/dist/context/types.d.ts +30 -0
  79. package/dist/context/types.d.ts.map +1 -0
  80. package/dist/context/types.js +2 -0
  81. package/dist/context/types.js.map +1 -0
  82. package/dist/dsl/config/index.d.ts +43 -0
  83. package/dist/dsl/config/index.d.ts.map +1 -0
  84. package/dist/dsl/config/index.js +108 -0
  85. package/dist/dsl/config/index.js.map +1 -0
  86. package/dist/dsl/constants/index.d.ts +3 -0
  87. package/dist/dsl/constants/index.d.ts.map +1 -0
  88. package/dist/dsl/constants/index.js +3 -0
  89. package/dist/dsl/constants/index.js.map +1 -0
  90. package/dist/dsl/engine/index.d.ts +7 -0
  91. package/dist/dsl/engine/index.d.ts.map +1 -0
  92. package/dist/dsl/engine/index.js +123 -0
  93. package/dist/dsl/engine/index.js.map +1 -0
  94. package/dist/dsl/events/bus-types.d.ts +7 -0
  95. package/dist/dsl/events/bus-types.d.ts.map +1 -0
  96. package/dist/dsl/events/bus-types.js +6 -0
  97. package/dist/dsl/events/bus-types.js.map +1 -0
  98. package/dist/dsl/events/guards.d.ts +17 -0
  99. package/dist/dsl/events/guards.d.ts.map +1 -0
  100. package/dist/dsl/events/guards.js +94 -0
  101. package/dist/dsl/events/guards.js.map +1 -0
  102. package/dist/dsl/events/handlers.d.ts +15 -0
  103. package/dist/dsl/events/handlers.d.ts.map +1 -0
  104. package/dist/dsl/events/handlers.js +229 -0
  105. package/dist/dsl/events/handlers.js.map +1 -0
  106. package/dist/dsl/events/index.d.ts +4 -0
  107. package/dist/dsl/events/index.d.ts.map +1 -0
  108. package/dist/dsl/events/index.js +4 -0
  109. package/dist/dsl/events/index.js.map +1 -0
  110. package/dist/dsl/index.d.ts +13 -0
  111. package/dist/dsl/index.d.ts.map +1 -0
  112. package/dist/dsl/index.js +35 -0
  113. package/dist/dsl/index.js.map +1 -0
  114. package/dist/dsl/monitor/index.d.ts +18 -0
  115. package/dist/dsl/monitor/index.d.ts.map +1 -0
  116. package/dist/dsl/monitor/index.js +296 -0
  117. package/dist/dsl/monitor/index.js.map +1 -0
  118. package/dist/dsl/plugin/index.d.ts +29 -0
  119. package/dist/dsl/plugin/index.d.ts.map +1 -0
  120. package/dist/dsl/plugin/index.js +85 -0
  121. package/dist/dsl/plugin/index.js.map +1 -0
  122. package/dist/dsl/types/index.d.ts +3 -0
  123. package/dist/dsl/types/index.d.ts.map +1 -0
  124. package/dist/dsl/types/index.js +3 -0
  125. package/dist/dsl/types/index.js.map +1 -0
  126. package/dist/health/index.d.ts +9 -0
  127. package/dist/health/index.d.ts.map +1 -0
  128. package/dist/health/index.js +9 -0
  129. package/dist/health/index.js.map +1 -0
  130. package/dist/index.d.ts +94 -0
  131. package/dist/index.d.ts.map +1 -0
  132. package/dist/index.js +218 -0
  133. package/dist/index.js.map +1 -0
  134. package/dist/risk/index.d.ts +9 -0
  135. package/dist/risk/index.d.ts.map +1 -0
  136. package/dist/risk/index.js +9 -0
  137. package/dist/risk/index.js.map +1 -0
  138. package/dist/runtime/action-registry.d.ts +12 -0
  139. package/dist/runtime/action-registry.d.ts.map +1 -0
  140. package/dist/runtime/action-registry.js +18 -0
  141. package/dist/runtime/action-registry.js.map +1 -0
  142. package/dist/runtime/build-action-scan-payload.d.ts +20 -0
  143. package/dist/runtime/build-action-scan-payload.d.ts.map +1 -0
  144. package/dist/runtime/build-action-scan-payload.js +52 -0
  145. package/dist/runtime/build-action-scan-payload.js.map +1 -0
  146. package/dist/runtime/bus.d.ts +6 -0
  147. package/dist/runtime/bus.d.ts.map +1 -0
  148. package/dist/runtime/bus.js +19 -0
  149. package/dist/runtime/bus.js.map +1 -0
  150. package/dist/runtime/create-action-context.d.ts +34 -0
  151. package/dist/runtime/create-action-context.d.ts.map +1 -0
  152. package/dist/runtime/create-action-context.js +22 -0
  153. package/dist/runtime/create-action-context.js.map +1 -0
  154. package/dist/runtime/create-actions.d.ts +30 -0
  155. package/dist/runtime/create-actions.d.ts.map +1 -0
  156. package/dist/runtime/create-actions.js +78 -0
  157. package/dist/runtime/create-actions.js.map +1 -0
  158. package/dist/runtime/create-runtime-context.d.ts +33 -0
  159. package/dist/runtime/create-runtime-context.d.ts.map +1 -0
  160. package/dist/runtime/create-runtime-context.js +32 -0
  161. package/dist/runtime/create-runtime-context.js.map +1 -0
  162. package/dist/runtime/create-scanner-module.d.ts +14 -0
  163. package/dist/runtime/create-scanner-module.d.ts.map +1 -0
  164. package/dist/runtime/create-scanner-module.js +26 -0
  165. package/dist/runtime/create-scanner-module.js.map +1 -0
  166. package/dist/runtime/create-scanner-providers-for-run.d.ts +20 -0
  167. package/dist/runtime/create-scanner-providers-for-run.d.ts.map +1 -0
  168. package/dist/runtime/create-scanner-providers-for-run.js +34 -0
  169. package/dist/runtime/create-scanner-providers-for-run.js.map +1 -0
  170. package/dist/runtime/default-state-dir.d.ts +10 -0
  171. package/dist/runtime/default-state-dir.d.ts.map +1 -0
  172. package/dist/runtime/default-state-dir.js +22 -0
  173. package/dist/runtime/default-state-dir.js.map +1 -0
  174. package/dist/runtime/env-resolve.d.ts +17 -0
  175. package/dist/runtime/env-resolve.d.ts.map +1 -0
  176. package/dist/runtime/env-resolve.js +45 -0
  177. package/dist/runtime/env-resolve.js.map +1 -0
  178. package/dist/runtime/hook-system.d.ts +7 -0
  179. package/dist/runtime/hook-system.d.ts.map +1 -0
  180. package/dist/runtime/hook-system.js +16 -0
  181. package/dist/runtime/hook-system.js.map +1 -0
  182. package/dist/runtime/index.d.ts +37 -0
  183. package/dist/runtime/index.d.ts.map +1 -0
  184. package/dist/runtime/index.js +26 -0
  185. package/dist/runtime/index.js.map +1 -0
  186. package/dist/runtime/load-trading-strategy.d.ts +18 -0
  187. package/dist/runtime/load-trading-strategy.d.ts.map +1 -0
  188. package/dist/runtime/load-trading-strategy.js +51 -0
  189. package/dist/runtime/load-trading-strategy.js.map +1 -0
  190. package/dist/runtime/map-exit-config.d.ts +12 -0
  191. package/dist/runtime/map-exit-config.d.ts.map +1 -0
  192. package/dist/runtime/map-exit-config.js +89 -0
  193. package/dist/runtime/map-exit-config.js.map +1 -0
  194. package/dist/runtime/map-strategies-registration.d.ts +12 -0
  195. package/dist/runtime/map-strategies-registration.d.ts.map +1 -0
  196. package/dist/runtime/map-strategies-registration.js +52 -0
  197. package/dist/runtime/map-strategies-registration.js.map +1 -0
  198. package/dist/runtime/map-strategies.d.ts +12 -0
  199. package/dist/runtime/map-strategies.d.ts.map +1 -0
  200. package/dist/runtime/map-strategies.js +46 -0
  201. package/dist/runtime/map-strategies.js.map +1 -0
  202. package/dist/runtime/notifications.d.ts +10 -0
  203. package/dist/runtime/notifications.d.ts.map +1 -0
  204. package/dist/runtime/notifications.js +14 -0
  205. package/dist/runtime/notifications.js.map +1 -0
  206. package/dist/runtime/parse-interval.d.ts +11 -0
  207. package/dist/runtime/parse-interval.d.ts.map +1 -0
  208. package/dist/runtime/parse-interval.js +35 -0
  209. package/dist/runtime/parse-interval.js.map +1 -0
  210. package/dist/runtime/reconcile-state.d.ts +25 -0
  211. package/dist/runtime/reconcile-state.d.ts.map +1 -0
  212. package/dist/runtime/reconcile-state.js +114 -0
  213. package/dist/runtime/reconcile-state.js.map +1 -0
  214. package/dist/runtime/risk-guard.d.ts +6 -0
  215. package/dist/runtime/risk-guard.d.ts.map +1 -0
  216. package/dist/runtime/risk-guard.js +14 -0
  217. package/dist/runtime/risk-guard.js.map +1 -0
  218. package/dist/runtime/run.d.ts +21 -0
  219. package/dist/runtime/run.d.ts.map +1 -0
  220. package/dist/runtime/run.js +43 -0
  221. package/dist/runtime/run.js.map +1 -0
  222. package/dist/runtime/runtime.d.ts +40 -0
  223. package/dist/runtime/runtime.d.ts.map +1 -0
  224. package/dist/runtime/runtime.js +249 -0
  225. package/dist/runtime/runtime.js.map +1 -0
  226. package/dist/runtime/scanner-registry.d.ts +22 -0
  227. package/dist/runtime/scanner-registry.d.ts.map +1 -0
  228. package/dist/runtime/scanner-registry.js +72 -0
  229. package/dist/runtime/scanner-registry.js.map +1 -0
  230. package/dist/runtime/strategy-registry.d.ts +49 -0
  231. package/dist/runtime/strategy-registry.d.ts.map +1 -0
  232. package/dist/runtime/strategy-registry.js +150 -0
  233. package/dist/runtime/strategy-registry.js.map +1 -0
  234. package/dist/runtime/trading-strategy-config.d.ts +6 -0
  235. package/dist/runtime/trading-strategy-config.d.ts.map +1 -0
  236. package/dist/runtime/trading-strategy-config.js +5 -0
  237. package/dist/runtime/trading-strategy-config.js.map +1 -0
  238. package/dist/runtime/trading-strategy-schema.d.ts +19757 -0
  239. package/dist/runtime/trading-strategy-schema.d.ts.map +1 -0
  240. package/dist/runtime/trading-strategy-schema.js +107 -0
  241. package/dist/runtime/trading-strategy-schema.js.map +1 -0
  242. package/dist/scanners/__tests__/fixtures/index.d.ts +3 -0
  243. package/dist/scanners/__tests__/fixtures/index.d.ts.map +1 -0
  244. package/dist/scanners/__tests__/fixtures/index.js +3 -0
  245. package/dist/scanners/__tests__/fixtures/index.js.map +1 -0
  246. package/dist/scanners/__tests__/fixtures/scan-results.d.ts +23 -0
  247. package/dist/scanners/__tests__/fixtures/scan-results.d.ts.map +1 -0
  248. package/dist/scanners/__tests__/fixtures/scan-results.js +128 -0
  249. package/dist/scanners/__tests__/fixtures/scan-results.js.map +1 -0
  250. package/dist/scanners/__tests__/fixtures/signals.d.ts +18 -0
  251. package/dist/scanners/__tests__/fixtures/signals.d.ts.map +1 -0
  252. package/dist/scanners/__tests__/fixtures/signals.js +84 -0
  253. package/dist/scanners/__tests__/fixtures/signals.js.map +1 -0
  254. package/dist/scanners/__tests__/test-helpers.d.ts +4 -0
  255. package/dist/scanners/__tests__/test-helpers.d.ts.map +1 -0
  256. package/dist/scanners/__tests__/test-helpers.js +23 -0
  257. package/dist/scanners/__tests__/test-helpers.js.map +1 -0
  258. package/dist/scanners/artifacts.d.ts +119 -0
  259. package/dist/scanners/artifacts.d.ts.map +1 -0
  260. package/dist/scanners/artifacts.js +72 -0
  261. package/dist/scanners/artifacts.js.map +1 -0
  262. package/dist/scanners/create-scanner.d.ts +13 -0
  263. package/dist/scanners/create-scanner.d.ts.map +1 -0
  264. package/dist/scanners/create-scanner.js +11 -0
  265. package/dist/scanners/create-scanner.js.map +1 -0
  266. package/dist/scanners/engine/config-validator.d.ts +7 -0
  267. package/dist/scanners/engine/config-validator.d.ts.map +1 -0
  268. package/dist/scanners/engine/config-validator.js +16 -0
  269. package/dist/scanners/engine/config-validator.js.map +1 -0
  270. package/dist/scanners/engine/data-providers.d.ts +43 -0
  271. package/dist/scanners/engine/data-providers.d.ts.map +1 -0
  272. package/dist/scanners/engine/data-providers.js +8 -0
  273. package/dist/scanners/engine/data-providers.js.map +1 -0
  274. package/dist/scanners/engine/engine.d.ts +76 -0
  275. package/dist/scanners/engine/engine.d.ts.map +1 -0
  276. package/dist/scanners/engine/engine.js +399 -0
  277. package/dist/scanners/engine/engine.js.map +1 -0
  278. package/dist/scanners/engine/index.d.ts +9 -0
  279. package/dist/scanners/engine/index.d.ts.map +1 -0
  280. package/dist/scanners/engine/index.js +7 -0
  281. package/dist/scanners/engine/index.js.map +1 -0
  282. package/dist/scanners/engine/input-resolver.d.ts +21 -0
  283. package/dist/scanners/engine/input-resolver.d.ts.map +1 -0
  284. package/dist/scanners/engine/input-resolver.js +140 -0
  285. package/dist/scanners/engine/input-resolver.js.map +1 -0
  286. package/dist/scanners/engine/lifecycle.d.ts +21 -0
  287. package/dist/scanners/engine/lifecycle.d.ts.map +1 -0
  288. package/dist/scanners/engine/lifecycle.js +2 -0
  289. package/dist/scanners/engine/lifecycle.js.map +1 -0
  290. package/dist/scanners/engine/result-builder.d.ts +30 -0
  291. package/dist/scanners/engine/result-builder.d.ts.map +1 -0
  292. package/dist/scanners/engine/result-builder.js +129 -0
  293. package/dist/scanners/engine/result-builder.js.map +1 -0
  294. package/dist/scanners/engine/strategy-registry.d.ts +45 -0
  295. package/dist/scanners/engine/strategy-registry.d.ts.map +1 -0
  296. package/dist/scanners/engine/strategy-registry.js +93 -0
  297. package/dist/scanners/engine/strategy-registry.js.map +1 -0
  298. package/dist/scanners/events.d.ts +41 -0
  299. package/dist/scanners/events.d.ts.map +1 -0
  300. package/dist/scanners/events.js +33 -0
  301. package/dist/scanners/events.js.map +1 -0
  302. package/dist/scanners/implementations/emerging-movers.d.ts +212 -0
  303. package/dist/scanners/implementations/emerging-movers.d.ts.map +1 -0
  304. package/dist/scanners/implementations/emerging-movers.js +702 -0
  305. package/dist/scanners/implementations/emerging-movers.js.map +1 -0
  306. package/dist/scanners/implementations/index.d.ts +8 -0
  307. package/dist/scanners/implementations/index.d.ts.map +1 -0
  308. package/dist/scanners/implementations/index.js +8 -0
  309. package/dist/scanners/implementations/index.js.map +1 -0
  310. package/dist/scanners/implementations/indicators.d.ts +40 -0
  311. package/dist/scanners/implementations/indicators.d.ts.map +1 -0
  312. package/dist/scanners/implementations/indicators.js +114 -0
  313. package/dist/scanners/implementations/indicators.js.map +1 -0
  314. package/dist/scanners/implementations/market-regime.d.ts +52 -0
  315. package/dist/scanners/implementations/market-regime.d.ts.map +1 -0
  316. package/dist/scanners/implementations/market-regime.js +201 -0
  317. package/dist/scanners/implementations/market-regime.js.map +1 -0
  318. package/dist/scanners/implementations/momentum.d.ts +21 -0
  319. package/dist/scanners/implementations/momentum.d.ts.map +1 -0
  320. package/dist/scanners/implementations/momentum.js +128 -0
  321. package/dist/scanners/implementations/momentum.js.map +1 -0
  322. package/dist/scanners/implementations/oi-tracker.d.ts +13 -0
  323. package/dist/scanners/implementations/oi-tracker.d.ts.map +1 -0
  324. package/dist/scanners/implementations/oi-tracker.js +67 -0
  325. package/dist/scanners/implementations/oi-tracker.js.map +1 -0
  326. package/dist/scanners/implementations/opportunity.d.ts +104 -0
  327. package/dist/scanners/implementations/opportunity.d.ts.map +1 -0
  328. package/dist/scanners/implementations/opportunity.js +441 -0
  329. package/dist/scanners/implementations/opportunity.js.map +1 -0
  330. package/dist/scanners/implementations/prescreener.d.ts +20 -0
  331. package/dist/scanners/implementations/prescreener.d.ts.map +1 -0
  332. package/dist/scanners/implementations/prescreener.js +97 -0
  333. package/dist/scanners/implementations/prescreener.js.map +1 -0
  334. package/dist/scanners/implementations/sm-flip.d.ts +43 -0
  335. package/dist/scanners/implementations/sm-flip.d.ts.map +1 -0
  336. package/dist/scanners/implementations/sm-flip.js +200 -0
  337. package/dist/scanners/implementations/sm-flip.js.map +1 -0
  338. package/dist/scanners/index.d.ts +24 -0
  339. package/dist/scanners/index.d.ts.map +1 -0
  340. package/dist/scanners/index.js +17 -0
  341. package/dist/scanners/index.js.map +1 -0
  342. package/dist/scanners/input-descriptors.d.ts +49 -0
  343. package/dist/scanners/input-descriptors.d.ts.map +1 -0
  344. package/dist/scanners/input-descriptors.js +35 -0
  345. package/dist/scanners/input-descriptors.js.map +1 -0
  346. package/dist/scanners/protocol/context.d.ts +71 -0
  347. package/dist/scanners/protocol/context.d.ts.map +1 -0
  348. package/dist/scanners/protocol/context.js +2 -0
  349. package/dist/scanners/protocol/context.js.map +1 -0
  350. package/dist/scanners/protocol/hooks.d.ts +18 -0
  351. package/dist/scanners/protocol/hooks.d.ts.map +1 -0
  352. package/dist/scanners/protocol/hooks.js +12 -0
  353. package/dist/scanners/protocol/hooks.js.map +1 -0
  354. package/dist/scanners/protocol/index.d.ts +5 -0
  355. package/dist/scanners/protocol/index.d.ts.map +1 -0
  356. package/dist/scanners/protocol/index.js +2 -0
  357. package/dist/scanners/protocol/index.js.map +1 -0
  358. package/dist/scanners/protocol/scanner.d.ts +47 -0
  359. package/dist/scanners/protocol/scanner.d.ts.map +1 -0
  360. package/dist/scanners/protocol/scanner.js +2 -0
  361. package/dist/scanners/protocol/scanner.js.map +1 -0
  362. package/dist/scanners/providers/adapter.d.ts +23 -0
  363. package/dist/scanners/providers/adapter.d.ts.map +1 -0
  364. package/dist/scanners/providers/adapter.js +227 -0
  365. package/dist/scanners/providers/adapter.js.map +1 -0
  366. package/dist/scanners/providers/cache.d.ts +20 -0
  367. package/dist/scanners/providers/cache.d.ts.map +1 -0
  368. package/dist/scanners/providers/cache.js +61 -0
  369. package/dist/scanners/providers/cache.js.map +1 -0
  370. package/dist/scanners/providers/client.d.ts +53 -0
  371. package/dist/scanners/providers/client.d.ts.map +1 -0
  372. package/dist/scanners/providers/client.js +174 -0
  373. package/dist/scanners/providers/client.js.map +1 -0
  374. package/dist/scanners/providers/factory.d.ts +42 -0
  375. package/dist/scanners/providers/factory.d.ts.map +1 -0
  376. package/dist/scanners/providers/factory.js +156 -0
  377. package/dist/scanners/providers/factory.js.map +1 -0
  378. package/dist/scanners/providers/types.d.ts +61 -0
  379. package/dist/scanners/providers/types.d.ts.map +1 -0
  380. package/dist/scanners/providers/types.js +6 -0
  381. package/dist/scanners/providers/types.js.map +1 -0
  382. package/dist/scanners/runtime-module.d.ts +54 -0
  383. package/dist/scanners/runtime-module.d.ts.map +1 -0
  384. package/dist/scanners/runtime-module.js +94 -0
  385. package/dist/scanners/runtime-module.js.map +1 -0
  386. package/dist/scanners/scanner-definition.d.ts +58 -0
  387. package/dist/scanners/scanner-definition.d.ts.map +1 -0
  388. package/dist/scanners/scanner-definition.js +19 -0
  389. package/dist/scanners/scanner-definition.js.map +1 -0
  390. package/dist/scanners/schema-utils.d.ts +6 -0
  391. package/dist/scanners/schema-utils.d.ts.map +1 -0
  392. package/dist/scanners/schema-utils.js +14 -0
  393. package/dist/scanners/schema-utils.js.map +1 -0
  394. package/dist/scanners/score-utils.d.ts +19 -0
  395. package/dist/scanners/score-utils.d.ts.map +1 -0
  396. package/dist/scanners/score-utils.js +47 -0
  397. package/dist/scanners/score-utils.js.map +1 -0
  398. package/dist/scanners/store/fs-utils.d.ts +12 -0
  399. package/dist/scanners/store/fs-utils.d.ts.map +1 -0
  400. package/dist/scanners/store/fs-utils.js +47 -0
  401. package/dist/scanners/store/fs-utils.js.map +1 -0
  402. package/dist/scanners/store/index.d.ts +5 -0
  403. package/dist/scanners/store/index.d.ts.map +1 -0
  404. package/dist/scanners/store/index.js +5 -0
  405. package/dist/scanners/store/index.js.map +1 -0
  406. package/dist/scanners/store/runtime-store.d.ts +50 -0
  407. package/dist/scanners/store/runtime-store.d.ts.map +1 -0
  408. package/dist/scanners/store/runtime-store.js +91 -0
  409. package/dist/scanners/store/runtime-store.js.map +1 -0
  410. package/dist/scanners/store/shared-artifact-store.d.ts +31 -0
  411. package/dist/scanners/store/shared-artifact-store.d.ts.map +1 -0
  412. package/dist/scanners/store/shared-artifact-store.js +89 -0
  413. package/dist/scanners/store/shared-artifact-store.js.map +1 -0
  414. package/dist/scanners/store/signal-store.d.ts +36 -0
  415. package/dist/scanners/store/signal-store.d.ts.map +1 -0
  416. package/dist/scanners/store/signal-store.js +135 -0
  417. package/dist/scanners/store/signal-store.js.map +1 -0
  418. package/dist/scanners/types.d.ts +115 -0
  419. package/dist/scanners/types.d.ts.map +1 -0
  420. package/dist/scanners/types.js +3 -0
  421. package/dist/scanners/types.js.map +1 -0
  422. package/dist/scripts/run-dsl-standalone-live.d.ts +27 -0
  423. package/dist/scripts/run-dsl-standalone-live.d.ts.map +1 -0
  424. package/dist/scripts/run-dsl-standalone-live.js +207 -0
  425. package/dist/scripts/run-dsl-standalone-live.js.map +1 -0
  426. package/dist/scripts/run-dsl-standalone-mock.d.ts +13 -0
  427. package/dist/scripts/run-dsl-standalone-mock.d.ts.map +1 -0
  428. package/dist/scripts/run-dsl-standalone-mock.js +255 -0
  429. package/dist/scripts/run-dsl-standalone-mock.js.map +1 -0
  430. package/dist/senpi/client.d.ts +70 -0
  431. package/dist/senpi/client.d.ts.map +1 -0
  432. package/dist/senpi/client.js +482 -0
  433. package/dist/senpi/client.js.map +1 -0
  434. package/dist/senpi/constants.d.ts +7 -0
  435. package/dist/senpi/constants.d.ts.map +1 -0
  436. package/dist/senpi/constants.js +7 -0
  437. package/dist/senpi/constants.js.map +1 -0
  438. package/dist/senpi/index.d.ts +3 -0
  439. package/dist/senpi/index.d.ts.map +1 -0
  440. package/dist/senpi/index.js +2 -0
  441. package/dist/senpi/index.js.map +1 -0
  442. package/dist/senpi/types.d.ts +132 -0
  443. package/dist/senpi/types.d.ts.map +1 -0
  444. package/dist/senpi/types.js +3 -0
  445. package/dist/senpi/types.js.map +1 -0
  446. package/dist/state/index.d.ts +3 -0
  447. package/dist/state/index.d.ts.map +1 -0
  448. package/dist/state/index.js +3 -0
  449. package/dist/state/index.js.map +1 -0
  450. package/dist/state/paths.d.ts +8 -0
  451. package/dist/state/paths.d.ts.map +1 -0
  452. package/dist/state/paths.js +19 -0
  453. package/dist/state/paths.js.map +1 -0
  454. package/dist/state/state-manager.d.ts +56 -0
  455. package/dist/state/state-manager.d.ts.map +1 -0
  456. package/dist/state/state-manager.js +213 -0
  457. package/dist/state/state-manager.js.map +1 -0
  458. package/dist/strategy/index.d.ts +2 -0
  459. package/dist/strategy/index.d.ts.map +1 -0
  460. package/dist/strategy/index.js +2 -0
  461. package/dist/strategy/index.js.map +1 -0
  462. package/dist/strategy/strategy-state.d.ts +47 -0
  463. package/dist/strategy/strategy-state.d.ts.map +1 -0
  464. package/dist/strategy/strategy-state.js +179 -0
  465. package/dist/strategy/strategy-state.js.map +1 -0
  466. package/dist/types/action.d.ts +15 -0
  467. package/dist/types/action.d.ts.map +1 -0
  468. package/dist/types/action.js +2 -0
  469. package/dist/types/action.js.map +1 -0
  470. package/dist/types/dsl/index.d.ts +156 -0
  471. package/dist/types/dsl/index.d.ts.map +1 -0
  472. package/dist/types/dsl/index.js +5 -0
  473. package/dist/types/dsl/index.js.map +1 -0
  474. package/dist/types/event-bus.d.ts +11 -0
  475. package/dist/types/event-bus.d.ts.map +1 -0
  476. package/dist/types/event-bus.js +6 -0
  477. package/dist/types/event-bus.js.map +1 -0
  478. package/dist/types/hooks.d.ts +27 -0
  479. package/dist/types/hooks.d.ts.map +1 -0
  480. package/dist/types/hooks.js +15 -0
  481. package/dist/types/hooks.js.map +1 -0
  482. package/dist/types/index.d.ts +6 -0
  483. package/dist/types/index.d.ts.map +1 -0
  484. package/dist/types/index.js +6 -0
  485. package/dist/types/index.js.map +1 -0
  486. package/dist/types/notification.d.ts +4 -0
  487. package/dist/types/notification.d.ts.map +1 -0
  488. package/dist/types/notification.js +3 -0
  489. package/dist/types/notification.js.map +1 -0
  490. package/dist/types/runtime.d.ts +16 -0
  491. package/dist/types/runtime.d.ts.map +1 -0
  492. package/dist/types/runtime.js +2 -0
  493. package/dist/types/runtime.js.map +1 -0
  494. package/dist/types/scanner.d.ts +59 -0
  495. package/dist/types/scanner.d.ts.map +1 -0
  496. package/dist/types/scanner.js +13 -0
  497. package/dist/types/scanner.js.map +1 -0
  498. package/dist/types/strategy.d.ts +97 -0
  499. package/dist/types/strategy.d.ts.map +1 -0
  500. package/dist/types/strategy.js +2 -0
  501. package/dist/types/strategy.js.map +1 -0
  502. package/dist/utils/logger/dsl.d.ts +8 -0
  503. package/dist/utils/logger/dsl.d.ts.map +1 -0
  504. package/dist/utils/logger/dsl.js +7 -0
  505. package/dist/utils/logger/dsl.js.map +1 -0
  506. package/dist/utils/logger.d.ts +13 -0
  507. package/dist/utils/logger.d.ts.map +1 -0
  508. package/dist/utils/logger.js +65 -0
  509. package/dist/utils/logger.js.map +1 -0
  510. package/dist/utils/response.d.ts +14 -0
  511. package/dist/utils/response.d.ts.map +1 -0
  512. package/dist/utils/response.js +44 -0
  513. package/dist/utils/response.js.map +1 -0
  514. package/dist/version.d.ts +2 -0
  515. package/dist/version.d.ts.map +1 -0
  516. package/dist/version.js +2 -0
  517. package/dist/version.js.map +1 -0
  518. package/examples/.env.example +15 -0
  519. package/examples/README.md +75 -0
  520. package/examples/scanners-consumer-quickstart.mjs +134 -0
  521. package/examples/scanners-emerging-movers-v4.mjs +285 -0
  522. package/examples/scanners-live-mcp.mjs +208 -0
  523. package/examples/scanners-multi-strategy.mjs +165 -0
  524. package/examples/scanners-scheduled-events.mjs +95 -0
  525. package/examples/scanners-senpi-provider-client.mjs +182 -0
  526. package/examples/scanners-single-strategy.mjs +198 -0
  527. package/examples/strategies/README.md +45 -0
  528. package/examples/strategies/dsl-showcase.yaml +62 -0
  529. package/examples/strategies/fox.yaml +55 -0
  530. package/examples/strategies/minimal.yaml +41 -0
  531. package/examples/strategies/viper.yaml +63 -0
  532. package/examples/strategies/wolf.yaml +60 -0
  533. package/examples/yamls/sample-with-dsl-and-emerging-movers.yaml +111 -0
  534. package/openclaw.plugin.json +15 -0
  535. package/package.json +52 -0
@@ -0,0 +1,78 @@
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 { createLogger } from "../utils/logger.js";
9
+ const logger = createLogger("[senpi-core][actions]");
10
+ /**
11
+ * For each entry in config.actions, look up factory by action_type, build ActionConfig,
12
+ * use shared RuntimeContext (built once per trading strategy and reused), instantiate action. Returns actions
13
+ * and runActionsForSignal so the runtime can process signals serially (one at a time) to avoid slot races.
14
+ * When options.runtimeContext is provided (e.g. by Runtime), it is reused for all action factories.
15
+ */
16
+ export function createActions(config, options) {
17
+ logger.debug("createActions begin", { actionsCount: config.actions?.length ?? 0 });
18
+ const context = options.runtimeContext ??
19
+ createRuntimeContext(mapStrategiesToConfig(config), {
20
+ senpi: options.senpi,
21
+ hookSystem: options.hookSystem,
22
+ llmDecision: options.llmDecision,
23
+ contextBuilder: options.contextBuilder,
24
+ riskGuard: options.riskGuard,
25
+ notifications: options.notifications,
26
+ stateManager: options.stateManager,
27
+ });
28
+ const actions = [];
29
+ const actionList = config.actions ?? [];
30
+ for (const entry of actionList) {
31
+ const factory = ActionRegistry.get(entry.action_type);
32
+ if (!factory) {
33
+ throw new Error(`Unknown action_type: ${entry.action_type}`);
34
+ }
35
+ const config = {
36
+ name: entry.name,
37
+ action_type: entry.action_type,
38
+ decision_mode: entry.decision_mode ?? "none",
39
+ decision_model: entry.decision_model,
40
+ scanners: entry.scanners,
41
+ min_confidence: entry.min_confidence,
42
+ context: entry.context,
43
+ decision_prompt: entry.decision_prompt,
44
+ params: entry.params,
45
+ };
46
+ const action = factory(config, context);
47
+ const actionWithManifest = action;
48
+ const manifest = actionWithManifest?.manifest?.eventsConsumed ?? [HOOK_EVENT.ON_SIGNAL_DETECTED];
49
+ actions.push({
50
+ action,
51
+ name: entry.name,
52
+ eventsConsumed: manifest,
53
+ });
54
+ logger.debug("createActions: action registered", { name: entry.name, action_type: entry.action_type });
55
+ }
56
+ logger.debug("createActions complete", { actionsCount: actions.length });
57
+ function runActionsForSignal(event) {
58
+ const scanPayload = event?.data;
59
+ const scannerId = scanPayload?.scanResult?.scannerId;
60
+ logger.debug("runActionsForSignal begin", { scannerId, tradingStrategyName: event?.tradingStrategyName });
61
+ const promises = [];
62
+ for (const { action } of actions) {
63
+ const cfg = action.config;
64
+ const scanners = cfg?.scanners;
65
+ if (Array.isArray(scanners) && scanners.length > 0) {
66
+ if (scannerId == null || !scanners.includes(scannerId))
67
+ continue;
68
+ }
69
+ promises.push(Promise.resolve(action.handle(event)));
70
+ }
71
+ return Promise.all(promises).then(() => {
72
+ logger.debug("runActionsForSignal complete", { scannerId, actionsInvoked: promises.length });
73
+ return undefined;
74
+ });
75
+ }
76
+ return { actions, runActionsForSignal };
77
+ }
78
+ //# 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,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,MAAM,GAAG,YAAY,CAAC,uBAAuB,CAAC,CAAC;AAmBrD;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,MAA6B,EAAE,OAA6B;IACxF,MAAM,CAAC,KAAK,CAAC,qBAAqB,EAAE,EAAE,YAAY,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;IACnF,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;SACnC,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,WAA8B,CAAC,CAAC;QACzE,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;QACH,MAAM,CAAC,KAAK,CAAC,kCAAkC,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;IACzG,CAAC;IACD,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,EAAE,YAAY,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAEzE,SAAS,mBAAmB,CAAC,KAAgB;QAC3C,MAAM,WAAW,GAAG,KAAK,EAAE,IAA2D,CAAC;QACvF,MAAM,SAAS,GAAG,WAAW,EAAE,UAAU,EAAE,SAAS,CAAC;QACrD,MAAM,CAAC,KAAK,CAAC,2BAA2B,EAAE,EAAE,SAAS,EAAE,mBAAmB,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,CAAC;QAC1G,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;YACrC,MAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YAC7F,OAAO,SAAS,CAAC;QACnB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC;AAC1C,CAAC"}
@@ -0,0 +1,33 @@
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
+ export interface GetUsedSlotsByStrategy {
12
+ getUsedSlotsByStrategy(addresses: string[]): Record<string, number>;
13
+ }
14
+ /**
15
+ * Build a Map of address → StrategyState for RuntimeContext.
16
+ * Each entry is a live StrategyStateImpl backed by SenpiClient.
17
+ */
18
+ export declare function createStrategyStatesMap(strategiesMap: Map<string, StrategyConfig>, stateManager: GetUsedSlotsByStrategy, senpi: SenpiClient): Map<string, StrategyState>;
19
+ export interface CreateRuntimeContextDeps {
20
+ senpi: SenpiClient;
21
+ hookSystem: HookSystem;
22
+ llmDecision: LlmDecision;
23
+ contextBuilder: ContextBuilder;
24
+ riskGuard: RiskGuard;
25
+ notifications: NotificationService;
26
+ stateManager: GetUsedSlotsByStrategy;
27
+ scannerModule?: ScannerRuntimeModule;
28
+ }
29
+ /**
30
+ * Build RuntimeContext from strategies map and deps. Used by createActions to pass into action factories.
31
+ */
32
+ export declare function createRuntimeContext(strategiesMap: Map<string, StrategyConfig>, deps: CreateRuntimeContextDeps): RuntimeContext;
33
+ //# 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;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;CACtC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,EAC1C,IAAI,EAAE,wBAAwB,GAC7B,cAAc,CAYhB"}
@@ -0,0 +1,32 @@
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
+ };
31
+ }
32
+ //# 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;AASH,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;AAaD;;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;KAClC,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,18 @@
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
+ * Load trading strategy from a file path or YAML string.
12
+ * - If fromPath is true, pathOrContent is a file path.
13
+ * - Otherwise pathOrContent is the YAML string.
14
+ * After parse, env vars are resolved and the result is validated with the Zod schema.
15
+ * Throws with path-based error messages on validation failure.
16
+ */
17
+ export declare function loadTradingStrategy(pathOrContent: string, options?: LoadTradingStrategyOptions): Promise<TradingStrategyConfig>;
18
+ //# 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;AAcD;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACvC,aAAa,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE,0BAA0B,GACnC,OAAO,CAAC,qBAAqB,CAAC,CAuBhC"}
@@ -0,0 +1,51 @@
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 { readFile } from "node:fs/promises";
7
+ import { parse } from "yaml";
8
+ import { tradingStrategyConfigSchema } from "./trading-strategy-schema.js";
9
+ import { resolveEnvInObject } from "./env-resolve.js";
10
+ /**
11
+ * Format ZodError into a readable, path-based message.
12
+ */
13
+ function formatZodError(message, issues) {
14
+ if (issues.length === 0)
15
+ return message;
16
+ const lines = issues.map((i) => {
17
+ const path = i.path.length > 0 ? i.path.join(".") : "root";
18
+ return ` ${path}: ${i.message}`;
19
+ });
20
+ return `${message}\n${lines.join("\n")}`;
21
+ }
22
+ /**
23
+ * Load trading strategy from a file path or YAML string.
24
+ * - If fromPath is true, pathOrContent is a file path.
25
+ * - Otherwise pathOrContent is the YAML string.
26
+ * After parse, env vars are resolved and the result is validated with the Zod schema.
27
+ * Throws with path-based error messages on validation failure.
28
+ */
29
+ export async function loadTradingStrategy(pathOrContent, options) {
30
+ const fromPath = options?.fromPath === true;
31
+ let raw;
32
+ if (fromPath) {
33
+ const content = await readFile(pathOrContent, "utf-8");
34
+ raw = parse(content);
35
+ }
36
+ else {
37
+ raw = parse(pathOrContent);
38
+ }
39
+ if (raw === null || raw === undefined || typeof raw !== "object") {
40
+ throw new Error("Trading strategy YAML must parse to an object");
41
+ }
42
+ const resolved = resolveEnvInObject(raw);
43
+ const result = tradingStrategyConfigSchema.safeParse(resolved);
44
+ if (result.success) {
45
+ return result.data;
46
+ }
47
+ const err = result.error;
48
+ const message = formatZodError("Trading strategy validation failed:", err.issues.map((issue) => ({ path: issue.path, message: issue.message })));
49
+ throw new Error(message);
50
+ }
51
+ //# sourceMappingURL=load-trading-strategy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-trading-strategy.js","sourceRoot":"","sources":["../../src/runtime/load-trading-strategy.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,2BAA2B,EAA8B,MAAM,8BAA8B,CAAC;AACvG,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAMtD;;GAEG;AACH,SAAS,cAAc,CAAC,OAAe,EAAE,MAA8D;IACrG,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC;IACxC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAC7B,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAC3D,OAAO,KAAK,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;IACnC,CAAC,CAAC,CAAC;IACH,OAAO,GAAG,OAAO,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AAC3C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,aAAqB,EACrB,OAAoC;IAEpC,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,KAAK,IAAI,CAAC;IAC5C,IAAI,GAAY,CAAC;IACjB,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QACvD,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC;SAAM,CAAC;QACN,GAAG,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC;IAC7B,CAAC;IACD,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QACjE,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACnE,CAAC;IACD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,GAAG,CAA4B,CAAC;IACpE,MAAM,MAAM,GAAG,2BAA2B,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC/D,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,MAAM,CAAC,IAAI,CAAC;IACrB,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC;IACzB,MAAM,OAAO,GAAG,cAAc,CAC5B,qCAAqC,EACrC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAA2B,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CACjG,CAAC;IACF,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Map trading strategy exit (dsl_presets or dsl) to DSL plugin ExitBlockConfig.
3
+ * Prefers exit.dsl_presets; falls back to exit.dsl. Passes engine and interval_seconds.
4
+ */
5
+ import type { ExitBlockConfig } from "../dsl/config/index.js";
6
+ import type { TradingStrategyExit } from "./trading-strategy-schema.js";
7
+ /**
8
+ * Adapt playbook exit to ExitBlockConfig for parseDslPluginConfig.
9
+ * Uses exit.dsl_presets if present, else exit.dsl. Passes exit.interval_seconds and exit.engine.
10
+ */
11
+ export declare function mapTradingStrategyExitToDslConfig(exit: TradingStrategyExit | undefined): ExitBlockConfig;
12
+ //# sourceMappingURL=map-exit-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map-exit-config.d.ts","sourceRoot":"","sources":["../../src/runtime/map-exit-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AA0FxE;;;GAGG;AACH,wBAAgB,iCAAiC,CAAC,IAAI,EAAE,mBAAmB,GAAG,SAAS,GAAG,eAAe,CAoBxG"}