@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,200 @@
1
+ import { Type } from "@sinclair/typebox";
2
+ import { createScanner } from "../create-scanner.js";
3
+ import { providerInput } from "../input-descriptors.js";
4
+ import { clamp01 } from "../score-utils.js";
5
+ import { PersistencePolicy, RetentionPolicy } from "../scanner-definition.js";
6
+ // ─── Config ─────────────────────────────────────────────────────────────────
7
+ const smFlipConfigSchema = Type.Object({
8
+ minConviction: Type.Optional(Type.Number({ minimum: 0, default: 4 })),
9
+ });
10
+ const smFlipStateSchema = Type.Object({
11
+ scans: Type.Number({ minimum: 0 }),
12
+ totalFlips: Type.Number({ minimum: 0 }),
13
+ });
14
+ // ─── Defaults ───────────────────────────────────────────────────────────────
15
+ const defaultConfig = {
16
+ minConviction: 4,
17
+ };
18
+ const defaultState = {
19
+ scans: 0,
20
+ totalFlips: 0,
21
+ };
22
+ // ─── Conviction scoring ─────────────────────────────────────────────────────
23
+ /**
24
+ * Scores smart-money conviction for a flip event.
25
+ *
26
+ * Based on Fox's sm-flip-check.py conviction algorithm:
27
+ * - pctOfTopTradersGain contribution (0-3 points)
28
+ * - traderCount concentration (0-3 points)
29
+ *
30
+ * Returns a score from 0 to 6. Fox uses minConviction=4 as default threshold.
31
+ */
32
+ export function scoreConviction(sm) {
33
+ let score = 0;
34
+ // Contribution scoring
35
+ if (sm.pctOfTopTradersGain > 0.05)
36
+ score += 3;
37
+ else if (sm.pctOfTopTradersGain > 0.02)
38
+ score += 2;
39
+ else if (sm.pctOfTopTradersGain > 0)
40
+ score += 1;
41
+ // Trader count scoring
42
+ if (sm.traderCount >= 5)
43
+ score += 3;
44
+ else if (sm.traderCount >= 3)
45
+ score += 2;
46
+ else if (sm.traderCount >= 1)
47
+ score += 1;
48
+ return score;
49
+ }
50
+ /**
51
+ * Normalizes the SM data direction string to "LONG" | "SHORT".
52
+ * SM data uses "up"/"long" for longs and "short"/"down" for shorts.
53
+ */
54
+ function normalizeSmDirection(direction) {
55
+ const lower = direction.toLowerCase();
56
+ return lower === "short" || lower === "down" ? "SHORT" : "LONG";
57
+ }
58
+ /**
59
+ * Detects whether a smart-money direction flips against a position direction.
60
+ */
61
+ export function isFlipped(positionDirection, smDirection) {
62
+ const posDir = positionDirection.toUpperCase();
63
+ const smDir = normalizeSmDirection(smDirection);
64
+ return posDir !== smDir;
65
+ }
66
+ /**
67
+ * Extracts asset and direction from a loosely-typed active position record.
68
+ * Returns null if required fields are missing or invalid.
69
+ */
70
+ function parsePosition(record) {
71
+ const asset = typeof record.coin === "string"
72
+ ? record.coin
73
+ : typeof record.asset === "string"
74
+ ? record.asset
75
+ : null;
76
+ if (!asset)
77
+ return null;
78
+ let direction = null;
79
+ if (typeof record.direction === "string") {
80
+ const d = record.direction.toUpperCase();
81
+ if (d === "LONG" || d === "SHORT")
82
+ direction = d;
83
+ }
84
+ // Hyperliquid clearinghouse uses szi (signed size): positive = long, negative = short
85
+ if (!direction && typeof record.szi === "string") {
86
+ const szi = parseFloat(record.szi);
87
+ if (Number.isFinite(szi) && szi !== 0) {
88
+ direction = szi > 0 ? "LONG" : "SHORT";
89
+ }
90
+ }
91
+ if (!direction && typeof record.size === "number") {
92
+ if (record.size > 0)
93
+ direction = "LONG";
94
+ else if (record.size < 0)
95
+ direction = "SHORT";
96
+ }
97
+ if (!direction)
98
+ return null;
99
+ return { asset, direction };
100
+ }
101
+ // ─── Token key helpers ──────────────────────────────────────────────────────
102
+ /** Extracts the base token symbol from an SM market (ignoring DEX qualifier). */
103
+ function smTokenKey(market) {
104
+ return market.token;
105
+ }
106
+ // ─── Scanner factory ────────────────────────────────────────────────────────
107
+ /**
108
+ * Creates the SM Flip scanner.
109
+ *
110
+ * Monitors open positions against the smart-money leaderboard and detects
111
+ * when smart-money conviction reverses direction against a held position.
112
+ * Emits high-priority FLIP_NOW signals that should trigger immediate
113
+ * position closure.
114
+ *
115
+ * Inputs:
116
+ * - smData: smart-money leaderboard from `leaderboard_get_markets`
117
+ * - activePositions: current positions from `strategy_get_clearinghouse_state`
118
+ */
119
+ export function smFlipScanner() {
120
+ return createScanner({
121
+ id: "sm-flip",
122
+ signalType: "SM_FLIP",
123
+ description: "Detects smart-money conviction reversal against open positions.",
124
+ intervalSeconds: 300,
125
+ retention: RetentionPolicy.ROLLING_WINDOW,
126
+ retentionMaxRuns: 100,
127
+ persistence: PersistencePolicy.ACTIONABLE_ONLY,
128
+ inputs: [providerInput.smData(), providerInput.activePositions()],
129
+ configSchema: smFlipConfigSchema,
130
+ defaultConfig,
131
+ stateSchema: smFlipStateSchema,
132
+ defaultState,
133
+ scan: async (ctx) => {
134
+ const now = ctx.now();
135
+ const cfg = ctx.config;
136
+ const smData = ctx.inputs.smData ?? [];
137
+ const positions = ctx.inputs.activePositions ?? [];
138
+ const signals = [];
139
+ // Build a lookup map for SM data by token
140
+ const smByToken = new Map();
141
+ for (const sm of smData) {
142
+ smByToken.set(smTokenKey(sm), sm);
143
+ }
144
+ for (const posRecord of positions) {
145
+ const pos = parsePosition(posRecord);
146
+ if (!pos)
147
+ continue;
148
+ const smEntry = smByToken.get(pos.asset);
149
+ if (!smEntry)
150
+ continue;
151
+ if (!isFlipped(pos.direction, smEntry.direction))
152
+ continue;
153
+ const conviction = scoreConviction(smEntry);
154
+ if (conviction < (cfg.minConviction ?? 4))
155
+ continue;
156
+ const newSmDirection = normalizeSmDirection(smEntry.direction);
157
+ signals.push({
158
+ address: ctx.address,
159
+ scannerId: ctx.scannerId,
160
+ signalType: "FLIP_NOW",
161
+ asset: pos.asset,
162
+ direction: newSmDirection,
163
+ score: clamp01(conviction / 6),
164
+ timestamp: now,
165
+ factors: {
166
+ sm_direction_flip: true,
167
+ high_conviction: conviction >= 5,
168
+ deep_reversal: smEntry.pctOfTopTradersGain > 0.05,
169
+ },
170
+ meta: {
171
+ positionDirection: pos.direction,
172
+ smDirection: smEntry.direction,
173
+ newDirection: newSmDirection,
174
+ conviction,
175
+ traderCount: smEntry.traderCount,
176
+ pctOfTopTradersGain: smEntry.pctOfTopTradersGain,
177
+ positionAsset: pos.asset,
178
+ },
179
+ });
180
+ }
181
+ const nextState = {
182
+ scans: ctx.state.scans + 1,
183
+ totalFlips: ctx.state.totalFlips + signals.length,
184
+ };
185
+ await ctx.setState(nextState);
186
+ return {
187
+ timestamp: now,
188
+ scannedCount: positions.length,
189
+ signals,
190
+ summary: {
191
+ positionsChecked: positions.length,
192
+ smMarketsAvailable: smData.length,
193
+ flipsDetected: signals.length,
194
+ scans: nextState.scans,
195
+ },
196
+ };
197
+ },
198
+ });
199
+ }
200
+ //# sourceMappingURL=sm-flip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sm-flip.js","sourceRoot":"","sources":["../../../src/scanners/implementations/sm-flip.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ export { type ScannerRuntimeEventMap, type ScannerRuntimeEventName, type ScannerRunCompleteEvent, type ScannerRunErrorEvent, type ScannerRunSkipEvent, type ScannerRunStartEvent, } from "./events.js";
2
+ export { createScannerRuntimeModule, type ScannerFactory, type ScannerInput, type ScannerRuntimeModule, type ScannerRuntimeModuleOptions, } from "./runtime-module.js";
3
+ export { createScanner, type CreateScannerOptions } from "./create-scanner.js";
4
+ export { providerInput, type ActivePositionsInputDescriptor, type CandlesInputDescriptor, type InstrumentsInputDescriptor, type ProviderInputDescriptor, type ScannerInputDescriptor, type SmDataInputDescriptor, } from "./input-descriptors.js";
5
+ export type { ScannerDataProviders } from "./engine/data-providers.js";
6
+ export type { ScannerRegistrationSummary } from "./engine/engine.js";
7
+ export type { Scanner } from "./protocol/scanner.js";
8
+ export type { ScannerHooks } from "./protocol/hooks.js";
9
+ export { SkipScan } from "./protocol/hooks.js";
10
+ export { PersistencePolicy, RetentionPolicy, type ScannerDefinition, } from "./scanner-definition.js";
11
+ export { consumeSharedArtifact, btcCacheArtifact, defineSharedArtifact, oiHistoryArtifact, prescreenedArtifact, type ArtifactProviderSource, type BtcCacheArtifact, type ConsumedArtifactBinding, type OiHistoryArtifact, type PrescreenedArtifact, type PrescreenedCandidate, type SharedArtifactContract, type SharedArtifactValue, type SharedArtifactValueMap, } from "./artifacts.js";
12
+ export { type Candidate, type Instrument, type OiSnapshot, type ReadSignalsFilter, type ScanResult, ScanStatus, type ScannerId, type Signal, type StrategyId, type StrategyRegistration, } from "./types.js";
13
+ export type { Candle, CandleResult, InstrumentContext, ParsedCandles, SmMarket, } from "./types.js";
14
+ export { createSenpiScannerProviders, type SenpiScannerProviderFactoryOptions, type SenpiProviderCacheTtlMs, type SenpiProviderTimeouts, type SenpiProviderToolNames, } from "./providers/factory.js";
15
+ export type { ProviderLogLevel, ProviderLogger, ProviderToolClient, SenpiToolClient, } from "./providers/client.js";
16
+ export { emergingMoversScanner } from "./implementations/emerging-movers.js";
17
+ export { momentumScanner } from "./implementations/momentum.js";
18
+ export { oiTrackerScanner } from "./implementations/oi-tracker.js";
19
+ export { prescreenerScanner } from "./implementations/prescreener.js";
20
+ export { marketRegimeScanner } from "./implementations/market-regime.js";
21
+ export { smFlipScanner } from "./implementations/sm-flip.js";
22
+ export { opportunityScanner } from "./implementations/opportunity.js";
23
+ export { marketRegimeArtifact, MarketRegime, type MarketRegimeArtifact, } from "./artifacts.js";
24
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/scanners/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAC5B,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,GAC1B,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,0BAA0B,EAC1B,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,oBAAoB,EACzB,KAAK,2BAA2B,GACjC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EACL,aAAa,EACb,KAAK,8BAA8B,EACnC,KAAK,sBAAsB,EAC3B,KAAK,0BAA0B,EAC/B,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,GAC3B,MAAM,wBAAwB,CAAC;AAEhC,YAAY,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AACvE,YAAY,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AACrE,YAAY,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AACrD,YAAY,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,KAAK,iBAAiB,GACvB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,KAAK,sBAAsB,EAC3B,KAAK,gBAAgB,EACrB,KAAK,uBAAuB,EAC5B,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,GAC5B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,iBAAiB,EACtB,KAAK,UAAU,EACf,UAAU,EACV,KAAK,SAAS,EACd,KAAK,MAAM,EACX,KAAK,UAAU,EACf,KAAK,oBAAoB,GAC1B,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,MAAM,EACN,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,QAAQ,GACT,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,2BAA2B,EAC3B,KAAK,kCAAkC,EACvC,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,GAC5B,MAAM,wBAAwB,CAAC;AAChC,YAAY,EACV,gBAAgB,EAChB,cAAc,EACd,kBAAkB,EAClB,eAAe,GAChB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EACL,oBAAoB,EACpB,YAAY,EACZ,KAAK,oBAAoB,GAC1B,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,17 @@
1
+ export { createScannerRuntimeModule, } from "./runtime-module.js";
2
+ export { createScanner } from "./create-scanner.js";
3
+ export { providerInput, } from "./input-descriptors.js";
4
+ export { SkipScan } from "./protocol/hooks.js";
5
+ export { PersistencePolicy, RetentionPolicy, } from "./scanner-definition.js";
6
+ export { consumeSharedArtifact, btcCacheArtifact, defineSharedArtifact, oiHistoryArtifact, prescreenedArtifact, } from "./artifacts.js";
7
+ export { ScanStatus, } from "./types.js";
8
+ export { createSenpiScannerProviders, } from "./providers/factory.js";
9
+ export { emergingMoversScanner } from "./implementations/emerging-movers.js";
10
+ export { momentumScanner } from "./implementations/momentum.js";
11
+ export { oiTrackerScanner } from "./implementations/oi-tracker.js";
12
+ export { prescreenerScanner } from "./implementations/prescreener.js";
13
+ export { marketRegimeScanner } from "./implementations/market-regime.js";
14
+ export { smFlipScanner } from "./implementations/sm-flip.js";
15
+ export { opportunityScanner } from "./implementations/opportunity.js";
16
+ export { marketRegimeArtifact, MarketRegime, } from "./artifacts.js";
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/scanners/index.ts"],"names":[],"mappings":"AASA,OAAO,EACL,0BAA0B,GAK3B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,aAAa,EAA6B,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EACL,aAAa,GAOd,MAAM,wBAAwB,CAAC;AAMhC,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EACL,iBAAiB,EACjB,eAAe,GAEhB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,GAUpB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAML,UAAU,GAKX,MAAM,YAAY,CAAC;AAQpB,OAAO,EACL,2BAA2B,GAK5B,MAAM,wBAAwB,CAAC;AAOhC,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EACL,oBAAoB,EACpB,YAAY,GAEb,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,49 @@
1
+ import type { ConsumedArtifactBinding, SharedArtifactContract } from "./artifacts.js";
2
+ import type { SharedArtifactKey } from "./types.js";
3
+ /** Provider-backed instruments input for one scan run. */
4
+ export interface InstrumentsInputDescriptor {
5
+ kind: "instruments";
6
+ }
7
+ /** Provider-backed candle input for one scan run. */
8
+ export interface CandlesInputDescriptor<Key extends SharedArtifactKey = SharedArtifactKey> {
9
+ kind: "candles";
10
+ /** Optional shared artifact used to narrow the candle asset fanout. */
11
+ preferredAssetsFrom?: Key | SharedArtifactContract<Key>;
12
+ /** Optional hardcoded asset list to narrow the candle request. Takes precedence over `preferredAssetsFrom`. */
13
+ fixedAssets?: string[];
14
+ }
15
+ /** Provider-backed smart-money leaderboard input for one scan run. */
16
+ export interface SmDataInputDescriptor {
17
+ kind: "smData";
18
+ }
19
+ /** Provider-backed active-position input for one scan run. */
20
+ export interface ActivePositionsInputDescriptor {
21
+ kind: "activePositions";
22
+ }
23
+ /** Declarative provider-backed scanner inputs. */
24
+ export type ProviderInputDescriptor = InstrumentsInputDescriptor | CandlesInputDescriptor | SmDataInputDescriptor | ActivePositionsInputDescriptor;
25
+ /** Declarative scanner input descriptor covering providers and shared artifacts. */
26
+ export type ScannerInputDescriptor = ProviderInputDescriptor | ConsumedArtifactBinding;
27
+ /** Builder helpers for provider-backed scanner inputs. */
28
+ export declare const providerInput: {
29
+ /** Declares that a scanner needs the current instrument universe for each run. */
30
+ instruments(): InstrumentsInputDescriptor;
31
+ /**
32
+ * Declares that a scanner needs candle data for each run.
33
+ * `preferredAssetsFrom` lets upstream shared artifacts narrow the requested asset set.
34
+ * `fixedAssets` provides a hardcoded asset list (takes precedence over `preferredAssetsFrom`).
35
+ */
36
+ candles<Key extends SharedArtifactKey>(options?: {
37
+ preferredAssetsFrom?: Key | SharedArtifactContract<Key>;
38
+ fixedAssets?: string[];
39
+ }): CandlesInputDescriptor<Key>;
40
+ /** Declares that a scanner needs smart-money leaderboard data for each run. */
41
+ smData(): SmDataInputDescriptor;
42
+ /** Declares that a scanner needs the currently active positions for each run. */
43
+ activePositions(): ActivePositionsInputDescriptor;
44
+ };
45
+ /** Runtime guard for provider-backed input descriptors. */
46
+ export declare function isProviderInputDescriptor(input: ScannerInputDescriptor): input is ProviderInputDescriptor;
47
+ /** Runtime guard for consumed shared-artifact bindings in the inputs array. */
48
+ export declare function isConsumedArtifactBinding(input: ScannerInputDescriptor): input is ConsumedArtifactBinding;
49
+ //# sourceMappingURL=input-descriptors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input-descriptors.d.ts","sourceRoot":"","sources":["../../src/scanners/input-descriptors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACtF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,0DAA0D;AAC1D,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,aAAa,CAAC;CACrB;AAED,qDAAqD;AACrD,MAAM,WAAW,sBAAsB,CACrC,GAAG,SAAS,iBAAiB,GAAG,iBAAiB;IAEjD,IAAI,EAAE,SAAS,CAAC;IAChB,uEAAuE;IACvE,mBAAmB,CAAC,EAAE,GAAG,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAC;IACxD,+GAA+G;IAC/G,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,sEAAsE;AACtE,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,QAAQ,CAAC;CAChB;AAED,8DAA8D;AAC9D,MAAM,WAAW,8BAA8B;IAC7C,IAAI,EAAE,iBAAiB,CAAC;CACzB;AAED,kDAAkD;AAClD,MAAM,MAAM,uBAAuB,GAC/B,0BAA0B,GAC1B,sBAAsB,GACtB,qBAAqB,GACrB,8BAA8B,CAAC;AAEnC,oFAAoF;AACpF,MAAM,MAAM,sBAAsB,GAC9B,uBAAuB,GACvB,uBAAuB,CAAC;AAE5B,0DAA0D;AAC1D,eAAO,MAAM,aAAa;IACxB,kFAAkF;mBACnE,0BAA0B;IAIzC;;;;OAIG;YACK,GAAG,SAAS,iBAAiB,YAC1B;QAAE,mBAAmB,CAAC,EAAE,GAAG,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAC3F,sBAAsB,CAAC,GAAG,CAAC;IAO9B,+EAA+E;cACrE,qBAAqB;IAI/B,iFAAiF;uBAC9D,8BAA8B;CAGlD,CAAC;AAEF,2DAA2D;AAC3D,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,sBAAsB,GAC5B,KAAK,IAAI,uBAAuB,CAElC;AAED,+EAA+E;AAC/E,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,sBAAsB,GAC5B,KAAK,IAAI,uBAAuB,CAElC"}
@@ -0,0 +1,35 @@
1
+ /** Builder helpers for provider-backed scanner inputs. */
2
+ export const providerInput = {
3
+ /** Declares that a scanner needs the current instrument universe for each run. */
4
+ instruments() {
5
+ return { kind: "instruments" };
6
+ },
7
+ /**
8
+ * Declares that a scanner needs candle data for each run.
9
+ * `preferredAssetsFrom` lets upstream shared artifacts narrow the requested asset set.
10
+ * `fixedAssets` provides a hardcoded asset list (takes precedence over `preferredAssetsFrom`).
11
+ */
12
+ candles(options = {}) {
13
+ return {
14
+ kind: "candles",
15
+ ...options,
16
+ };
17
+ },
18
+ /** Declares that a scanner needs smart-money leaderboard data for each run. */
19
+ smData() {
20
+ return { kind: "smData" };
21
+ },
22
+ /** Declares that a scanner needs the currently active positions for each run. */
23
+ activePositions() {
24
+ return { kind: "activePositions" };
25
+ },
26
+ };
27
+ /** Runtime guard for provider-backed input descriptors. */
28
+ export function isProviderInputDescriptor(input) {
29
+ return "kind" in input;
30
+ }
31
+ /** Runtime guard for consumed shared-artifact bindings in the inputs array. */
32
+ export function isConsumedArtifactBinding(input) {
33
+ return "contract" in input;
34
+ }
35
+ //# sourceMappingURL=input-descriptors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input-descriptors.js","sourceRoot":"","sources":["../../src/scanners/input-descriptors.ts"],"names":[],"mappings":"AAyCA,0DAA0D;AAC1D,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,kFAAkF;IAClF,WAAW;QACT,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;IACjC,CAAC;IAED;;;;OAIG;IACH,OAAO,CACL,UAA+F,EAAE;QAEjG,OAAO;YACL,IAAI,EAAE,SAAS;YACf,GAAG,OAAO;SACX,CAAC;IACJ,CAAC;IAED,+EAA+E;IAC/E,MAAM;QACJ,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAC5B,CAAC;IAED,iFAAiF;IACjF,eAAe;QACb,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC;IACrC,CAAC;CACF,CAAC;AAEF,2DAA2D;AAC3D,MAAM,UAAU,yBAAyB,CACvC,KAA6B;IAE7B,OAAO,MAAM,IAAI,KAAK,CAAC;AACzB,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,yBAAyB,CACvC,KAA6B;IAE7B,OAAO,UAAU,IAAI,KAAK,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,71 @@
1
+ import type { SharedArtifactContract, SharedArtifactValue, SharedArtifactValueMap } from "../artifacts.js";
2
+ import type { ScannerDefinition } from "../scanner-definition.js";
3
+ import type { ScannerRuntimeState } from "../store/runtime-store.js";
4
+ import type { CandleResult, Instrument, OiSnapshot, ScannerId, SharedArtifactKey, SmMarket } from "../types.js";
5
+ type ReadonlyPrimitive = bigint | boolean | null | number | string | symbol | undefined;
6
+ type ReadonlyDeepArray<Item> = ReadonlyArray<ReadonlyDeep<Item>>;
7
+ type ReadonlyDeepObject<T extends object> = {
8
+ readonly [Key in keyof T]: ReadonlyDeep<T[Key]>;
9
+ };
10
+ /**
11
+ * Recursively marks nested scan-input payloads as readonly.
12
+ * This is used for artifact-backed inputs so scanners cannot mutate shared
13
+ * market intelligence snapshots in place.
14
+ */
15
+ type ReadonlyDeep<T> = T extends ReadonlyPrimitive ? T : T extends (...args: never[]) => unknown ? T : T extends readonly (infer Item)[] ? ReadonlyDeepArray<Item> : T extends object ? ReadonlyDeepObject<T> : T;
16
+ /** Candle data indexed first by asset, then by timeframe within each candle result. */
17
+ export type CandlesByAsset = Readonly<Record<string, Readonly<CandleResult>>>;
18
+ /** Open-interest history indexed by asset name. */
19
+ export type OiHistoryByAsset = Readonly<Record<string, readonly Readonly<OiSnapshot>[]>>;
20
+ /**
21
+ * Shared market intelligence resolved for one scan run.
22
+ * These values come from shared artifact bindings rather than direct provider needs.
23
+ */
24
+ export type ScanArtifactInputs = Partial<{
25
+ readonly [Key in keyof SharedArtifactValueMap]: ReadonlyDeep<SharedArtifactValueMap[Key]>;
26
+ }>;
27
+ /**
28
+ * Data payload assembled by engine for one scan run.
29
+ * Top-level fields are provider-backed inputs; `artifacts` contains shared
30
+ * market intelligence. Scanners should treat this snapshot as read-only input.
31
+ */
32
+ export interface ScanInputs {
33
+ readonly instruments?: readonly Readonly<Instrument>[];
34
+ readonly candles?: CandlesByAsset;
35
+ readonly smData?: readonly Readonly<SmMarket>[];
36
+ readonly activePositions?: readonly Readonly<Record<string, unknown>>[];
37
+ readonly artifacts: ScanArtifactInputs;
38
+ }
39
+ /** Optional logger surface exposed to scanners and hooks. */
40
+ export interface ScannerLogger {
41
+ debug?: (message: string, meta?: Record<string, unknown>) => void;
42
+ info?: (message: string, meta?: Record<string, unknown>) => void;
43
+ warn?: (message: string, meta?: Record<string, unknown>) => void;
44
+ error?: (message: string, meta?: Record<string, unknown>) => void;
45
+ }
46
+ /** Shared-artifact accessors available to scanners for reading and writing shared market intelligence. */
47
+ export interface SharedArtifactAccessor {
48
+ loadSharedArtifact: <Key extends SharedArtifactKey>(artifact: Key | SharedArtifactContract<Key>, opts?: {
49
+ maxAgeMs?: number;
50
+ }) => Promise<SharedArtifactValue<Key> | null>;
51
+ saveSharedArtifact: <Key extends SharedArtifactKey>(artifact: Key | SharedArtifactContract<Key>, value: SharedArtifactValue<Key>) => Promise<void>;
52
+ }
53
+ /** Context passed once during scanner bootstrap. */
54
+ export interface ScannerInitContext<Cfg = unknown, St = unknown> extends SharedArtifactAccessor {
55
+ address: string;
56
+ scannerId: ScannerId;
57
+ definition: ScannerDefinition<Cfg, St>;
58
+ runtime: ScannerRuntimeState<Cfg, St>;
59
+ config: Cfg;
60
+ state: St;
61
+ now: () => number;
62
+ logger?: ScannerLogger;
63
+ setState: (nextState: St) => Promise<void>;
64
+ }
65
+ /** Context passed on each scan run after runtime and inputs are loaded. */
66
+ export interface ScanContext<Cfg = unknown, St = unknown> extends ScannerInitContext<Cfg, St> {
67
+ runStartedAt: number;
68
+ inputs: ScanInputs;
69
+ }
70
+ export {};
71
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/scanners/protocol/context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/scanners/protocol/context.ts"],"names":[],"mappings":""}
@@ -0,0 +1,18 @@
1
+ import { ScanStatus } from "../types.js";
2
+ import type { Signal } from "../types.js";
3
+ import type { ScanContext } from "./context.js";
4
+ /** Optional pre/post scan behavior customizations for one scanner. */
5
+ export interface ScannerHooks<Cfg = unknown, St = unknown> {
6
+ beforeScan?: (ctx: ScanContext<Cfg, St>) => ScanContext<Cfg, St> | Promise<ScanContext<Cfg, St>>;
7
+ isActionable?: (signal: Signal, ctx: ScanContext<Cfg, St>) => boolean;
8
+ }
9
+ export interface SkipScanOptions {
10
+ status?: ScanStatus;
11
+ cause?: unknown;
12
+ }
13
+ /** Error used by scanner hooks or scanner code to halt one run with a status. */
14
+ export declare class SkipScan extends Error {
15
+ readonly status: ScanStatus;
16
+ constructor(message?: string, options?: SkipScanOptions);
17
+ }
18
+ //# sourceMappingURL=hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../../src/scanners/protocol/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,sEAAsE;AACtE,MAAM,WAAW,YAAY,CAAC,GAAG,GAAG,OAAO,EAAE,EAAE,GAAG,OAAO;IACvD,UAAU,CAAC,EAAE,CACX,GAAG,EAAE,WAAW,CAAC,GAAG,EAAE,EAAE,CAAC,KACtB,WAAW,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;IAC1D,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,OAAO,CAAC;CACvE;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,iFAAiF;AACjF,qBAAa,QAAS,SAAQ,KAAK;IACjC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;gBAEhB,OAAO,SAAkB,EAAE,OAAO,GAAE,eAAoB;CAOrE"}
@@ -0,0 +1,12 @@
1
+ import { ScanStatus } from "../types.js";
2
+ /** Error used by scanner hooks or scanner code to halt one run with a status. */
3
+ export class SkipScan extends Error {
4
+ status;
5
+ constructor(message = "Scan skipped.", options = {}) {
6
+ const errorOptions = options.cause === undefined ? undefined : { cause: options.cause };
7
+ super(message, errorOptions);
8
+ this.name = "SkipScan";
9
+ this.status = options.status ?? ScanStatus.SKIPPED;
10
+ }
11
+ }
12
+ //# sourceMappingURL=hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../src/scanners/protocol/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAiBzC,iFAAiF;AACjF,MAAM,OAAO,QAAS,SAAQ,KAAK;IACxB,MAAM,CAAa;IAE5B,YAAY,OAAO,GAAG,eAAe,EAAE,UAA2B,EAAE;QAClE,MAAM,YAAY,GAChB,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC;QACrE,KAAK,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,UAAU,CAAC,OAAO,CAAC;IACrD,CAAC;CACF"}
@@ -0,0 +1,5 @@
1
+ export type { Scanner } from "./scanner.js";
2
+ export type { ScannerHooks } from "./hooks.js";
3
+ export { SkipScan, type SkipScanOptions } from "./hooks.js";
4
+ export type { CandlesByAsset, OiHistoryByAsset, ScanInputs, ScannerLogger, SharedArtifactAccessor, ScannerInitContext, ScanContext, } from "./context.js";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/scanners/protocol/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAC5D,YAAY,EACV,cAAc,EACd,gBAAgB,EAChB,UAAU,EACV,aAAa,EACb,sBAAsB,EACtB,kBAAkB,EAClB,WAAW,GACZ,MAAM,cAAc,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { SkipScan } from "./hooks.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/scanners/protocol/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAwB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,47 @@
1
+ import type { ScannerDefinition } from "../scanner-definition.js";
2
+ import type { ScannerScanOutput } from "../types.js";
3
+ import type { ScanContext, ScannerInitContext } from "./context.js";
4
+ import type { ScannerHooks } from "./hooks.js";
5
+ /**
6
+ * Core scanner contract implemented by all strategy-runtime scanners.
7
+ *
8
+ * Each scanner declares a {@link ScannerDefinition} describing its identity,
9
+ * provider-backed inputs, shared market intelligence contracts, scheduling interval, and persistence/retention policies. The engine
10
+ * calls {@link initialize} once per (address, scannerId) registration, then
11
+ * calls {@link scan} on each scheduled or manual run.
12
+ *
13
+ * **Lifecycle:**
14
+ * 1. Engine loads/creates runtime state and builds an init context.
15
+ * 2. `initialize(ctx)` is called once — use it to bootstrap scanner-local state
16
+ * or validate prerequisites. The init context provides `setState()` for persisting
17
+ * initial state and `loadSharedArtifact()` / `saveSharedArtifact()` for shared market intelligence.
18
+ * 3. On each run, the engine builds a scan context with resolved provider-backed
19
+ * inputs plus shared market intelligence under `ctx.inputs.artifacts`.
20
+ * 4. If `hooks.beforeScan` is defined, it runs first and may throw `SkipScan` to abort.
21
+ * 5. `scan(ctx)` executes scanner logic and returns signals + metadata.
22
+ * 6. The engine normalizes scores to [0, 1], applies `hooks.isActionable` filtering,
23
+ * and persists results according to the scanner's policies.
24
+ *
25
+ * @typeParam Cfg - Scanner configuration type (validated against `definition.configSchema`).
26
+ * @typeParam St - Scanner-local mutable state type (persisted across runs via `ctx.setState()`).
27
+ */
28
+ export interface Scanner<Cfg = unknown, St = unknown> {
29
+ /** Static scanner metadata: identity, input contracts, scheduling, persistence. */
30
+ definition: ScannerDefinition<Cfg, St>;
31
+ /** Optional pre/post-scan behavior customizations. */
32
+ hooks?: ScannerHooks<Cfg, St>;
33
+ /**
34
+ * Called once per (address, scannerId) registration before the first scan.
35
+ * Use this to initialize scanner-local state, validate config, or load prerequisites.
36
+ * The context provides `setState()` for persisting initial state to disk.
37
+ */
38
+ initialize: (ctx: ScannerInitContext<Cfg, St>) => Promise<void>;
39
+ /**
40
+ * Executes one scanner run and returns signals with execution metadata.
41
+ * The context includes resolved provider-backed inputs, shared market intelligence,
42
+ * current config/state, and shared artifact accessors. Signals returned here are normalized by the
43
+ * engine (score clamping, factor coercion) before persistence.
44
+ */
45
+ scan: (ctx: ScanContext<Cfg, St>) => Promise<ScannerScanOutput>;
46
+ }
47
+ //# sourceMappingURL=scanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../../src/scanners/protocol/scanner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,WAAW,OAAO,CAAC,GAAG,GAAG,OAAO,EAAE,EAAE,GAAG,OAAO;IAClD,mFAAmF;IACnF,UAAU,EAAE,iBAAiB,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAEvC,sDAAsD;IACtD,KAAK,CAAC,EAAE,YAAY,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAE9B;;;;OAIG;IACH,UAAU,EAAE,CAAC,GAAG,EAAE,kBAAkB,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhE;;;;;OAKG;IACH,IAAI,EAAE,CAAC,GAAG,EAAE,WAAW,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACjE"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=scanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../../src/scanners/protocol/scanner.ts"],"names":[],"mappings":""}
@@ -0,0 +1,23 @@
1
+ import type { CandleResult, Instrument, SmMarket } from "../types.js";
2
+ /** Summary of rows/issues encountered while normalizing one provider payload. */
3
+ export interface NormalizationDiagnostics {
4
+ acceptedCount: number;
5
+ discardedCount: number;
6
+ issueCounts: Record<string, number>;
7
+ }
8
+ /** Normalized value paired with diagnostics describing discarded rows/issues. */
9
+ export interface NormalizationResult<T> {
10
+ value: T;
11
+ diagnostics: NormalizationDiagnostics;
12
+ }
13
+ /** Strictly maps `market_list_instruments` payload into scanner `Instrument[]`. */
14
+ export declare function normalizeInstruments(raw: unknown): Instrument[];
15
+ /** Strictly maps `market_list_instruments` payload and reports discarded-row diagnostics. */
16
+ export declare function normalizeInstrumentsWithDiagnostics(raw: unknown): NormalizationResult<Instrument[]>;
17
+ /** Strictly maps one `market_get_asset_data` payload into scanner `CandleResult`. */
18
+ export declare function normalizeAssetCandles(raw: unknown): CandleResult;
19
+ /** Strictly maps `leaderboard_get_markets` payload into scanner `SmMarket[]`. */
20
+ export declare function normalizeSmMarkets(raw: unknown): SmMarket[];
21
+ /** Strictly maps `leaderboard_get_markets` payload and reports discarded-row diagnostics. */
22
+ export declare function normalizeSmMarketsWithDiagnostics(raw: unknown): NormalizationResult<SmMarket[]>;
23
+ //# sourceMappingURL=adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../src/scanners/providers/adapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAU,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAS9E,iFAAiF;AACjF,MAAM,WAAW,wBAAwB;IACvC,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACrC;AAED,iFAAiF;AACjF,MAAM,WAAW,mBAAmB,CAAC,CAAC;IACpC,KAAK,EAAE,CAAC,CAAC;IACT,WAAW,EAAE,wBAAwB,CAAC;CACvC;AAED,mFAAmF;AACnF,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,EAAE,CAE/D;AAED,6FAA6F;AAC7F,wBAAgB,mCAAmC,CACjD,GAAG,EAAE,OAAO,GACX,mBAAmB,CAAC,UAAU,EAAE,CAAC,CAuEnC;AAED,qFAAqF;AACrF,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,YAAY,CAqChE;AAED,iFAAiF;AACjF,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,QAAQ,EAAE,CAE3D;AAED,6FAA6F;AAC7F,wBAAgB,iCAAiC,CAC/C,GAAG,EAAE,OAAO,GACX,mBAAmB,CAAC,QAAQ,EAAE,CAAC,CAiDjC"}