@senpi/runtime 1.0.95-dev.feat-dsl-backend-int.20260416023008 → 1.0.95-dev.runtime-phase-2.20260416194608

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 (285) hide show
  1. package/README.md +72 -0
  2. package/dist/actions/action-runtime-module.d.ts +55 -0
  3. package/dist/actions/action-runtime-module.d.ts.map +1 -0
  4. package/dist/actions/action-runtime-module.js +444 -0
  5. package/dist/actions/action-runtime-module.js.map +1 -0
  6. package/dist/actions/close-position/close-position.action.d.ts +1 -0
  7. package/dist/actions/close-position/close-position.action.d.ts.map +1 -1
  8. package/dist/actions/close-position/close-position.action.js +55 -20
  9. package/dist/actions/close-position/close-position.action.js.map +1 -1
  10. package/dist/actions/decision-engine.d.ts.map +1 -1
  11. package/dist/actions/decision-engine.js +5 -0
  12. package/dist/actions/decision-engine.js.map +1 -1
  13. package/dist/actions/llm-decision/shared.d.ts +1 -1
  14. package/dist/actions/llm-decision/shared.d.ts.map +1 -1
  15. package/dist/actions/llm-decision/shared.js +1 -1
  16. package/dist/actions/llm-decision/shared.js.map +1 -1
  17. package/dist/actions/notifications/formatter.d.ts +39 -0
  18. package/dist/actions/notifications/formatter.d.ts.map +1 -0
  19. package/dist/actions/notifications/formatter.js +68 -0
  20. package/dist/actions/notifications/formatter.js.map +1 -0
  21. package/dist/actions/notifications/index.d.ts +37 -0
  22. package/dist/actions/notifications/index.d.ts.map +1 -0
  23. package/dist/actions/notifications/index.js +89 -0
  24. package/dist/actions/notifications/index.js.map +1 -0
  25. package/dist/actions/open-position/open-position.action.d.ts +1 -0
  26. package/dist/actions/open-position/open-position.action.d.ts.map +1 -1
  27. package/dist/actions/open-position/open-position.action.js +132 -27
  28. package/dist/actions/open-position/open-position.action.js.map +1 -1
  29. package/dist/actions/open-position/resolve-margin.d.ts +22 -0
  30. package/dist/actions/open-position/resolve-margin.d.ts.map +1 -0
  31. package/dist/actions/open-position/resolve-margin.js +30 -0
  32. package/dist/actions/open-position/resolve-margin.js.map +1 -0
  33. package/dist/actions/position-tracker/position-tracker.action.d.ts.map +1 -1
  34. package/dist/actions/position-tracker/position-tracker.action.js +4 -1
  35. package/dist/actions/position-tracker/position-tracker.action.js.map +1 -1
  36. package/dist/actions/store/action-store.d.ts +45 -0
  37. package/dist/actions/store/action-store.d.ts.map +1 -0
  38. package/dist/actions/store/action-store.js +127 -0
  39. package/dist/actions/store/action-store.js.map +1 -0
  40. package/dist/actions/store/index.d.ts +11 -0
  41. package/dist/actions/store/index.d.ts.map +1 -0
  42. package/dist/actions/store/index.js +9 -0
  43. package/dist/actions/store/index.js.map +1 -0
  44. package/dist/actions/store/paths.d.ts +15 -0
  45. package/dist/actions/store/paths.d.ts.map +1 -0
  46. package/dist/actions/store/paths.js +29 -0
  47. package/dist/actions/store/paths.js.map +1 -0
  48. package/dist/actions/store/types.d.ts +114 -0
  49. package/dist/actions/store/types.d.ts.map +1 -0
  50. package/dist/actions/store/types.js +48 -0
  51. package/dist/actions/store/types.js.map +1 -0
  52. package/dist/actions/tracking-helpers.d.ts +13 -0
  53. package/dist/actions/tracking-helpers.d.ts.map +1 -0
  54. package/dist/actions/tracking-helpers.js +47 -0
  55. package/dist/actions/tracking-helpers.js.map +1 -0
  56. package/dist/actions/types.d.ts +8 -0
  57. package/dist/actions/types.d.ts.map +1 -1
  58. package/dist/cli/guide-commands.d.ts.map +1 -1
  59. package/dist/cli/guide-commands.js +105 -3
  60. package/dist/cli/guide-commands.js.map +1 -1
  61. package/dist/cli/senpi-commands.d.ts.map +1 -1
  62. package/dist/cli/senpi-commands.js +428 -1
  63. package/dist/cli/senpi-commands.js.map +1 -1
  64. package/dist/constants/order-types.d.ts +7 -0
  65. package/dist/constants/order-types.d.ts.map +1 -0
  66. package/dist/constants/order-types.js +6 -0
  67. package/dist/constants/order-types.js.map +1 -0
  68. package/dist/context/interpolate.d.ts +6 -2
  69. package/dist/context/interpolate.d.ts.map +1 -1
  70. package/dist/context/interpolate.js +6 -2
  71. package/dist/context/interpolate.js.map +1 -1
  72. package/dist/context/types.d.ts +8 -1
  73. package/dist/context/types.d.ts.map +1 -1
  74. package/dist/context/types.js +8 -1
  75. package/dist/context/types.js.map +1 -1
  76. package/dist/dsl/config/exit-block.d.ts +7 -0
  77. package/dist/dsl/config/exit-block.d.ts.map +1 -1
  78. package/dist/dsl/config/parse-plugin-config.d.ts.map +1 -1
  79. package/dist/dsl/config/parse-plugin-config.js +27 -1
  80. package/dist/dsl/config/parse-plugin-config.js.map +1 -1
  81. package/dist/dsl/config/unknown-keys.d.ts.map +1 -1
  82. package/dist/dsl/config/unknown-keys.js +3 -1
  83. package/dist/dsl/config/unknown-keys.js.map +1 -1
  84. package/dist/dsl/monitor/create-monitor.d.ts +4 -0
  85. package/dist/dsl/monitor/create-monitor.d.ts.map +1 -1
  86. package/dist/dsl/monitor/create-monitor.js +8 -5
  87. package/dist/dsl/monitor/create-monitor.js.map +1 -1
  88. package/dist/dsl/monitor/process-one-position.d.ts +4 -0
  89. package/dist/dsl/monitor/process-one-position.d.ts.map +1 -1
  90. package/dist/dsl/monitor/process-one-position.js +8 -2
  91. package/dist/dsl/monitor/process-one-position.js.map +1 -1
  92. package/dist/dsl/plugin/index.d.ts.map +1 -1
  93. package/dist/dsl/plugin/index.js +3 -1
  94. package/dist/dsl/plugin/index.js.map +1 -1
  95. package/dist/health/index.d.ts +5 -2
  96. package/dist/health/index.d.ts.map +1 -1
  97. package/dist/health/index.js +106 -6
  98. package/dist/health/index.js.map +1 -1
  99. package/dist/health/types.d.ts +102 -0
  100. package/dist/health/types.d.ts.map +1 -1
  101. package/dist/health/types.js +7 -1
  102. package/dist/health/types.js.map +1 -1
  103. package/dist/index.d.ts +2 -2
  104. package/dist/index.d.ts.map +1 -1
  105. package/dist/index.js +98 -1
  106. package/dist/index.js.map +1 -1
  107. package/dist/risk/guardrail.types.d.ts +53 -0
  108. package/dist/risk/guardrail.types.d.ts.map +1 -0
  109. package/dist/risk/guardrail.types.js +5 -0
  110. package/dist/risk/guardrail.types.js.map +1 -0
  111. package/dist/risk/index.d.ts +2 -4
  112. package/dist/risk/index.d.ts.map +1 -1
  113. package/dist/risk/index.js +2 -6
  114. package/dist/risk/index.js.map +1 -1
  115. package/dist/risk/risk-audit-log.d.ts +25 -0
  116. package/dist/risk/risk-audit-log.d.ts.map +1 -0
  117. package/dist/risk/risk-audit-log.js +30 -0
  118. package/dist/risk/risk-audit-log.js.map +1 -0
  119. package/dist/runtime/__tests__/helpers/runtime-gateway-harness.d.ts +162 -0
  120. package/dist/runtime/__tests__/helpers/runtime-gateway-harness.d.ts.map +1 -0
  121. package/dist/runtime/__tests__/helpers/runtime-gateway-harness.js +285 -0
  122. package/dist/runtime/__tests__/helpers/runtime-gateway-harness.js.map +1 -0
  123. package/dist/runtime/create-actions.d.ts +6 -2
  124. package/dist/runtime/create-actions.d.ts.map +1 -1
  125. package/dist/runtime/create-actions.js +18 -7
  126. package/dist/runtime/create-actions.js.map +1 -1
  127. package/dist/runtime/create-scanner-module.d.ts +5 -0
  128. package/dist/runtime/create-scanner-module.d.ts.map +1 -1
  129. package/dist/runtime/create-scanner-module.js +12 -1
  130. package/dist/runtime/create-scanner-module.js.map +1 -1
  131. package/dist/runtime/load-runtime-config.d.ts +1 -1
  132. package/dist/runtime/load-runtime-config.d.ts.map +1 -1
  133. package/dist/runtime/load-runtime-config.js +37 -1
  134. package/dist/runtime/load-runtime-config.js.map +1 -1
  135. package/dist/runtime/map-strategies.d.ts +1 -1
  136. package/dist/runtime/map-strategies.d.ts.map +1 -1
  137. package/dist/runtime/map-strategies.js +38 -1
  138. package/dist/runtime/map-strategies.js.map +1 -1
  139. package/dist/runtime/risk-guard.d.ts +23 -2
  140. package/dist/runtime/risk-guard.d.ts.map +1 -1
  141. package/dist/runtime/risk-guard.js +441 -5
  142. package/dist/runtime/risk-guard.js.map +1 -1
  143. package/dist/runtime/run.d.ts +7 -0
  144. package/dist/runtime/run.d.ts.map +1 -1
  145. package/dist/runtime/run.js +3 -0
  146. package/dist/runtime/run.js.map +1 -1
  147. package/dist/runtime/runtime-schema.d.ts +1169 -24
  148. package/dist/runtime/runtime-schema.d.ts.map +1 -1
  149. package/dist/runtime/runtime-schema.js +105 -2
  150. package/dist/runtime/runtime-schema.js.map +1 -1
  151. package/dist/runtime/runtime.d.ts +26 -0
  152. package/dist/runtime/runtime.d.ts.map +1 -1
  153. package/dist/runtime/runtime.js +192 -6
  154. package/dist/runtime/runtime.js.map +1 -1
  155. package/dist/runtime/scanner-composition.d.ts +10 -0
  156. package/dist/runtime/scanner-composition.d.ts.map +1 -1
  157. package/dist/runtime/scanner-composition.js +10 -0
  158. package/dist/runtime/scanner-composition.js.map +1 -1
  159. package/dist/runtime/scanner-registry.d.ts +39 -1
  160. package/dist/runtime/scanner-registry.d.ts.map +1 -1
  161. package/dist/runtime/scanner-registry.js +105 -2
  162. package/dist/runtime/scanner-registry.js.map +1 -1
  163. package/dist/runtime/state-layout.d.ts +2 -0
  164. package/dist/runtime/state-layout.d.ts.map +1 -1
  165. package/dist/runtime/state-layout.js +1 -0
  166. package/dist/runtime/state-layout.js.map +1 -1
  167. package/dist/runtime/validate-action-prompts.d.ts +30 -0
  168. package/dist/runtime/validate-action-prompts.d.ts.map +1 -0
  169. package/dist/runtime/validate-action-prompts.js +110 -0
  170. package/dist/runtime/validate-action-prompts.js.map +1 -0
  171. package/dist/scanners/__tests__/test-helpers.d.ts +10 -0
  172. package/dist/scanners/__tests__/test-helpers.d.ts.map +1 -1
  173. package/dist/scanners/__tests__/test-helpers.js +52 -0
  174. package/dist/scanners/__tests__/test-helpers.js.map +1 -1
  175. package/dist/scanners/engine/engine.d.ts +37 -0
  176. package/dist/scanners/engine/engine.d.ts.map +1 -1
  177. package/dist/scanners/engine/engine.js +132 -14
  178. package/dist/scanners/engine/engine.js.map +1 -1
  179. package/dist/scanners/engine/result-builder.d.ts +16 -0
  180. package/dist/scanners/engine/result-builder.d.ts.map +1 -1
  181. package/dist/scanners/engine/result-builder.js +22 -0
  182. package/dist/scanners/engine/result-builder.js.map +1 -1
  183. package/dist/scanners/engine/strategy-registry.d.ts +2 -0
  184. package/dist/scanners/engine/strategy-registry.d.ts.map +1 -1
  185. package/dist/scanners/engine/strategy-registry.js +5 -1
  186. package/dist/scanners/engine/strategy-registry.js.map +1 -1
  187. package/dist/scanners/external-scanner-receiver.d.ts +118 -0
  188. package/dist/scanners/external-scanner-receiver.d.ts.map +1 -0
  189. package/dist/scanners/external-scanner-receiver.js +266 -0
  190. package/dist/scanners/external-scanner-receiver.js.map +1 -0
  191. package/dist/scanners/implementations/external-scanner.d.ts +17 -0
  192. package/dist/scanners/implementations/external-scanner.d.ts.map +1 -0
  193. package/dist/scanners/implementations/external-scanner.js +51 -0
  194. package/dist/scanners/implementations/external-scanner.js.map +1 -0
  195. package/dist/scanners/implementations/index.d.ts +1 -0
  196. package/dist/scanners/implementations/index.d.ts.map +1 -1
  197. package/dist/scanners/implementations/index.js +1 -0
  198. package/dist/scanners/implementations/index.js.map +1 -1
  199. package/dist/scanners/implementations/position-tracker.d.ts.map +1 -1
  200. package/dist/scanners/implementations/position-tracker.js +3 -1
  201. package/dist/scanners/implementations/position-tracker.js.map +1 -1
  202. package/dist/scanners/index.d.ts +4 -1
  203. package/dist/scanners/index.d.ts.map +1 -1
  204. package/dist/scanners/index.js +2 -0
  205. package/dist/scanners/index.js.map +1 -1
  206. package/dist/scanners/protocol/scanner.d.ts +3 -1
  207. package/dist/scanners/protocol/scanner.d.ts.map +1 -1
  208. package/dist/scanners/providers/client.d.ts.map +1 -1
  209. package/dist/scanners/providers/client.js +0 -8
  210. package/dist/scanners/providers/client.js.map +1 -1
  211. package/dist/scanners/runtime-module.d.ts +10 -0
  212. package/dist/scanners/runtime-module.d.ts.map +1 -1
  213. package/dist/scanners/runtime-module.js +19 -3
  214. package/dist/scanners/runtime-module.js.map +1 -1
  215. package/dist/scanners/scanner-definition.d.ts +12 -1
  216. package/dist/scanners/scanner-definition.d.ts.map +1 -1
  217. package/dist/scanners/types.d.ts +3 -0
  218. package/dist/scanners/types.d.ts.map +1 -1
  219. package/dist/scanners/types.js.map +1 -1
  220. package/dist/scripts/run-dsl-standalone-live.js +1 -1
  221. package/dist/scripts/run-dsl-standalone-live.js.map +1 -1
  222. package/dist/scripts/run-dsl-standalone-mock.js +1 -1
  223. package/dist/scripts/run-dsl-standalone-mock.js.map +1 -1
  224. package/dist/senpi/client.d.ts +27 -2
  225. package/dist/senpi/client.d.ts.map +1 -1
  226. package/dist/senpi/client.js +74 -1
  227. package/dist/senpi/client.js.map +1 -1
  228. package/dist/senpi/index.d.ts +1 -1
  229. package/dist/senpi/index.d.ts.map +1 -1
  230. package/dist/senpi/types.d.ts +68 -0
  231. package/dist/senpi/types.d.ts.map +1 -1
  232. package/dist/strategy/strategy-state.d.ts +4 -1
  233. package/dist/strategy/strategy-state.d.ts.map +1 -1
  234. package/dist/strategy/strategy-state.js +7 -2
  235. package/dist/strategy/strategy-state.js.map +1 -1
  236. package/dist/tracking/constants.d.ts +24 -0
  237. package/dist/tracking/constants.d.ts.map +1 -0
  238. package/dist/tracking/constants.js +46 -0
  239. package/dist/tracking/constants.js.map +1 -0
  240. package/dist/tracking/index.d.ts +12 -0
  241. package/dist/tracking/index.d.ts.map +1 -0
  242. package/dist/tracking/index.js +8 -0
  243. package/dist/tracking/index.js.map +1 -0
  244. package/dist/tracking/tracker.d.ts +22 -0
  245. package/dist/tracking/tracker.d.ts.map +1 -0
  246. package/dist/tracking/tracker.js +44 -0
  247. package/dist/tracking/tracker.js.map +1 -0
  248. package/dist/tracking/tracking-handler.d.ts +12 -0
  249. package/dist/tracking/tracking-handler.d.ts.map +1 -0
  250. package/dist/tracking/tracking-handler.js +148 -0
  251. package/dist/tracking/tracking-handler.js.map +1 -0
  252. package/dist/tracking/transport.d.ts +35 -0
  253. package/dist/tracking/transport.d.ts.map +1 -0
  254. package/dist/tracking/transport.js +117 -0
  255. package/dist/tracking/transport.js.map +1 -0
  256. package/dist/tracking/types.d.ts +21 -0
  257. package/dist/tracking/types.d.ts.map +1 -0
  258. package/dist/tracking/types.js +6 -0
  259. package/dist/tracking/types.js.map +1 -0
  260. package/dist/types/action.d.ts +13 -2
  261. package/dist/types/action.d.ts.map +1 -1
  262. package/dist/types/dsl/index.d.ts +3 -0
  263. package/dist/types/dsl/index.d.ts.map +1 -1
  264. package/dist/types/strategy.d.ts +9 -3
  265. package/dist/types/strategy.d.ts.map +1 -1
  266. package/dist/utils/logger.d.ts +1 -0
  267. package/dist/utils/logger.d.ts.map +1 -1
  268. package/dist/utils/logger.js +19 -1
  269. package/dist/utils/logger.js.map +1 -1
  270. package/dist/utils/resolve-order-type.d.ts +5 -0
  271. package/dist/utils/resolve-order-type.d.ts.map +1 -0
  272. package/dist/utils/resolve-order-type.js +29 -0
  273. package/dist/utils/resolve-order-type.js.map +1 -0
  274. package/examples/strategies/dsl-showcase.yaml +7 -2
  275. package/examples/strategies/dsl.yaml +5 -1
  276. package/examples/strategies/fox-minimal-loosened.yaml +18 -3
  277. package/examples/strategies/fox-minimal.yaml +25 -3
  278. package/examples/strategies/minimal.yaml +4 -2
  279. package/examples/strategies/momentum/how-it-works.md +47 -0
  280. package/examples/strategies/momentum/momentum-guarded.yaml +161 -0
  281. package/examples/strategies/risk-showcase.yaml +93 -0
  282. package/examples/strategies/viper.yaml +11 -3
  283. package/examples/strategies/wolf.yaml +11 -3
  284. package/examples/yamls/sample-with-dsl-and-emerging-movers.yaml +12 -4
  285. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-schema.d.ts","sourceRoot":"","sources":["../../src/runtime/runtime-schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtime-schema.d.ts","sourceRoot":"","sources":["../../src/runtime/runtime-schema.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAyCxB,QAAA,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCAaT,CAAC;AAEjB,QAAA,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCA+EtB,CAAC;AA6BH,QAAA,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCAUP,CAAC;AAEjB,QAAA,MAAM,eAAe;;;IAQnB,kFAAkF;;;;;;;;;;;;;;;;;IAAlF,kFAAkF;;;;;;;;;;;;;;;;;IAAlF,kFAAkF;;;;;;;;;;;;;;gCAQpE,CAAC;AAEjB,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAV9B,kFAAkF;;;;;;;;;;;;;;;;;QAAlF,kFAAkF;;;;;;;;;;;;;;;;;QAAlF,kFAAkF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAAlF,kFAAkF;;;;;;;;;;;;;;;;;QAAlF,kFAAkF;;;;;;;;;;;;;;;;;QAAlF,kFAAkF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAAlF,kFAAkF;;;;;;;;;;;;;;;;;QAAlF,kFAAkF;;;;;;;;;;;;;;;;;QAAlF,kFAAkF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAAlF,kFAAkF;;;;;;;;;;;;;;;;;QAAlF,kFAAkF;;;;;;;;;;;;;;;;;QAAlF,kFAAkF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAAlF,kFAAkF;;;;;;;;;;;;;;;;;QAAlF,kFAAkF;;;;;;;;;;;;;;;;;QAAlF,kFAAkF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCA8CjF,CAAC;AAEJ,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAChE,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAClE,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAChE,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC9D,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC"}
