@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 @@
1
+ {"version":3,"file":"context-builder.js","sourceRoot":"","sources":["../../src/context/context-builder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAEzE,+EAA+E;AAE/E,MAAM,OAAO,qBAAqB;IACxB,SAAS,GAAG,IAAI,GAAG,EAA2B,CAAC;IAEvD,QAAQ,CAAC,QAAyB;QAChC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,KAAK,CACT,OAAuB,EACvB,OAA+B;QAE/B,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAChD,IAAI,CAAC,QAAQ;gBAAE,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAU,CAAC;YACnD,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAU,CAAC;QACxE,CAAC,CAAC,CACH,CAAC;QACF,OAAO,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;CACF;AAED,+EAA+E;AAE/E,MAAM,UAAU,oBAAoB;IAClC,MAAM,OAAO,GAAG,IAAI,qBAAqB,EAAE,CAAC;IAC5C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IACjC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IACnC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IACjC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IACrC,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,5 @@
1
+ export type { ContextEntry, ContextProviderRequest, ContextProvider, ContextBuilder, } from "./types.js";
2
+ export { RuntimeContextBuilder, createContextBuilder } from "./context-builder.js";
3
+ export { interpolatePrompt } from "./interpolate.js";
4
+ export { signalProvider, strategyProvider } from "./providers/index.js";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/context/index.ts"],"names":[],"mappings":"AAEA,YAAY,EACV,YAAY,EACZ,sBAAsB,EACtB,eAAe,EACf,cAAc,GACf,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,5 @@
1
+ // ─── Context Module ─────────────────────────────────────────────────────────
2
+ export { RuntimeContextBuilder, createContextBuilder } from "./context-builder.js";
3
+ export { interpolatePrompt } from "./interpolate.js";
4
+ export { signalProvider, strategyProvider } from "./providers/index.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/context/index.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAS/E,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Replace {{variable}} placeholders in a prompt template with values from context.
3
+ * Unresolved variables (no matching key or null value) are left as-is.
4
+ */
5
+ export declare function interpolatePrompt(template: string, context: Record<string, unknown>): string;
6
+ //# sourceMappingURL=interpolate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interpolate.d.ts","sourceRoot":"","sources":["../../src/context/interpolate.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,MAAM,CASR"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Replace {{variable}} placeholders in a prompt template with values from context.
3
+ * Unresolved variables (no matching key or null value) are left as-is.
4
+ */
5
+ export function interpolatePrompt(template, context) {
6
+ return template.replace(/\{\{(\w+)\}\}/g, (match, key) => {
7
+ if (key in context && context[key] != null) {
8
+ return typeof context[key] === "string"
9
+ ? context[key]
10
+ : JSON.stringify(context[key], null, 2);
11
+ }
12
+ return match;
13
+ });
14
+ }
15
+ //# sourceMappingURL=interpolate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interpolate.js","sourceRoot":"","sources":["../../src/context/interpolate.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,QAAgB,EAChB,OAAgC;IAEhC,OAAO,QAAQ,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,KAAK,EAAE,GAAW,EAAE,EAAE;QAC/D,IAAI,GAAG,IAAI,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;YAC3C,OAAO,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,QAAQ;gBACrC,CAAC,CAAE,OAAO,CAAC,GAAG,CAAY;gBAC1B,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,42 @@
1
+ import type { ContextProvider } from "../types.js";
2
+ /** Asset-level trend direction. */
3
+ export declare enum AssetTrend {
4
+ UP = "UP",
5
+ DOWN = "DOWN",
6
+ NEUTRAL = "NEUTRAL"
7
+ }
8
+ /** Trend classification for one asset. */
9
+ export interface AssetTrendResult {
10
+ asset: string;
11
+ assetTrend: AssetTrend;
12
+ trendStrength: number;
13
+ timeframe: string;
14
+ }
15
+ /**
16
+ * Computes trend direction from raw OHLCV candle data.
17
+ *
18
+ * Uses EMA 8/21 crossover and price-vs-EMA position to determine direction.
19
+ * Returns trend classification with strength (0-1).
20
+ */
21
+ export declare function computeTrend(candles: Array<{
22
+ close: number;
23
+ high: number;
24
+ low: number;
25
+ }>, emaFast?: number, emaSlow?: number): {
26
+ trend: AssetTrend;
27
+ strength: number;
28
+ };
29
+ /**
30
+ * Asset trend context provider.
31
+ *
32
+ * Extracts the signal asset from the triggering event, fetches 1h candle
33
+ * data via the Senpi MCP client, and computes the asset's local trend
34
+ * direction using EMA crossover analysis.
35
+ *
36
+ * entry.value is ignored — this provider always analyzes the signal's asset.
37
+ *
38
+ * Returns null if candle data cannot be fetched or the signal asset
39
+ * cannot be determined.
40
+ */
41
+ export declare const assetTrendProvider: ContextProvider;
42
+ //# sourceMappingURL=asset-trend.provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asset-trend.provider.d.ts","sourceRoot":"","sources":["../../../src/context/providers/asset-trend.provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EAGhB,MAAM,aAAa,CAAC;AAIrB,mCAAmC;AACnC,oBAAY,UAAU;IACpB,EAAE,OAAO;IACT,IAAI,SAAS;IACb,OAAO,YAAY;CACpB;AAED,0CAA0C;AAC1C,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,UAAU,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,EAC5D,OAAO,SAAI,EACX,OAAO,SAAK,GACX;IAAE,KAAK,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAkCzC;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,kBAAkB,EAAE,eA2ChC,CAAC"}
@@ -0,0 +1,94 @@
1
+ import { computeEma } from "../../scanners/implementations/indicators.js";
2
+ /** Asset-level trend direction. */
3
+ export var AssetTrend;
4
+ (function (AssetTrend) {
5
+ AssetTrend["UP"] = "UP";
6
+ AssetTrend["DOWN"] = "DOWN";
7
+ AssetTrend["NEUTRAL"] = "NEUTRAL";
8
+ })(AssetTrend || (AssetTrend = {}));
9
+ /**
10
+ * Computes trend direction from raw OHLCV candle data.
11
+ *
12
+ * Uses EMA 8/21 crossover and price-vs-EMA position to determine direction.
13
+ * Returns trend classification with strength (0-1).
14
+ */
15
+ export function computeTrend(candles, emaFast = 8, emaSlow = 21) {
16
+ if (candles.length < emaSlow + 1) {
17
+ return { trend: AssetTrend.NEUTRAL, strength: 0 };
18
+ }
19
+ const closes = candles.map((c) => c.close);
20
+ const emaF = computeEma(closes, emaFast);
21
+ const emaS = computeEma(closes, emaSlow);
22
+ const lastFast = emaF[emaF.length - 1];
23
+ const lastSlow = emaS[emaS.length - 1];
24
+ const lastClose = closes[closes.length - 1];
25
+ let score = 0;
26
+ // EMA crossover
27
+ if (lastFast > lastSlow)
28
+ score += 0.4;
29
+ else if (lastFast < lastSlow)
30
+ score -= 0.4;
31
+ // Price above/below slow EMA
32
+ if (lastClose > lastSlow)
33
+ score += 0.3;
34
+ else if (lastClose < lastSlow)
35
+ score -= 0.3;
36
+ // EMA spread magnitude (normalized by price)
37
+ const spread = Math.abs(lastFast - lastSlow) / lastSlow;
38
+ score += Math.sign(lastFast - lastSlow) * Math.min(spread * 10, 0.3);
39
+ const clamped = Math.max(-1, Math.min(1, score));
40
+ const strength = Math.abs(clamped);
41
+ const trend = clamped > 0.15 ? AssetTrend.UP : clamped < -0.15 ? AssetTrend.DOWN : AssetTrend.NEUTRAL;
42
+ return { trend, strength };
43
+ }
44
+ /**
45
+ * Asset trend context provider.
46
+ *
47
+ * Extracts the signal asset from the triggering event, fetches 1h candle
48
+ * data via the Senpi MCP client, and computes the asset's local trend
49
+ * direction using EMA crossover analysis.
50
+ *
51
+ * entry.value is ignored — this provider always analyzes the signal's asset.
52
+ *
53
+ * Returns null if candle data cannot be fetched or the signal asset
54
+ * cannot be determined.
55
+ */
56
+ export const assetTrendProvider = {
57
+ type: "asset-trend",
58
+ async resolve(request, _entry) {
59
+ // Extract signal asset from the triggering event
60
+ const scanResult = request.event.data?.scanResult;
61
+ const signal = scanResult?.signals?.[0];
62
+ if (!signal?.asset)
63
+ return null;
64
+ const asset = signal.asset;
65
+ // Fetch candle data via scanner module's underlying providers
66
+ // or from the event's scan result metadata
67
+ if (!request.readSharedArtifact) {
68
+ // Without artifact access, try to compute from event metadata
69
+ return null;
70
+ }
71
+ // The asset-trend provider needs candle data. Since context providers
72
+ // don't have direct access to candle providers, we return the asset
73
+ // information for the LLM to consider along with the signal metadata.
74
+ // The actual trend computation happens when candle data is available
75
+ // through the scanner module's signal metadata.
76
+ //
77
+ // If the signal has marketRegime metadata, use it as a proxy.
78
+ const meta = signal.meta;
79
+ if (meta?.marketRegime) {
80
+ return {
81
+ asset,
82
+ marketRegime: meta.marketRegime,
83
+ signalDirection: signal.direction,
84
+ signalScore: signal.score,
85
+ };
86
+ }
87
+ return {
88
+ asset,
89
+ signalDirection: signal.direction,
90
+ signalScore: signal.score,
91
+ };
92
+ },
93
+ };
94
+ //# sourceMappingURL=asset-trend.provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asset-trend.provider.js","sourceRoot":"","sources":["../../../src/context/providers/asset-trend.provider.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,UAAU,EAAE,MAAM,8CAA8C,CAAC;AAE1E,mCAAmC;AACnC,MAAM,CAAN,IAAY,UAIX;AAJD,WAAY,UAAU;IACpB,uBAAS,CAAA;IACT,2BAAa,CAAA;IACb,iCAAmB,CAAA;AACrB,CAAC,EAJW,UAAU,KAAV,UAAU,QAIrB;AAUD;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAC1B,OAA4D,EAC5D,OAAO,GAAG,CAAC,EACX,OAAO,GAAG,EAAE;IAEZ,IAAI,OAAO,CAAC,MAAM,GAAG,OAAO,GAAG,CAAC,EAAE,CAAC;QACjC,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IACpD,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEzC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACvC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAE5C,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,gBAAgB;IAChB,IAAI,QAAQ,GAAG,QAAQ;QAAE,KAAK,IAAI,GAAG,CAAC;SACjC,IAAI,QAAQ,GAAG,QAAQ;QAAE,KAAK,IAAI,GAAG,CAAC;IAE3C,6BAA6B;IAC7B,IAAI,SAAS,GAAG,QAAQ;QAAE,KAAK,IAAI,GAAG,CAAC;SAClC,IAAI,SAAS,GAAG,QAAQ;QAAE,KAAK,IAAI,GAAG,CAAC;IAE5C,6CAA6C;IAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC,GAAG,QAAQ,CAAC;IACxD,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC;IAErE,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAEnC,MAAM,KAAK,GACT,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC;IAE1F,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AAC7B,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAoB;IACjD,IAAI,EAAE,aAAa;IAEnB,KAAK,CAAC,OAAO,CAAC,OAA+B,EAAE,MAAoB;QACjE,iDAAiD;QACjD,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,UAE1B,CAAC;QACd,MAAM,MAAM,GAAG,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC,CAAuB,CAAC;QAC9D,IAAI,CAAC,MAAM,EAAE,KAAK;YAAE,OAAO,IAAI,CAAC;QAEhC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAE3B,8DAA8D;QAC9D,2CAA2C;QAC3C,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC;YAChC,8DAA8D;YAC9D,OAAO,IAAI,CAAC;QACd,CAAC;QAED,sEAAsE;QACtE,oEAAoE;QACpE,sEAAsE;QACtE,qEAAqE;QACrE,gDAAgD;QAChD,EAAE;QACF,8DAA8D;QAC9D,MAAM,IAAI,GAAG,MAAM,CAAC,IAA2C,CAAC;QAChE,IAAI,IAAI,EAAE,YAAY,EAAE,CAAC;YACvB,OAAO;gBACL,KAAK;gBACL,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,eAAe,EAAE,MAAM,CAAC,SAAS;gBACjC,WAAW,EAAE,MAAM,CAAC,KAAK;aAC1B,CAAC;QACJ,CAAC;QAED,OAAO;YACL,KAAK;YACL,eAAe,EAAE,MAAM,CAAC,SAAS;YACjC,WAAW,EAAE,MAAM,CAAC,KAAK;SAC1B,CAAC;IACJ,CAAC;CACF,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { signalProvider } from "./signal.provider.js";
2
+ export { strategyProvider } from "./strategy.provider.js";
3
+ export { regimeProvider } from "./regime.provider.js";
4
+ export { assetTrendProvider, AssetTrend, type AssetTrendResult } from "./asset-trend.provider.js";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/context/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,KAAK,gBAAgB,EAAE,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { signalProvider } from "./signal.provider.js";
2
+ export { strategyProvider } from "./strategy.provider.js";
3
+ export { regimeProvider } from "./regime.provider.js";
4
+ export { assetTrendProvider, AssetTrend } from "./asset-trend.provider.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/context/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAyB,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { ContextProvider } from "../types.js";
2
+ /**
3
+ * Market regime context provider.
4
+ *
5
+ * Loads the `market-regime` shared artifact published by the market-regime
6
+ * scanner. Returns the current regime classification for use in action
7
+ * decision prompts and directional gating.
8
+ *
9
+ * entry.value is ignored — this provider always returns the current regime.
10
+ *
11
+ * Requires `readSharedArtifact` on the request. Returns null if unavailable.
12
+ */
13
+ export declare const regimeProvider: ContextProvider;
14
+ //# sourceMappingURL=regime.provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regime.provider.d.ts","sourceRoot":"","sources":["../../../src/context/providers/regime.provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EAGhB,MAAM,aAAa,CAAC;AAGrB;;;;;;;;;;GAUG;AACH,eAAO,MAAM,cAAc,EAAE,eAoB5B,CAAC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Market regime context provider.
3
+ *
4
+ * Loads the `market-regime` shared artifact published by the market-regime
5
+ * scanner. Returns the current regime classification for use in action
6
+ * decision prompts and directional gating.
7
+ *
8
+ * entry.value is ignored — this provider always returns the current regime.
9
+ *
10
+ * Requires `readSharedArtifact` on the request. Returns null if unavailable.
11
+ */
12
+ export const regimeProvider = {
13
+ type: "regime",
14
+ async resolve(request, _entry) {
15
+ if (!request.readSharedArtifact || !request.address)
16
+ return null;
17
+ const artifact = await request.readSharedArtifact(request.address, "market-regime");
18
+ if (!artifact)
19
+ return null;
20
+ return {
21
+ regime: artifact.regime,
22
+ confidence: artifact.confidence,
23
+ btcBias: artifact.btcBias,
24
+ ethBias: artifact.ethBias,
25
+ timestamp: artifact.timestamp,
26
+ };
27
+ },
28
+ };
29
+ //# sourceMappingURL=regime.provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regime.provider.js","sourceRoot":"","sources":["../../../src/context/providers/regime.provider.ts"],"names":[],"mappings":"AAOA;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,cAAc,GAAoB;IAC7C,IAAI,EAAE,QAAQ;IAEd,KAAK,CAAC,OAAO,CAAC,OAA+B,EAAE,MAAoB;QACjE,IAAI,CAAC,OAAO,CAAC,kBAAkB,IAAI,CAAC,OAAO,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAEjE,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,kBAAkB,CAC/C,OAAO,CAAC,OAAO,EACf,eAAe,CAChB,CAAC;QACF,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC;QAE3B,OAAO;YACL,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,SAAS,EAAE,QAAQ,CAAC,SAAS;SAC9B,CAAC;IACJ,CAAC;CACF,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { ContextProvider } from "../types.js";
2
+ /**
3
+ * Signal context provider.
4
+ * Resolves scanner signals by scanner name via ScannerRuntimeModule.
5
+ *
6
+ * entry.value = scanner name (e.g. "emerging_movers", "oi_tracker")
7
+ * Uses scannerModule.querySignals() to get any scanner's latest signals.
8
+ * Falls back to event's scanResult when scannerModule is not available.
9
+ */
10
+ export declare const signalProvider: ContextProvider;
11
+ //# sourceMappingURL=signal.provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signal.provider.d.ts","sourceRoot":"","sources":["../../../src/context/providers/signal.provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAwC,MAAM,aAAa,CAAC;AAGzF;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc,EAAE,eAkB5B,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Signal context provider.
3
+ * Resolves scanner signals by scanner name via ScannerRuntimeModule.
4
+ *
5
+ * entry.value = scanner name (e.g. "emerging_movers", "oi_tracker")
6
+ * Uses scannerModule.querySignals() to get any scanner's latest signals.
7
+ * Falls back to event's scanResult when scannerModule is not available.
8
+ */
9
+ export const signalProvider = {
10
+ type: "signal",
11
+ async resolve(request, entry) {
12
+ // Prefer scannerModule for cross-scanner access
13
+ if (request.scannerModule) {
14
+ const signals = await request.scannerModule.querySignals({
15
+ scannerId: entry.value,
16
+ address: request.address,
17
+ });
18
+ return signals?.length ? signals : null;
19
+ }
20
+ // Fallback: extract from the triggering event's scanResult
21
+ const scanResult = request.event.data.scanResult;
22
+ if (!scanResult?.signals?.length)
23
+ return null;
24
+ return scanResult.signals;
25
+ },
26
+ };
27
+ //# sourceMappingURL=signal.provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signal.provider.js","sourceRoot":"","sources":["../../../src/context/providers/signal.provider.ts"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,cAAc,GAAoB;IAC7C,IAAI,EAAE,QAAQ;IAEd,KAAK,CAAC,OAAO,CAAC,OAA+B,EAAE,KAAmB;QAChE,gDAAgD;QAChD,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;YAC1B,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,YAAY,CAAC;gBACvD,SAAS,EAAE,KAAK,CAAC,KAAK;gBACtB,OAAO,EAAE,OAAO,CAAC,OAAO;aACzB,CAAC,CAAC;YACH,OAAO,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;QAC1C,CAAC;QAED,2DAA2D;QAC3D,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,UAA+C,CAAC;QACtF,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM;YAAE,OAAO,IAAI,CAAC;QAC9C,OAAO,UAAU,CAAC,OAAO,CAAC;IAC5B,CAAC;CACF,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { ContextProvider } from "../types.js";
2
+ /**
3
+ * Strategy context provider.
4
+ * Resolves strategy data slices from the live StrategyState.
5
+ *
6
+ * entry.value selects the data slice:
7
+ * "open_positions" → clearinghouse positions (fetched if needed)
8
+ * "clearinghouse" → account value, margin, unrealizedPnl, withdrawable
9
+ * "past_trades" → recent closed trades
10
+ * "open_orders" → open orders
11
+ * "details" → strategy details (name, status, PnL)
12
+ */
13
+ export declare const strategyProvider: ContextProvider;
14
+ //# sourceMappingURL=strategy.provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strategy.provider.d.ts","sourceRoot":"","sources":["../../../src/context/providers/strategy.provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAwC,MAAM,aAAa,CAAC;AAEzF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,gBAAgB,EAAE,eA4D9B,CAAC"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Strategy context provider.
3
+ * Resolves strategy data slices from the live StrategyState.
4
+ *
5
+ * entry.value selects the data slice:
6
+ * "open_positions" → clearinghouse positions (fetched if needed)
7
+ * "clearinghouse" → account value, margin, unrealizedPnl, withdrawable
8
+ * "past_trades" → recent closed trades
9
+ * "open_orders" → open orders
10
+ * "details" → strategy details (name, status, PnL)
11
+ */
12
+ export const strategyProvider = {
13
+ type: "strategy",
14
+ async resolve(request, entry) {
15
+ const state = request.strategyState;
16
+ if (!state)
17
+ return null;
18
+ switch (entry.value) {
19
+ case "open_positions": {
20
+ let positions = state.getOpenPositions();
21
+ if (!positions) {
22
+ const ch = await state.fetchClearinghouseState();
23
+ positions = ch?.positions;
24
+ }
25
+ return positions ?? null;
26
+ }
27
+ case "clearinghouse": {
28
+ let ch = state.getClearinghouseState();
29
+ if (!ch) {
30
+ ch = await state.fetchClearinghouseState();
31
+ }
32
+ if (!ch)
33
+ return null;
34
+ return {
35
+ accountValue: ch.accountValue,
36
+ totalMarginUsed: ch.totalMarginUsed,
37
+ totalUnrealizedPnl: ch.totalUnrealizedPnl,
38
+ totalNtlPos: ch.totalNtlPos,
39
+ withdrawable: ch.withdrawable,
40
+ };
41
+ }
42
+ case "past_trades": {
43
+ let trades = state.getPastTrades();
44
+ if (!trades) {
45
+ trades = await state.fetchPastTrades();
46
+ }
47
+ return trades ?? null;
48
+ }
49
+ case "open_orders": {
50
+ let orders = state.getOpenOrders();
51
+ if (!orders) {
52
+ orders = await state.fetchOpenOrders();
53
+ }
54
+ return orders ?? null;
55
+ }
56
+ case "details": {
57
+ let details = state.getDetails();
58
+ if (!details) {
59
+ details = await state.fetchDetails();
60
+ }
61
+ return details ?? null;
62
+ }
63
+ default:
64
+ return null;
65
+ }
66
+ },
67
+ };
68
+ //# sourceMappingURL=strategy.provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strategy.provider.js","sourceRoot":"","sources":["../../../src/context/providers/strategy.provider.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAoB;IAC/C,IAAI,EAAE,UAAU;IAEhB,KAAK,CAAC,OAAO,CAAC,OAA+B,EAAE,KAAmB;QAChE,MAAM,KAAK,GAAG,OAAO,CAAC,aAAa,CAAC;QACpC,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QAExB,QAAQ,KAAK,CAAC,KAAK,EAAE,CAAC;YACpB,KAAK,gBAAgB,CAAC,CAAC,CAAC;gBACtB,IAAI,SAAS,GAAG,KAAK,CAAC,gBAAgB,EAAE,CAAC;gBACzC,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,uBAAuB,EAAE,CAAC;oBACjD,SAAS,GAAG,EAAE,EAAE,SAAS,CAAC;gBAC5B,CAAC;gBACD,OAAO,SAAS,IAAI,IAAI,CAAC;YAC3B,CAAC;YAED,KAAK,eAAe,CAAC,CAAC,CAAC;gBACrB,IAAI,EAAE,GAAG,KAAK,CAAC,qBAAqB,EAAE,CAAC;gBACvC,IAAI,CAAC,EAAE,EAAE,CAAC;oBACR,EAAE,GAAG,MAAM,KAAK,CAAC,uBAAuB,EAAE,CAAC;gBAC7C,CAAC;gBACD,IAAI,CAAC,EAAE;oBAAE,OAAO,IAAI,CAAC;gBACrB,OAAO;oBACL,YAAY,EAAE,EAAE,CAAC,YAAY;oBAC7B,eAAe,EAAE,EAAE,CAAC,eAAe;oBACnC,kBAAkB,EAAE,EAAE,CAAC,kBAAkB;oBACzC,WAAW,EAAE,EAAE,CAAC,WAAW;oBAC3B,YAAY,EAAE,EAAE,CAAC,YAAY;iBAC9B,CAAC;YACJ,CAAC;YAED,KAAK,aAAa,CAAC,CAAC,CAAC;gBACnB,IAAI,MAAM,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC;gBACnC,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,MAAM,GAAG,MAAM,KAAK,CAAC,eAAe,EAAE,CAAC;gBACzC,CAAC;gBACD,OAAO,MAAM,IAAI,IAAI,CAAC;YACxB,CAAC;YAED,KAAK,aAAa,CAAC,CAAC,CAAC;gBACnB,IAAI,MAAM,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC;gBACnC,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,MAAM,GAAG,MAAM,KAAK,CAAC,eAAe,EAAE,CAAC;gBACzC,CAAC;gBACD,OAAO,MAAM,IAAI,IAAI,CAAC;YACxB,CAAC;YAED,KAAK,SAAS,CAAC,CAAC,CAAC;gBACf,IAAI,OAAO,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC;gBACjC,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,OAAO,GAAG,MAAM,KAAK,CAAC,YAAY,EAAE,CAAC;gBACvC,CAAC;gBACD,OAAO,OAAO,IAAI,IAAI,CAAC;YACzB,CAAC;YAED;gBACE,OAAO,IAAI,CAAC;QAChB,CAAC;IACH,CAAC;CACF,CAAC"}
@@ -0,0 +1,30 @@
1
+ import type { HookEvent } from "../types/hooks.js";
2
+ import type { StrategyState } from "../types/strategy.js";
3
+ import type { ScannerRuntimeModule } from "../scanners/runtime-module.js";
4
+ /** Single context entry from YAML — always an object with type + value. */
5
+ export interface ContextEntry {
6
+ type: string;
7
+ value: string;
8
+ }
9
+ /** Reads a shared artifact by key for the given strategy address. */
10
+ export type SharedArtifactReader = <T = unknown>(address: string, key: string) => Promise<T | null>;
11
+ /** Request passed to every context provider. */
12
+ export interface ContextProviderRequest {
13
+ event: HookEvent;
14
+ address?: string;
15
+ strategyState?: StrategyState;
16
+ scannerModule?: ScannerRuntimeModule;
17
+ /** Optional reader for scanner shared artifacts (e.g., market-regime). */
18
+ readSharedArtifact?: SharedArtifactReader;
19
+ }
20
+ /** A typed resolver that produces context data. */
21
+ export interface ContextProvider {
22
+ readonly type: string;
23
+ resolve(request: ContextProviderRequest, entry: ContextEntry): Promise<unknown>;
24
+ }
25
+ /** Builds combined context record from multiple providers. */
26
+ export interface ContextBuilder {
27
+ register(provider: ContextProvider): void;
28
+ build(entries: ContextEntry[], request: ContextProviderRequest): Promise<Record<string, unknown>>;
29
+ }
30
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/context/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAE1E,2EAA2E;AAC3E,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,qEAAqE;AACrE,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,GAAG,OAAO,EAC7C,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,KACR,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AAEvB,gDAAgD;AAChD,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,aAAa,CAAC,EAAE,oBAAoB,CAAC;IACrC,0EAA0E;IAC1E,kBAAkB,CAAC,EAAE,oBAAoB,CAAC;CAC3C;AAED,mDAAmD;AACnD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,OAAO,EAAE,sBAAsB,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACjF;AAED,8DAA8D;AAC9D,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI,CAAC;IAC1C,KAAK,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACnG"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/context/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Config parsing and validation from playbook exit block.
3
+ */
4
+ import type { DslPluginConfig } from "../../types/dsl/index.js";
5
+ export interface ExitBlockConfig {
6
+ engine?: string;
7
+ interval_seconds?: number;
8
+ preset?: string;
9
+ dsl_presets?: Record<string, RawPreset>;
10
+ }
11
+ interface RawPreset {
12
+ tiers?: RawTier[];
13
+ max_loss_pct?: number;
14
+ phase1?: RawPhase1;
15
+ phase2_trigger_tier?: number;
16
+ phase2?: RawPhase2;
17
+ }
18
+ interface RawTier {
19
+ trigger_pct?: number;
20
+ triggerPct?: number;
21
+ lock_pct?: number;
22
+ lockPct?: number;
23
+ breaches?: number;
24
+ retrace?: number;
25
+ }
26
+ interface RawPhase1 {
27
+ enabled?: boolean;
28
+ consecutiveBreachesRequired?: number;
29
+ consecutive_breaches_required?: number;
30
+ max_loss_pct?: number;
31
+ }
32
+ interface RawPhase2 {
33
+ enabled?: boolean;
34
+ retraceThreshold?: number;
35
+ retrace_threshold?: number;
36
+ consecutiveBreachesRequired?: number;
37
+ consecutive_breaches_required?: number;
38
+ tiers?: RawTier[];
39
+ }
40
+ export declare function parseDslPluginConfig(raw: ExitBlockConfig): DslPluginConfig;
41
+ export declare function getDefaultIntervalMs(): number;
42
+ export {};
43
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/dsl/config/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAA4B,MAAM,0BAA0B,CAAC;AAG1F,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;CACzC;AAED,UAAU,SAAS;IACjB,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB;AAED,UAAU,OAAO;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,SAAS;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,6BAA6B,CAAC,EAAE,MAAM,CAAC;IACvC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,UAAU,SAAS;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,6BAA6B,CAAC,EAAE,MAAM,CAAC;IACvC,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;CACnB;AAoFD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,eAAe,GAAG,eAAe,CA0B1E;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C"}
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Config parsing and validation from playbook exit block.
3
+ */
4
+ import { MIN_INTERVAL_SECONDS, DEFAULT_INTERVAL_MS } from "../../constants/dsl/index.js";
5
+ function parseTier(raw, defaultBreaches = 1) {
6
+ const triggerPct = Number(raw.trigger_pct ?? raw.triggerPct);
7
+ const lockPct = Number(raw.lock_pct ?? raw.lockPct);
8
+ const breaches = Number(raw.breaches) || defaultBreaches;
9
+ if (!(triggerPct > 0))
10
+ throw new Error("tier trigger_pct must be > 0");
11
+ if (!(lockPct > 0 && lockPct <= 100))
12
+ throw new Error("tier lock_pct must be in (0, 100]");
13
+ if (!(breaches >= 1))
14
+ throw new Error("tier breaches must be >= 1");
15
+ const retraceRaw = raw.retrace ?? raw.retraceFromHW;
16
+ const retraceFromHW = typeof retraceRaw === "number" && retraceRaw > 0 ? retraceRaw : undefined;
17
+ return { triggerPct, lockPct, breaches, ...(retraceFromHW != null && { retraceFromHW }) };
18
+ }
19
+ function parsePreset(name, raw) {
20
+ const hasPhase2Tiers = raw.phase2?.tiers && Array.isArray(raw.phase2.tiers) && raw.phase2.tiers.length > 0;
21
+ if (hasPhase2Tiers) {
22
+ return parsePresetPhaseFormat(name, raw);
23
+ }
24
+ const tiersRaw = raw.tiers;
25
+ if (!Array.isArray(tiersRaw) || tiersRaw.length === 0) {
26
+ throw new Error(`preset "${name}" must have tiers or phase2.tiers`);
27
+ }
28
+ const tiers = tiersRaw.map((t) => parseTier(t));
29
+ for (let i = 1; i < tiers.length; i++) {
30
+ if (tiers[i].triggerPct <= tiers[i - 1].triggerPct) {
31
+ throw new Error(`preset "${name}": tiers must be sorted ascending by trigger_pct`);
32
+ }
33
+ }
34
+ const maxLossPct = Number(raw.max_loss_pct);
35
+ if (!(maxLossPct > 0))
36
+ throw new Error(`preset "${name}": max_loss_pct must be > 0`);
37
+ return { tiers, maxLossPct };
38
+ }
39
+ function parsePresetPhaseFormat(name, raw) {
40
+ const phase2 = raw.phase2;
41
+ if (!phase2?.tiers || !Array.isArray(phase2.tiers) || phase2.tiers.length === 0) {
42
+ throw new Error(`preset "${name}": phase2.tiers must be a non-empty array`);
43
+ }
44
+ const phase2BreachesDefault = typeof phase2.consecutiveBreachesRequired === "number"
45
+ ? phase2.consecutiveBreachesRequired
46
+ : typeof phase2.consecutive_breaches_required === "number"
47
+ ? phase2.consecutive_breaches_required
48
+ : 1;
49
+ const tiers = phase2.tiers.map((t) => parseTier(t, phase2BreachesDefault));
50
+ for (let i = 1; i < tiers.length; i++) {
51
+ if (tiers[i].triggerPct <= tiers[i - 1].triggerPct) {
52
+ throw new Error(`preset "${name}": phase2.tiers must be sorted ascending by trigger_pct`);
53
+ }
54
+ }
55
+ const phase1 = raw.phase1;
56
+ const maxLossPct = Number(phase1?.max_loss_pct ?? raw.max_loss_pct);
57
+ if (!(maxLossPct > 0)) {
58
+ throw new Error(`preset "${name}": phase1.max_loss_pct or max_loss_pct must be > 0`);
59
+ }
60
+ const phase2TriggerTier = typeof raw.phase2_trigger_tier === "number" ? raw.phase2_trigger_tier : 0;
61
+ const phase2Retrace = typeof phase2.retraceThreshold === "number"
62
+ ? phase2.retraceThreshold
63
+ : typeof phase2.retrace_threshold === "number"
64
+ ? phase2.retrace_threshold
65
+ : undefined;
66
+ const phase1Breaches = typeof phase1?.consecutiveBreachesRequired === "number"
67
+ ? phase1.consecutiveBreachesRequired
68
+ : typeof phase1?.consecutive_breaches_required === "number"
69
+ ? phase1.consecutive_breaches_required
70
+ : undefined;
71
+ const phase2Breaches = phase2BreachesDefault;
72
+ return {
73
+ tiers,
74
+ maxLossPct,
75
+ phase2TriggerTier,
76
+ phase2RetraceFromHW: phase2Retrace,
77
+ phase1BreachesRequired: phase1Breaches,
78
+ phase2BreachesRequired: phase2Breaches,
79
+ };
80
+ }
81
+ export function parseDslPluginConfig(raw) {
82
+ const intervalSeconds = raw.interval_seconds ?? 30;
83
+ if (typeof intervalSeconds !== "number" ||
84
+ !Number.isInteger(intervalSeconds) ||
85
+ intervalSeconds < MIN_INTERVAL_SECONDS) {
86
+ throw new Error(`interval_seconds must be a positive integer >= ${MIN_INTERVAL_SECONDS}, got: ${String(raw.interval_seconds)}`);
87
+ }
88
+ const intervalMs = intervalSeconds * 1000;
89
+ const presetsRaw = raw.dsl_presets ?? {};
90
+ const presets = {};
91
+ for (const [name, p] of Object.entries(presetsRaw)) {
92
+ if (p && typeof p === "object")
93
+ presets[name] = parsePreset(name, p);
94
+ }
95
+ const presetKeys = Object.keys(presets);
96
+ if (presetKeys.length === 0) {
97
+ throw new Error("At least one dsl_presets entry is required");
98
+ }
99
+ const preset = typeof raw.preset === "string" ? raw.preset : presetKeys[0];
100
+ if (!presets[preset]) {
101
+ throw new Error(`Preset "${preset}" not found in dsl_presets`);
102
+ }
103
+ return { intervalMs, preset, presets };
104
+ }
105
+ export function getDefaultIntervalMs() {
106
+ return DEFAULT_INTERVAL_MS;
107
+ }
108
+ //# sourceMappingURL=index.js.map