@@ -4,6 +4,22 @@
4
4
  */
5
5
  import { z } from "zod";
6
6
  const dependencyPolicyModeSchema = z.enum(["fail", "skip", "degrade"]);
7
+ const retentionPolicySchema = z.enum(["last_only", "rolling_window"]);
8
+ const externalFieldTypeSchema = z.enum([
9
+ "string",
10
+ "number",
11
+ "boolean",
12
+ "object",
13
+ "array",
14
+ ]);
15
+ const externalFieldSchema = z.object({
16
+ type: externalFieldTypeSchema,
17
+ required: z.boolean().optional(),
18
+ });
19
+ const scannerOutputsSchema = z.object({
20
+ signals: z.boolean(),
21
+ context: z.boolean(),
22
+ });
7
23
  const scannerDependencySchema = z.object({
8
24
  scanner: z.string().min(1),
9
25
  required: z.boolean().optional(),
@@ -11,11 +27,21 @@ const scannerDependencySchema = z.object({
11
27
  on_missing: dependencyPolicyModeSchema.optional(),
12
28
  on_stale: dependencyPolicyModeSchema.optional(),
13
29
  });
30
+ const guardRailsSchema = z.object({
31
+ daily_loss_limit_pct: z.number().min(0).optional(),
32
+ max_entries_per_day: z.number().int().min(1).optional(),
33
+ bypass_max_entries_per_day_on_profit: z.boolean().optional(),
34
+ max_consecutive_losses: z.number().int().min(1).optional(),
35
+ cooldown_minutes: z.number().min(1).optional(),
36
+ drawdown_halt_pct: z.number().min(0).max(100).optional(),
37
+ drawdown_reset_on_day_rollover: z.boolean().optional(),
38
+ per_asset_cooldown_minutes: z.number().min(5).optional(),
39
+ }).passthrough();
14
40
  const strategyEntrySchema = z.object({
15
41
  wallet: z.string().min(1, "strategy must have a wallet (e.g. wallet: \"your-address\")"),
16
- budget: z.union([z.number(), z.string()]).optional(),
17
42
  slots: z.number().optional(),
18
43
  margin_per_slot: z.number().optional(),
44
+ margin_pct: z.number().positive().max(100).optional(),
19
45
  trading_risk: z.enum(['conservative', 'moderate', 'aggressive']).optional(),
20
46
  default_leverage: z.number().optional(),
21
47
  leverage_multipliers: z.object({
@@ -31,9 +57,74 @@ const scannerEntrySchema = z.object({
31
57
  interval: z.string().optional(),
32
58
  depends_on: z.array(scannerDependencySchema).optional(),
33
59
  blocked_assets: z.array(z.string()).optional(),
60
+ outputs: scannerOutputsSchema.optional(),
61
+ retention: retentionPolicySchema.optional(),
62
+ retention_max_runs: z.number().int().positive().optional(),
34
63
  config: z.record(z.string(), z.unknown()).optional(),
35
64
  advanced: z.record(z.string(), z.unknown()).optional(),
36
- }).passthrough();
65
+ }).passthrough().superRefine((data, ctx) => {
66
+ if (data.type !== "external_scanner") {
67
+ return;
68
+ }
69
+ if (data.interval !== undefined) {
70
+ ctx.addIssue({
71
+ code: z.ZodIssueCode.custom,
72
+ path: ["interval"],
73
+ message: "external_scanner does not allow interval; it is push-driven.",
74
+ });
75
+ }
76
+ if (Array.isArray(data.depends_on) && data.depends_on.length > 0) {
77
+ ctx.addIssue({
78
+ code: z.ZodIssueCode.custom,
79
+ path: ["depends_on"],
80
+ message: "external_scanner does not support depends_on; push-driven scanners do not consume upstream artifacts. Declare depends_on on the consuming scanner instead.",
81
+ });
82
+ }
83
+ if (!data.outputs) {
84
+ ctx.addIssue({
85
+ code: z.ZodIssueCode.custom,
86
+ path: ["outputs"],
87
+ message: "external_scanner requires outputs.signals and outputs.context.",
88
+ });
89
+ }
90
+ else {
91
+ if (!data.outputs.signals && !data.outputs.context) {
92
+ ctx.addIssue({
93
+ code: z.ZodIssueCode.custom,
94
+ path: ["outputs"],
95
+ message: "external_scanner must enable at least one of outputs.signals or outputs.context.",
96
+ });
97
+ }
98
+ }
99
+ if (!isRecord(data.config)) {
100
+ ctx.addIssue({
101
+ code: z.ZodIssueCode.custom,
102
+ path: ["config"],
103
+ message: "external_scanner requires config.fields.",
104
+ });
105
+ return;
106
+ }
107
+ const fields = data.config.fields;
108
+ if (!isRecord(fields) || Object.keys(fields).length === 0) {
109
+ ctx.addIssue({
110
+ code: z.ZodIssueCode.custom,
111
+ path: ["config", "fields"],
112
+ message: "external_scanner requires a non-empty config.fields map.",
113
+ });
114
+ return;
115
+ }
116
+ for (const [fieldName, rawField] of Object.entries(fields)) {
117
+ const parsed = externalFieldSchema.safeParse(rawField);
118
+ if (!parsed.success) {
119
+ for (const issue of parsed.error.issues) {
120
+ ctx.addIssue({
121
+ ...issue,
122
+ path: ["config", "fields", fieldName, ...issue.path],
123
+ });
124
+ }
125
+ }
126
+ }
127
+ });
37
128
  const signalContextEntrySchema = z.object({
38
129
  type: z.literal("signal"),
39
130
  scanner: z.string().min(1),
@@ -78,6 +169,11 @@ const exitBlockSchema = z.object({
78
169
  /** Single DSL exit profile. Shape validated again in DSL parse / unknown-keys. */
79
170
  dsl_preset: z.record(z.string(), z.unknown()).optional(),
80
171
  sm_flip: z.unknown().optional(),
172
+ order_type: z.enum(['MARKET', 'FEE_OPTIMIZED_LIMIT']).optional(),
173
+ fee_optimized_limit_options: z.object({
174
+ ensure_execution_as_taker: z.boolean().optional(),
175
+ execution_timeout_seconds: z.number().int().min(1).max(300).optional(),
176
+ }).optional(),
81
177
  }).passthrough();
82
178
  export const runtimeConfigSchema = z.object({
83
179
  name: z.string().min(1, "name is required at the top (e.g. name: my-recipe)"),
@@ -90,6 +186,10 @@ export const runtimeConfigSchema = z.object({
90
186
  health: z.record(z.string(), z.unknown()).optional(),
91
187
  hooks: z.array(z.unknown()).optional(),
92
188
  notifications: z.record(z.string(), z.unknown()).optional(),
189
+ risk: z.object({
190
+ data_retention_hours: z.number().int().min(1).max(168).optional(),
191
+ guard_rails: guardRailsSchema.optional(),
192
+ }).optional(),
93
193
  advanced: z.record(z.string(), z.unknown()).optional(),
94
194
  })
95
195
  .passthrough()
@@ -107,4 +207,7 @@ export const runtimeConfigSchema = z.object({
107
207
  }, {
108
208
  message: "when using actions that depend on scanners (e.g. OPEN_POSITION), you must also add a non-empty 'scanners:' block",
109
209
  });
210
+ function isRecord(value) {
211
+ return value !== null && typeof value === "object" && !Array.isArray(value);
212
+ }
110
213
  //# sourceMappingURL=runtime-schema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-schema.js","sourceRoot":"","sources":["../../src/runtime/runtime-schema.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,0BAA0B,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;AAEvE,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAChC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACrC,UAAU,EAAE,0BAA0B,CAAC,QAAQ,EAAE;IACjD,QAAQ,EAAE,0BAA0B,CAAC,QAAQ,EAAE;CAChD,CAAC,CAAC;AAEH,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,6DAA6D,CAAC;IACxF,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE;IACpD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACtC,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC3E,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACvC,oBAAoB,EAAE,CAAC,CAAC,MAAM,CAAC;QAC7B,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACnC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC/B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAClC,CAAC,CAAC,QAAQ,EAAE;IACb,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CAChC,CAAC,CAAC,WAAW,EAAE,CAAC;AAEjB,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,QAAQ,EAAE;IACvD,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC9C,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;IACpD,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;CACvD,CAAC,CAAC,WAAW,EAAE,CAAC;AAEjB,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;IACzB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAC3B,CAAC,CAAC;AAEH,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;IAC1B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAC3B,CAAC,CAAC;AAEH,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;IAC3B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CACzB,CAAC,CAAC;AAEH,MAAM,4BAA4B,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;IAC9B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;CAClB,CAAC,CAAC;AAEH,MAAM,kBAAkB,GAAG,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE;IACtD,wBAAwB;IACxB,yBAAyB;IACzB,0BAA0B;IAC1B,4BAA4B;CAC7B,CAAC,CAAC;AAEH,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACrC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACxC,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACrC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,QAAQ,EAAE;IAC/C,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACtC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;CACrD,CAAC,CAAC,WAAW,EAAE,CAAC;AAEjB,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,gBAAgB,EAAE,CAAC;SAChB,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,CAAC,EAAE,0CAA0C,CAAC;SAClD,GAAG,CAAC,IAAI,EAAE,kCAAkC,CAAC;SAC7C,QAAQ,EAAE;IACb,kFAAkF;IAClF,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;IACxD,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CAChC,CAAC,CAAC,WAAW,EAAE,CAAC;AAEjB,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,oDAAoD,CAAC;IAC7E,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACzE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,QAAQ,EAAE,mBAAmB;IAC7B,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,QAAQ,EAAE;IAChD,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,QAAQ,EAAE;IAC9C,IAAI,EAAE,eAAe,CAAC,QAAQ,EAAE;IAChC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;IACpD,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;IACtC,aAAa,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC3D,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;CACvD,CAAC;KACC,WAAW,EAAE;KACb,MAAM,CACL,CAAC,IAAI,EAAE,EAAE;IACP,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;IAC7B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACjE,MAAM,eAAe,GAAG,OAAO,CAAC,IAAI,CAClC,CAAC,CAA+C,EAAE,EAAE,CAClD,CAAC,CAAC,WAAW,KAAK,eAAe;QACjC,CAAC,CAAC,WAAW,KAAK,gBAAgB;QAClC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CACvD,CAAC;IACF,IAAI,CAAC,eAAe;QAAE,OAAO,IAAI,CAAC;IAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IAC/B,OAAO,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;AACxD,CAAC,EACD;IACE,OAAO,EACL,kHAAkH;CACrH,CACF,CAAC"}
1
+ {"version":3,"file":"runtime-schema.js","sourceRoot":"","sources":["../../src/runtime/runtime-schema.ts"],"names":[],"mappings":"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"}
@@ -2,10 +2,12 @@
2
2
  * Runtime: orchestrates trading recipe config, scanner module, actions, DSL, risk, health.
3
3
  */
4
4
  import type { RuntimeConfig } from "./runtime-config.js";
5
+ import type { ExternalScannerIngestRequest, ExternalScannerIngestResult } from "../scanners/external-scanner-receiver.js";
5
6
  import type { McpTransport } from "../senpi/types.js";
6
7
  import type { ScannerDataProviders } from "../scanners/engine/data-providers.js";
7
8
  import { DslPlugin as DslPluginClass } from "../dsl/plugin/index.js";
8
9
  import type { RuntimeHealthStatus, RuntimeSystemState } from "../health/types.js";
10
+ import type { ActionExecutionRecord, ActionFilter, ActionLatestState, ReadActionHistoryOptions } from "../actions/store/types.js";
9
11
  export interface RuntimeOptions {
10
12
  stateDir: string;
11
13
  mcpTransport?: McpTransport;
@@ -22,6 +24,7 @@ export declare class Runtime {
22
24
  private dslPlugin;
23
25
  private senpi;
24
26
  private healthStateModule;
27
+ private trackingHandler;
25
28
  private started;
26
29
  private startedAt;
27
30
  /** Serial signal processing: queue and consumer so only one signal is handled at a time. */
@@ -31,12 +34,35 @@ export declare class Runtime {
31
34
  private signalConsumerDone;
32
35
  private runActionsForSignal;
33
36
  private strategyConfig;
37
+ private actionRuntimeModule;
34
38
  /** Stored so we can call off() in stop() and avoid retaining Runtime via scanner EventEmitter. */
35
39
  private onScannerRunComplete;
40
+ /** Action-layer Telegram subscriber (open submit / close); disposed in {@link Runtime.stop}. */
41
+ private actionNotificationSubscriber;
36
42
  constructor(config: RuntimeConfig, options: RuntimeOptions);
37
43
  get dsl(): DslPluginClass | null;
38
44
  getHealthStatus(): Promise<RuntimeHealthStatus | null>;
39
45
  getSystemState(): Promise<RuntimeSystemState | null>;
46
+ /**
47
+ * Latest persisted snapshots for actions under this runtime's state directory
48
+ * (optionally filtered by wallet address and/or action name).
49
+ */
50
+ listActionLatestStates(filter?: ActionFilter): Promise<ActionLatestState[]>;
51
+ /** Full `latest.json` for one action instance, or null when missing. */
52
+ getActionLatestState(address: string, actionName: string): Promise<ActionLatestState | null>;
53
+ /** Rolling JSONL execution history for one action. */
54
+ getActionExecutionHistory(address: string, actionName: string, opts?: ReadActionHistoryOptions): Promise<ActionExecutionRecord[]>;
55
+ /**
56
+ * Accepts one external scanner ingest request for the runtime's configured
57
+ * strategy.
58
+ *
59
+ * The runtime stays intentionally thin here: scanner-specific validation,
60
+ * lifecycle emission, signal persistence, retained-context storage, and
61
+ * retention all remain owned by the
62
+ * scanner module so the ingest path cannot drift from normal scanner
63
+ * behavior.
64
+ */
65
+ ingestExternalScannerData(request: ExternalScannerIngestRequest): Promise<ExternalScannerIngestResult>;
40
66
  start(): Promise<void>;
41
67
  /**
42
68
  * Cancel exchange SLs and archive DSL state for the strategy, then log removal.
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/runtime/runtime.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAIzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAyBjF,OAAO,EAAE,SAAS,IAAI,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAOrE,OAAO,KAAK,EAEV,mBAAmB,EACnB,kBAAkB,EAEnB,MAAM,oBAAoB,CAAC;AAI5B,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,oBAAoB,CAAC;CACzC;AAOD,qBAAa,OAAO;IAClB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IACzC,OAAO,CAAC,GAAG,CAAiB;IAC5B,OAAO,CAAC,UAAU,CAAuC;IACzD,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,aAAa,CAAwB;IAC7C,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,KAAK,CAA4B;IACzC,OAAO,CAAC,iBAAiB,CAAkC;IAC3D,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAuB;IAExC,4FAA4F;IAC5F,OAAO,CAAC,WAAW,CAAyB;IAC5C,OAAO,CAAC,eAAe,CAA6B;IACpD,OAAO,CAAC,qBAAqB,CAAS;IACtC,OAAO,CAAC,kBAAkB,CAA8B;IACxD,OAAO,CAAC,mBAAmB,CAAuC;IAClE,OAAO,CAAC,cAAc,CAAkB;IAExC,kGAAkG;IAClG,OAAO,CAAC,oBAAoB,CAA0D;gBAE1E,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,cAAc;IAK1D,IAAI,GAAG,IAAI,cAAc,GAAG,IAAI,CAE/B;IAEK,eAAe,IAAI,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAItD,cAAc,IAAI,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAIpD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA6J5B;;OAEG;IACG,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOpD,0FAA0F;IACpF,6BAA6B,IAAI,OAAO,CAAC,IAAI,CAAC;IAIpD;;OAEG;YACW,iBAAiB;IA2CzB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CA+B5B"}
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/runtime/runtime.ts"],"names":[],"mappings":"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"}
@@ -7,7 +7,9 @@ import { SenpiClient } from "../senpi/client.js";
7
7
  import { createLlmDecision } from "../actions/llm-decision/index.js";
8
8
  import { StateManager } from "../state/index.js";
9
9
  import { createContextBuilder } from "../context/index.js";
10
- import { createRiskGuard } from "./risk-guard.js";
10
+ import { createRiskGuard, createRiskGuardStub } from "./risk-guard.js";
11
+ // RiskGuardianService removed — gate decisions are now real-time in checkGate
12
+ import { createRiskAuditLog } from "../risk/risk-audit-log.js";
11
13
  import { createNotificationService } from "./notifications.js";
12
14
  import { resolveStrategyConfig } from "./map-strategies.js";
13
15
  import { mapRuntimeExitToDslConfig } from "./map-exit-config.js";
@@ -15,6 +17,7 @@ import { buildActionScanPayload } from "./build-action-scan-payload.js";
15
17
  import { createScannerModuleFromRuntimeConfig } from "./create-scanner-module.js";
16
18
  import { createRuntimeContext, createStrategyStatesMap } from "./create-runtime-context.js";
17
19
  import { createActions } from "./create-actions.js";
20
+ import { ActionRuntimeModule } from "../actions/action-runtime-module.js";
18
21
  import { validateDslPositionTracking } from "./validate-dsl-position-tracking.js";
19
22
  import { ScannerRegistry } from "./scanner-registry.js";
20
23
  import { ActionRegistry } from "./action-registry.js";
@@ -22,9 +25,13 @@ import { initRisk } from "../risk/index.js";
22
25
  import { createHealthStateModule, } from "../health/index.js";
23
26
  import { DslPlugin as DslPluginClass } from "../dsl/plugin/index.js";
24
27
  import { HOOK_EVENT } from "../types/hooks.js";
28
+ import { createActionNotificationSubscriber, isActionLifecycleNotificationsEnabled } from "../actions/notifications/index.js";
25
29
  import { MaxLeverageCache } from "../leverage/max-leverage-cache.js";
26
30
  import { buildStateLayout } from "./state-layout.js";
27
31
  import { createLogger } from "../utils/logger.js";
32
+ import { createTrackingHandler, EventTracker, BatchingTransport, NoOpTransport, TRACKING_API_BASE_URL, } from "../tracking/index.js";
33
+ import { VERSION } from "../version.js";
34
+ import { randomUUID } from "node:crypto";
28
35
  const logger = createLogger("[senpi-core][runtime]");
29
36
  export class Runtime {
30
37
  config;
@@ -34,8 +41,10 @@ export class Runtime {
34
41
  stateManager;
35
42
  scannerModule;
36
43
  dslPlugin = null;
44
+ // riskGuardian removed — gate decisions are now real-time in checkGate
37
45
  senpi = null;
38
46
  healthStateModule = null;
47
+ trackingHandler = null;
39
48
  started = false;
40
49
  startedAt = null;
41
50
  /** Serial signal processing: queue and consumer so only one signal is handled at a time. */
@@ -45,8 +54,11 @@ export class Runtime {
45
54
  signalConsumerDone = null;
46
55
  runActionsForSignal;
47
56
  strategyConfig;
57
+ actionRuntimeModule;
48
58
  /** Stored so we can call off() in stop() and avoid retaining Runtime via scanner EventEmitter. */
49
59
  onScannerRunComplete = null;
60
+ /** Action-layer Telegram subscriber (open submit / close); disposed in {@link Runtime.stop}. */
61
+ actionNotificationSubscriber = null;
50
62
  constructor(config, options) {
51
63
  this.config = config;
52
64
  this.options = options;
@@ -60,6 +72,37 @@ export class Runtime {
60
72
  async getSystemState() {
61
73
  return this.healthStateModule?.getSystemState() ?? null;
62
74
  }
75
+ /**
76
+ * Latest persisted snapshots for actions under this runtime's state directory
77
+ * (optionally filtered by wallet address and/or action name).
78
+ */
79
+ listActionLatestStates(filter) {
80
+ return this.actionRuntimeModule.readAllLatest(filter);
81
+ }
82
+ /** Full `latest.json` for one action instance, or null when missing. */
83
+ getActionLatestState(address, actionName) {
84
+ return this.actionRuntimeModule.readLatest(address, actionName);
85
+ }
86
+ /** Rolling JSONL execution history for one action. */
87
+ getActionExecutionHistory(address, actionName, opts) {
88
+ return this.actionRuntimeModule.readHistory(address, actionName, opts);
89
+ }
90
+ /**
91
+ * Accepts one external scanner ingest request for the runtime's configured
92
+ * strategy.
93
+ *
94
+ * The runtime stays intentionally thin here: scanner-specific validation,
95
+ * lifecycle emission, signal persistence, retained-context storage, and
96
+ * retention all remain owned by the
97
+ * scanner module so the ingest path cannot drift from normal scanner
98
+ * behavior.
99
+ */
100
+ async ingestExternalScannerData(request) {
101
+ if (!this.started) {
102
+ throw new Error("Runtime must be started before accepting external scanner ingests.");
103
+ }
104
+ return this.scannerModule.ingestExternalScannerData(this.strategyConfig.address, request);
105
+ }
63
106
  async start() {
64
107
  if (this.started)
65
108
  return;
@@ -72,7 +115,7 @@ export class Runtime {
72
115
  // Validation: every scanner type and action_type must be in registries
73
116
  for (const sc of this.config.scanners ?? []) {
74
117
  if (!ScannerRegistry.get(sc.type)) {
75
- throw new Error(`Unknown scanner type: ${sc.type}`);
118
+ throw new Error(`Scanner '${sc.name}': ${ScannerRegistry.formatUnknownScannerTypeError(sc.type)}`);
76
119
  }
77
120
  }
78
121
  for (const ac of this.config.actions ?? []) {
@@ -87,6 +130,14 @@ export class Runtime {
87
130
  validateDslPositionTracking(this.config, hasDsl);
88
131
  this.bus = createRuntimeBus();
89
132
  this.hookSystem = createHookSystem(this.bus);
133
+ // Wire event tracking (passive bus subscriber — never blocks trading logic)
134
+ const trackingApiKey = apiKey ?? process.env.SENPI_API_KEY;
135
+ const trackingBaseUrl = process.env.SENPI_TRACKING_URL ?? TRACKING_API_BASE_URL;
136
+ const trackingTransport = trackingApiKey
137
+ ? new BatchingTransport({ baseUrl: trackingBaseUrl, apiKey: trackingApiKey })
138
+ : new NoOpTransport();
139
+ const tracker = new EventTracker(trackingTransport, this.config.name, VERSION);
140
+ this.trackingHandler = createTrackingHandler(this.bus, tracker);
90
141
  this.stateManager = new StateManager(stateDir);
91
142
  await this.stateManager.hydrate();
92
143
  const senpi = mcpTransport
@@ -105,11 +156,21 @@ export class Runtime {
105
156
  // }
106
157
  const llmDecision = createLlmDecision({});
107
158
  const contextBuilder = createContextBuilder();
108
- const riskGuard = createRiskGuard();
109
159
  const notifications = createNotificationService({
110
160
  ...this.config.notifications,
111
161
  mcpTransport: this.options.mcpTransport,
112
162
  });
163
+ const riskBlock = this.config.risk;
164
+ const strategyAddress = this.strategyConfig.address;
165
+ const auditLog = riskBlock ? createRiskAuditLog(stateDir) : undefined;
166
+ const riskGuard = riskBlock && senpi
167
+ ? createRiskGuard({
168
+ senpi,
169
+ notifications,
170
+ strategies: new Map([[strategyAddress, this.strategyConfig]]),
171
+ auditLog,
172
+ })
173
+ : createRiskGuardStub();
113
174
  logger.info("Runtime.start() creating scanner module");
114
175
  const layout = buildStateLayout(stateDir);
115
176
  // Augment caller-supplied providers with StateManager-backed DSL state access
@@ -139,7 +200,8 @@ export class Runtime {
139
200
  scannerModule: this.scannerModule,
140
201
  maxLeverageCache,
141
202
  });
142
- const { runActionsForSignal } = createActions(this.config, {
203
+ this.actionRuntimeModule = new ActionRuntimeModule({ stateDir: layout.actionRoot });
204
+ const { runActionsForSignal } = await createActions(this.config, {
143
205
  bus: this.bus,
144
206
  senpi,
145
207
  stateManager: this.stateManager,
@@ -149,10 +211,11 @@ export class Runtime {
149
211
  riskGuard,
150
212
  notifications,
151
213
  runtimeContext,
214
+ actionModule: this.actionRuntimeModule,
152
215
  });
153
216
  this.runActionsForSignal = runActionsForSignal;
217
+ const notificationsConfig = this.config.notifications;
154
218
  if (hasDsl) {
155
- const notificationsConfig = this.config.notifications;
156
219
  const dslNotificationsDisabled = notificationsConfig?.dsl_lifecycle === false;
157
220
  const dslNotifySlUpdates = notificationsConfig?.dsl_notify_sl_updates === true;
158
221
  this.dslPlugin = await DslPluginClass.create({
@@ -170,6 +233,14 @@ export class Runtime {
170
233
  else {
171
234
  this.dslPlugin = null;
172
235
  }
236
+ if (isActionLifecycleNotificationsEnabled(notificationsConfig)) {
237
+ this.actionNotificationSubscriber = createActionNotificationSubscriber(this.bus, notifications, {
238
+ strategyName: this.config.name,
239
+ });
240
+ }
241
+ else {
242
+ this.actionNotificationSubscriber = null;
243
+ }
173
244
  initRisk(this.bus);
174
245
  this.healthStateModule = createHealthStateModule({
175
246
  runtimeName: this.config.name,
@@ -178,6 +249,10 @@ export class Runtime {
178
249
  providers: {
179
250
  scanners: this.scannerModule,
180
251
  dsl: this.dslPlugin ?? createDisabledDslProvider(),
252
+ actions: this.actionRuntimeModule,
253
+ risk: riskBlock
254
+ ? createRiskHealthProvider(riskGuard, strategyAddress)
255
+ : undefined,
181
256
  },
182
257
  });
183
258
  this.onScannerRunComplete = (event) => {
@@ -187,6 +262,12 @@ export class Runtime {
187
262
  this.signalQueueWait = null;
188
263
  w();
189
264
  }
265
+ // Emit scanner run for tracking
266
+ this.bus.emit("tracking.scanner_run", {
267
+ address: event.result.address,
268
+ data: event.result,
269
+ timestamp: new Date().toISOString(),
270
+ });
190
271
  // Forward scanner summary alerts (e.g. watchdog) to notification service
191
272
  const alerts = event.result.summary?.alerts;
192
273
  if (Array.isArray(alerts) && alerts.length > 0) {
@@ -201,6 +282,18 @@ export class Runtime {
201
282
  await this.scannerModule.start();
202
283
  logger.info("Runtime.start() scannerModule.start() returned");
203
284
  this.started = true;
285
+ this.bus.emit("tracking.runtime_started", {
286
+ address: this.strategyConfig.address,
287
+ data: {
288
+ config: this.config,
289
+ strategyAddress: this.strategyConfig.address,
290
+ runtimeVersion: VERSION,
291
+ hasDsl: this.dslPlugin != null,
292
+ scannerCount: this.config.scanners?.length ?? 0,
293
+ actionCount: this.config.actions?.length ?? 0,
294
+ },
295
+ timestamp: new Date().toISOString(),
296
+ });
204
297
  }
205
298
  /**
206
299
  * Cancel exchange SLs and archive DSL state for the strategy, then log removal.
@@ -237,11 +330,15 @@ export class Runtime {
237
330
  usedSlotsByStrategy,
238
331
  address: item.result.address,
239
332
  });
333
+ const correlationId = randomUUID();
240
334
  const hookEvent = {
241
335
  type: HOOK_EVENT.ON_SIGNAL_DETECTED,
242
336
  runtimeName: this.config.name,
243
337
  address: item.result.address,
244
- data: payload,
338
+ data: {
339
+ ...payload,
340
+ __correlationId: correlationId,
341
+ },
245
342
  timestamp: new Date().toISOString(),
246
343
  };
247
344
  this.bus.emit(HOOK_EVENT.ON_SIGNAL_DETECTED, hookEvent);
@@ -264,6 +361,15 @@ export class Runtime {
264
361
  if (!this.started)
265
362
  return;
266
363
  this.started = false;
364
+ this.bus.emit("tracking.runtime_stopped", {
365
+ address: this.strategyConfig.address,
366
+ data: {
367
+ uptimeMs: Date.now() - (this.startedAt ?? Date.now()),
368
+ runtimeVersion: VERSION,
369
+ strategyAddress: this.strategyConfig.address,
370
+ },
371
+ timestamp: new Date().toISOString(),
372
+ });
267
373
  this.signalConsumerStopped = true;
268
374
  if (this.signalQueueWait) {
269
375
  const w = this.signalQueueWait;
@@ -274,10 +380,15 @@ export class Runtime {
274
380
  await this.signalConsumerDone;
275
381
  this.signalConsumerDone = null;
276
382
  }
383
+ // riskGuardian cleanup removed — no background timer to stop
277
384
  if (this.onScannerRunComplete != null) {
278
385
  this.scannerModule.off("scanner:run:complete", this.onScannerRunComplete);
279
386
  this.onScannerRunComplete = null;
280
387
  }
388
+ if (this.actionNotificationSubscriber != null) {
389
+ this.actionNotificationSubscriber.dispose();
390
+ this.actionNotificationSubscriber = null;
391
+ }
281
392
  await this.scannerModule.stop();
282
393
  if (this.dslPlugin) {
283
394
  this.dslPlugin.stop();
@@ -288,11 +399,86 @@ export class Runtime {
288
399
  this.senpi = null;
289
400
  }
290
401
  this.healthStateModule = null;
402
+ if (this.trackingHandler) {
403
+ await this.trackingHandler.dispose();
404
+ this.trackingHandler = null;
405
+ }
291
406
  if (this.bus.removeAllListeners) {
292
407
  this.bus.removeAllListeners();
293
408
  }
294
409
  }
295
410
  }
411
+ function deriveRiskHealth(gates) {
412
+ if (gates.some((g) => !g.evaluationOk))
413
+ return "unhealthy";
414
+ return "healthy";
415
+ }
416
+ function deriveEligibility(gates) {
417
+ for (const g of gates) {
418
+ if (g.status === "CLOSED")
419
+ return "CLOSED";
420
+ }
421
+ for (const g of gates) {
422
+ if (g.status === "COOLDOWN")
423
+ return "COOLDOWN";
424
+ }
425
+ return "OPEN";
426
+ }
427
+ function createRiskHealthProvider(riskGuard, strategyAddress) {
428
+ async function evaluate() {
429
+ const result = await riskGuard.checkGate(strategyAddress, {
430
+ evaluateAll: true,
431
+ source: "cli",
432
+ });
433
+ return result;
434
+ }
435
+ return {
436
+ async getHealthStatus() {
437
+ const result = await evaluate();
438
+ const gates = result.gates ?? [];
439
+ const health = deriveRiskHealth(gates);
440
+ const eligibility = deriveEligibility(gates);
441
+ return {
442
+ component: "risk",
443
+ health,
444
+ updatedAt: new Date().toISOString(),
445
+ summary: health === "healthy"
446
+ ? `Risk gates evaluated (${eligibility})`
447
+ : `Risk gate evaluation failures detected (${eligibility})`,
448
+ enabled: true,
449
+ eligibility,
450
+ totals: {
451
+ gatesEvaluated: gates.length,
452
+ open: gates.filter((g) => g.status === "OPEN").length,
453
+ cooldown: gates.filter((g) => g.status === "COOLDOWN").length,
454
+ closed: gates.filter((g) => g.status === "CLOSED").length,
455
+ na: gates.filter((g) => g.status === "N_A").length,
456
+ fallbackCount: gates.filter((g) => g.fallbackApplied).length,
457
+ failedCount: gates.filter((g) => !g.evaluationOk).length,
458
+ },
459
+ gates,
460
+ };
461
+ },
462
+ async getSystemState() {
463
+ const result = await evaluate();
464
+ const gates = result.gates ?? [];
465
+ const health = deriveRiskHealth(gates);
466
+ const eligibility = deriveEligibility(gates);
467
+ return {
468
+ component: "risk",
469
+ health,
470
+ updatedAt: new Date().toISOString(),
471
+ state: {
472
+ enabled: true,
473
+ eligibility,
474
+ source: "cli",
475
+ checkedAt: new Date().toISOString(),
476
+ gates,
477
+ },
478
+ };
479
+ },
480
+ };
481
+ }
296
482
  function createDisabledDslProvider() {
297
483
  return {
298
484
  async getHealthStatus() {