@senpi/runtime 3.0.6-dev.skill-manager-v2.20260629194505 → 3.0.9-dev.20260710204324

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 (472) hide show
  1. package/dist/actions/action-events.d.ts +67 -0
  2. package/dist/actions/action-events.d.ts.map +1 -0
  3. package/dist/actions/action-events.js +164 -0
  4. package/dist/actions/action-events.js.map +1 -0
  5. package/dist/actions/close-position/close-position.action.d.ts +1 -1
  6. package/dist/actions/close-position/close-position.action.d.ts.map +1 -1
  7. package/dist/actions/close-position/close-position.action.js +108 -86
  8. package/dist/actions/close-position/close-position.action.js.map +1 -1
  9. package/dist/actions/decision-engine.d.ts.map +1 -1
  10. package/dist/actions/decision-engine.js +40 -28
  11. package/dist/actions/decision-engine.js.map +1 -1
  12. package/dist/actions/event-derivation.d.ts +61 -0
  13. package/dist/actions/event-derivation.d.ts.map +1 -0
  14. package/dist/actions/event-derivation.js +180 -0
  15. package/dist/actions/event-derivation.js.map +1 -0
  16. package/dist/actions/llm-decision/anthropic-llm-decision.d.ts +5 -9
  17. package/dist/actions/llm-decision/anthropic-llm-decision.d.ts.map +1 -1
  18. package/dist/actions/llm-decision/anthropic-llm-decision.js +6 -87
  19. package/dist/actions/llm-decision/anthropic-llm-decision.js.map +1 -1
  20. package/dist/actions/llm-decision/factory.d.ts +0 -6
  21. package/dist/actions/llm-decision/factory.d.ts.map +1 -1
  22. package/dist/actions/llm-decision/factory.js +0 -2
  23. package/dist/actions/llm-decision/factory.js.map +1 -1
  24. package/dist/actions/llm-decision/openclaw-llm-decision.d.ts.map +1 -1
  25. package/dist/actions/llm-decision/openclaw-llm-decision.js +26 -7
  26. package/dist/actions/llm-decision/openclaw-llm-decision.js.map +1 -1
  27. package/dist/actions/open-position/open-position.action.d.ts +1 -1
  28. package/dist/actions/open-position/open-position.action.d.ts.map +1 -1
  29. package/dist/actions/open-position/open-position.action.js +282 -224
  30. package/dist/actions/open-position/open-position.action.js.map +1 -1
  31. package/dist/actions/position-tracker/position-tracker.action.d.ts.map +1 -1
  32. package/dist/actions/position-tracker/position-tracker.action.js +3 -6
  33. package/dist/actions/position-tracker/position-tracker.action.js.map +1 -1
  34. package/dist/cli/guide-commands.d.ts.map +1 -1
  35. package/dist/cli/guide-commands.js +61 -0
  36. package/dist/cli/guide-commands.js.map +1 -1
  37. package/dist/cli/senpi-commands.d.ts +14 -0
  38. package/dist/cli/senpi-commands.d.ts.map +1 -1
  39. package/dist/cli/senpi-commands.js +390 -2
  40. package/dist/cli/senpi-commands.js.map +1 -1
  41. package/dist/dsl/engine-client/event-mapping.d.ts.map +1 -1
  42. package/dist/dsl/engine-client/event-mapping.js +0 -3
  43. package/dist/dsl/engine-client/event-mapping.js.map +1 -1
  44. package/dist/dsl/events/build-closed-event.d.ts.map +1 -1
  45. package/dist/dsl/events/build-closed-event.js +0 -1
  46. package/dist/dsl/events/build-closed-event.js.map +1 -1
  47. package/dist/dsl/events/handlers.d.ts.map +1 -1
  48. package/dist/dsl/events/handlers.js +2 -4
  49. package/dist/dsl/events/handlers.js.map +1 -1
  50. package/dist/dsl/events/initial-state.d.ts.map +1 -1
  51. package/dist/dsl/events/initial-state.js +1 -0
  52. package/dist/dsl/events/initial-state.js.map +1 -1
  53. package/dist/dsl/monitor/create-monitor.d.ts +3 -0
  54. package/dist/dsl/monitor/create-monitor.d.ts.map +1 -1
  55. package/dist/dsl/monitor/create-monitor.js +76 -58
  56. package/dist/dsl/monitor/create-monitor.js.map +1 -1
  57. package/dist/dsl/monitor/dsl-failure-events.d.ts +42 -0
  58. package/dist/dsl/monitor/dsl-failure-events.d.ts.map +1 -0
  59. package/dist/dsl/monitor/dsl-failure-events.js +73 -0
  60. package/dist/dsl/monitor/dsl-failure-events.js.map +1 -0
  61. package/dist/dsl/monitor/process-one-position.d.ts +2 -1
  62. package/dist/dsl/monitor/process-one-position.d.ts.map +1 -1
  63. package/dist/dsl/monitor/process-one-position.js +130 -196
  64. package/dist/dsl/monitor/process-one-position.js.map +1 -1
  65. package/dist/dsl/plugin/index.d.ts +10 -0
  66. package/dist/dsl/plugin/index.d.ts.map +1 -1
  67. package/dist/dsl/plugin/index.js +48 -4
  68. package/dist/dsl/plugin/index.js.map +1 -1
  69. package/dist/dsl/plugin/options.d.ts +3 -0
  70. package/dist/dsl/plugin/options.d.ts.map +1 -1
  71. package/dist/health/types.d.ts +14 -0
  72. package/dist/health/types.d.ts.map +1 -1
  73. package/dist/health/types.js.map +1 -1
  74. package/dist/index.d.ts +1 -0
  75. package/dist/index.d.ts.map +1 -1
  76. package/dist/index.js +264 -79
  77. package/dist/index.js.map +1 -1
  78. package/dist/risk/risk-audit-log.d.ts +7 -0
  79. package/dist/risk/risk-audit-log.d.ts.map +1 -1
  80. package/dist/risk/risk-audit-log.js +48 -1
  81. package/dist/risk/risk-audit-log.js.map +1 -1
  82. package/dist/runtime/__tests__/helpers/runtime-gateway-harness.d.ts +2 -0
  83. package/dist/runtime/__tests__/helpers/runtime-gateway-harness.d.ts.map +1 -1
  84. package/dist/runtime/__tests__/helpers/runtime-gateway-harness.js +24 -3
  85. package/dist/runtime/__tests__/helpers/runtime-gateway-harness.js.map +1 -1
  86. package/dist/runtime/auto-update/coordinator.js +2 -2
  87. package/dist/runtime/auto-update/coordinator.js.map +1 -1
  88. package/dist/runtime/create-actions.d.ts.map +1 -1
  89. package/dist/runtime/create-actions.js +40 -15
  90. package/dist/runtime/create-actions.js.map +1 -1
  91. package/dist/runtime/create-runtime-context.d.ts +1 -1
  92. package/dist/runtime/create-runtime-context.d.ts.map +1 -1
  93. package/dist/runtime/create-scanner-module.d.ts +2 -1
  94. package/dist/runtime/create-scanner-module.d.ts.map +1 -1
  95. package/dist/runtime/create-scanner-module.js +2 -1
  96. package/dist/runtime/create-scanner-module.js.map +1 -1
  97. package/dist/runtime/domain-events.d.ts +43 -0
  98. package/dist/runtime/domain-events.d.ts.map +1 -0
  99. package/dist/runtime/domain-events.js +181 -0
  100. package/dist/runtime/domain-events.js.map +1 -0
  101. package/dist/runtime/lifecycle-events.d.ts +86 -0
  102. package/dist/runtime/lifecycle-events.d.ts.map +1 -0
  103. package/dist/runtime/lifecycle-events.js +200 -0
  104. package/dist/runtime/lifecycle-events.js.map +1 -0
  105. package/dist/runtime/notifications.js +2 -2
  106. package/dist/runtime/notifications.js.map +1 -1
  107. package/dist/{tracking → runtime}/position-id-registry.d.ts +14 -1
  108. package/dist/runtime/position-id-registry.d.ts.map +1 -0
  109. package/dist/{tracking → runtime}/position-id-registry.js +20 -3
  110. package/dist/runtime/position-id-registry.js.map +1 -0
  111. package/dist/runtime/run.d.ts +2 -4
  112. package/dist/runtime/run.d.ts.map +1 -1
  113. package/dist/runtime/run.js.map +1 -1
  114. package/dist/runtime/runtime-schema.d.ts +276 -588
  115. package/dist/runtime/runtime-schema.d.ts.map +1 -1
  116. package/dist/runtime/runtime-schema.js +8 -28
  117. package/dist/runtime/runtime-schema.js.map +1 -1
  118. package/dist/runtime/runtime.d.ts +23 -9
  119. package/dist/runtime/runtime.d.ts.map +1 -1
  120. package/dist/runtime/runtime.js +276 -248
  121. package/dist/runtime/runtime.js.map +1 -1
  122. package/dist/runtime/strategy-lifecycle.d.ts.map +1 -1
  123. package/dist/runtime/strategy-lifecycle.js +13 -1
  124. package/dist/runtime/strategy-lifecycle.js.map +1 -1
  125. package/dist/runtime/supervisor/long-running-supervisor.d.ts +3 -0
  126. package/dist/runtime/supervisor/long-running-supervisor.d.ts.map +1 -1
  127. package/dist/runtime/supervisor/long-running-supervisor.js +27 -53
  128. package/dist/runtime/supervisor/long-running-supervisor.js.map +1 -1
  129. package/dist/runtime-api/config.d.ts +2 -2
  130. package/dist/runtime-api/config.js +4 -4
  131. package/dist/runtime-api/config.js.map +1 -1
  132. package/dist/runtime-api/handlers/ingest-signals.d.ts +5 -3
  133. package/dist/runtime-api/handlers/ingest-signals.d.ts.map +1 -1
  134. package/dist/runtime-api/handlers/ingest-signals.js +14 -5
  135. package/dist/runtime-api/handlers/ingest-signals.js.map +1 -1
  136. package/dist/runtime-api/intake/ingest-mutex.d.ts +16 -0
  137. package/dist/runtime-api/intake/ingest-mutex.d.ts.map +1 -0
  138. package/dist/runtime-api/intake/ingest-mutex.js +18 -0
  139. package/dist/runtime-api/intake/ingest-mutex.js.map +1 -0
  140. package/dist/runtime-api/intake/intake-events.d.ts +44 -0
  141. package/dist/runtime-api/intake/intake-events.d.ts.map +1 -0
  142. package/dist/runtime-api/intake/intake-events.js +131 -0
  143. package/dist/runtime-api/intake/intake-events.js.map +1 -0
  144. package/dist/runtime-api/intake/intake-mount.d.ts.map +1 -1
  145. package/dist/runtime-api/intake/intake-mount.js +8 -2
  146. package/dist/runtime-api/intake/intake-mount.js.map +1 -1
  147. package/dist/runtime-api/intake/scanner-launcher.d.ts +2 -0
  148. package/dist/runtime-api/intake/scanner-launcher.d.ts.map +1 -1
  149. package/dist/runtime-api/intake/scanner-launcher.js +58 -15
  150. package/dist/runtime-api/intake/scanner-launcher.js.map +1 -1
  151. package/dist/runtime-api/intake/scanner-registry.d.ts +3 -0
  152. package/dist/runtime-api/intake/scanner-registry.d.ts.map +1 -1
  153. package/dist/runtime-api/intake/scanner-registry.js +3 -0
  154. package/dist/runtime-api/intake/scanner-registry.js.map +1 -1
  155. package/dist/runtime-api/intake/supervisor-events.d.ts +61 -0
  156. package/dist/runtime-api/intake/supervisor-events.d.ts.map +1 -0
  157. package/dist/runtime-api/intake/supervisor-events.js +173 -0
  158. package/dist/runtime-api/intake/supervisor-events.js.map +1 -0
  159. package/dist/runtime-api/routes/signals.d.ts +1 -1
  160. package/dist/runtime-api/routes/signals.d.ts.map +1 -1
  161. package/dist/runtime-api/routes/signals.js +121 -35
  162. package/dist/runtime-api/routes/signals.js.map +1 -1
  163. package/dist/runtime-api/server.d.ts.map +1 -1
  164. package/dist/runtime-api/server.js +10 -1
  165. package/dist/runtime-api/server.js.map +1 -1
  166. package/dist/scanners/engine/data-providers.d.ts +3 -0
  167. package/dist/scanners/engine/data-providers.d.ts.map +1 -1
  168. package/dist/scanners/engine/data-providers.js.map +1 -1
  169. package/dist/scanners/engine/engine.d.ts +18 -0
  170. package/dist/scanners/engine/engine.d.ts.map +1 -1
  171. package/dist/scanners/engine/engine.js +96 -2
  172. package/dist/scanners/engine/engine.js.map +1 -1
  173. package/dist/scanners/engine/input-resolver.d.ts.map +1 -1
  174. package/dist/scanners/engine/input-resolver.js +9 -7
  175. package/dist/scanners/engine/input-resolver.js.map +1 -1
  176. package/dist/scanners/runtime-module.d.ts +3 -0
  177. package/dist/scanners/runtime-module.d.ts.map +1 -1
  178. package/dist/scanners/runtime-module.js +7 -0
  179. package/dist/scanners/runtime-module.js.map +1 -1
  180. package/dist/senpi/client.d.ts +10 -0
  181. package/dist/senpi/client.d.ts.map +1 -1
  182. package/dist/senpi/client.js +113 -46
  183. package/dist/senpi/client.js.map +1 -1
  184. package/dist/skills-manager/bootstrap.d.ts.map +1 -1
  185. package/dist/skills-manager/bootstrap.js +22 -33
  186. package/dist/skills-manager/bootstrap.js.map +1 -1
  187. package/dist/skills-manager/clone-groups.d.ts +20 -0
  188. package/dist/skills-manager/clone-groups.d.ts.map +1 -0
  189. package/dist/skills-manager/clone-groups.js +45 -0
  190. package/dist/skills-manager/clone-groups.js.map +1 -0
  191. package/dist/skills-manager/coordinator.d.ts.map +1 -1
  192. package/dist/skills-manager/coordinator.js +111 -75
  193. package/dist/skills-manager/coordinator.js.map +1 -1
  194. package/dist/skills-manager/manifest.d.ts +24 -0
  195. package/dist/skills-manager/manifest.d.ts.map +1 -1
  196. package/dist/skills-manager/manifest.js +23 -10
  197. package/dist/skills-manager/manifest.js.map +1 -1
  198. package/dist/skills-manager/skills-manifest.json +12 -7
  199. package/dist/skills-manager/types.d.ts +12 -0
  200. package/dist/skills-manager/types.d.ts.map +1 -1
  201. package/dist/state/state-events.d.ts +13 -0
  202. package/dist/state/state-events.d.ts.map +1 -0
  203. package/dist/state/state-events.js +22 -0
  204. package/dist/state/state-events.js.map +1 -0
  205. package/dist/state/state-manager.d.ts.map +1 -1
  206. package/dist/state/state-manager.js +14 -1
  207. package/dist/state/state-manager.js.map +1 -1
  208. package/dist/telemetry/attributes.d.ts +13 -0
  209. package/dist/telemetry/attributes.d.ts.map +1 -0
  210. package/dist/telemetry/attributes.js +22 -0
  211. package/dist/telemetry/attributes.js.map +1 -0
  212. package/dist/{tracking → telemetry}/context.d.ts +12 -5
  213. package/dist/telemetry/context.d.ts.map +1 -0
  214. package/dist/{tracking → telemetry}/context.js +4 -4
  215. package/dist/telemetry/context.js.map +1 -0
  216. package/dist/{recording/records.d.ts → telemetry/event-builders.d.ts} +145 -33
  217. package/dist/telemetry/event-builders.d.ts.map +1 -0
  218. package/dist/{recording/wiring/record-builders.js → telemetry/event-builders.js} +94 -40
  219. package/dist/telemetry/event-builders.js.map +1 -0
  220. package/dist/telemetry/event-store.d.ts +66 -0
  221. package/dist/telemetry/event-store.d.ts.map +1 -0
  222. package/dist/telemetry/event-store.js +202 -0
  223. package/dist/telemetry/event-store.js.map +1 -0
  224. package/dist/telemetry/identity.d.ts +72 -0
  225. package/dist/telemetry/identity.d.ts.map +1 -0
  226. package/dist/{recording/wiring → telemetry}/identity.js +6 -2
  227. package/dist/telemetry/identity.js.map +1 -0
  228. package/dist/telemetry/metrics.d.ts +169 -0
  229. package/dist/telemetry/metrics.d.ts.map +1 -0
  230. package/dist/telemetry/metrics.js +437 -0
  231. package/dist/telemetry/metrics.js.map +1 -0
  232. package/dist/telemetry/otel-sdk.d.ts +93 -0
  233. package/dist/telemetry/otel-sdk.d.ts.map +1 -0
  234. package/dist/telemetry/otel-sdk.js +297 -0
  235. package/dist/telemetry/otel-sdk.js.map +1 -0
  236. package/dist/telemetry/spans/constants.d.ts +12 -0
  237. package/dist/telemetry/spans/constants.d.ts.map +1 -0
  238. package/dist/telemetry/spans/constants.js +12 -0
  239. package/dist/telemetry/spans/constants.js.map +1 -0
  240. package/dist/telemetry/spans/gen-ai.d.ts +74 -0
  241. package/dist/telemetry/spans/gen-ai.d.ts.map +1 -0
  242. package/dist/telemetry/spans/gen-ai.js +339 -0
  243. package/dist/telemetry/spans/gen-ai.js.map +1 -0
  244. package/dist/telemetry/spans/index.d.ts +11 -0
  245. package/dist/telemetry/spans/index.d.ts.map +1 -0
  246. package/dist/telemetry/spans/index.js +11 -0
  247. package/dist/telemetry/spans/index.js.map +1 -0
  248. package/dist/{tracking → telemetry}/spans/redact-pii.d.ts +19 -21
  249. package/dist/telemetry/spans/redact-pii.d.ts.map +1 -0
  250. package/dist/{tracking → telemetry}/spans/redact-pii.js +35 -32
  251. package/dist/telemetry/spans/redact-pii.js.map +1 -0
  252. package/dist/telemetry/spans/sanitize-payload.d.ts.map +1 -0
  253. package/dist/telemetry/spans/sanitize-payload.js.map +1 -0
  254. package/dist/telemetry/spans/span-hooks.d.ts +18 -0
  255. package/dist/telemetry/spans/span-hooks.d.ts.map +1 -0
  256. package/dist/telemetry/spans/span-hooks.js +764 -0
  257. package/dist/telemetry/spans/span-hooks.js.map +1 -0
  258. package/dist/telemetry/tool-plane.d.ts +31 -0
  259. package/dist/telemetry/tool-plane.d.ts.map +1 -0
  260. package/dist/telemetry/tool-plane.js +70 -0
  261. package/dist/telemetry/tool-plane.js.map +1 -0
  262. package/dist/telemetry/trace-identity.d.ts +32 -0
  263. package/dist/telemetry/trace-identity.d.ts.map +1 -0
  264. package/dist/telemetry/trace-identity.js +62 -0
  265. package/dist/telemetry/trace-identity.js.map +1 -0
  266. package/dist/telemetry/tracing.d.ts +33 -0
  267. package/dist/telemetry/tracing.d.ts.map +1 -0
  268. package/dist/telemetry/tracing.js +70 -0
  269. package/dist/telemetry/tracing.js.map +1 -0
  270. package/dist/types/dsl/index.d.ts +8 -9
  271. package/dist/types/dsl/index.d.ts.map +1 -1
  272. package/dist/types/runtime.d.ts +1 -1
  273. package/dist/types/runtime.d.ts.map +1 -1
  274. package/dist/types/scanner.d.ts +2 -0
  275. package/dist/types/scanner.d.ts.map +1 -1
  276. package/dist/utils/event-catalog.d.ts +506 -0
  277. package/dist/utils/event-catalog.d.ts.map +1 -0
  278. package/dist/utils/event-catalog.js +142 -0
  279. package/dist/utils/event-catalog.js.map +1 -0
  280. package/dist/utils/logger.d.ts +63 -5
  281. package/dist/utils/logger.d.ts.map +1 -1
  282. package/dist/utils/logger.js +360 -27
  283. package/dist/utils/logger.js.map +1 -1
  284. package/dist/utils/wallet-address.d.ts +3 -0
  285. package/dist/utils/wallet-address.d.ts.map +1 -0
  286. package/dist/utils/wallet-address.js +17 -0
  287. package/dist/utils/wallet-address.js.map +1 -0
  288. package/openclaw.plugin.json +20 -6
  289. package/package.json +10 -2
  290. package/dist/actions/tracking-helpers.d.ts +0 -28
  291. package/dist/actions/tracking-helpers.d.ts.map +0 -1
  292. package/dist/actions/tracking-helpers.js +0 -93
  293. package/dist/actions/tracking-helpers.js.map +0 -1
  294. package/dist/recording/emitter.d.ts +0 -27
  295. package/dist/recording/emitter.d.ts.map +0 -1
  296. package/dist/recording/emitter.js +0 -2
  297. package/dist/recording/emitter.js.map +0 -1
  298. package/dist/recording/identity.d.ts +0 -34
  299. package/dist/recording/identity.d.ts.map +0 -1
  300. package/dist/recording/identity.js +0 -2
  301. package/dist/recording/identity.js.map +0 -1
  302. package/dist/recording/index.d.ts +0 -11
  303. package/dist/recording/index.d.ts.map +0 -1
  304. package/dist/recording/index.js +0 -2
  305. package/dist/recording/index.js.map +0 -1
  306. package/dist/recording/noop-emitter.d.ts +0 -23
  307. package/dist/recording/noop-emitter.d.ts.map +0 -1
  308. package/dist/recording/noop-emitter.js +0 -22
  309. package/dist/recording/noop-emitter.js.map +0 -1
  310. package/dist/recording/otel/attributes.d.ts +0 -35
  311. package/dist/recording/otel/attributes.d.ts.map +0 -1
  312. package/dist/recording/otel/attributes.js +0 -131
  313. package/dist/recording/otel/attributes.js.map +0 -1
  314. package/dist/recording/otel/constants.d.ts +0 -123
  315. package/dist/recording/otel/constants.d.ts.map +0 -1
  316. package/dist/recording/otel/constants.js +0 -172
  317. package/dist/recording/otel/constants.js.map +0 -1
  318. package/dist/recording/otel/ids.d.ts +0 -25
  319. package/dist/recording/otel/ids.d.ts.map +0 -1
  320. package/dist/recording/otel/ids.js +0 -37
  321. package/dist/recording/otel/ids.js.map +0 -1
  322. package/dist/recording/otel/index.d.ts +0 -13
  323. package/dist/recording/otel/index.d.ts.map +0 -1
  324. package/dist/recording/otel/index.js +0 -9
  325. package/dist/recording/otel/index.js.map +0 -1
  326. package/dist/recording/otel/mappers.d.ts +0 -100
  327. package/dist/recording/otel/mappers.d.ts.map +0 -1
  328. package/dist/recording/otel/mappers.js +0 -683
  329. package/dist/recording/otel/mappers.js.map +0 -1
  330. package/dist/recording/otel/otel-emitter.d.ts +0 -43
  331. package/dist/recording/otel/otel-emitter.d.ts.map +0 -1
  332. package/dist/recording/otel/otel-emitter.js +0 -99
  333. package/dist/recording/otel/otel-emitter.js.map +0 -1
  334. package/dist/recording/otel/redaction.d.ts +0 -47
  335. package/dist/recording/otel/redaction.d.ts.map +0 -1
  336. package/dist/recording/otel/redaction.js +0 -88
  337. package/dist/recording/otel/redaction.js.map +0 -1
  338. package/dist/recording/records.d.ts.map +0 -1
  339. package/dist/recording/records.js +0 -14
  340. package/dist/recording/records.js.map +0 -1
  341. package/dist/recording/transport/batcher.d.ts +0 -59
  342. package/dist/recording/transport/batcher.d.ts.map +0 -1
  343. package/dist/recording/transport/batcher.js +0 -234
  344. package/dist/recording/transport/batcher.js.map +0 -1
  345. package/dist/recording/transport/client.d.ts +0 -41
  346. package/dist/recording/transport/client.d.ts.map +0 -1
  347. package/dist/recording/transport/client.js +0 -69
  348. package/dist/recording/transport/client.js.map +0 -1
  349. package/dist/recording/transport/config.d.ts +0 -53
  350. package/dist/recording/transport/config.d.ts.map +0 -1
  351. package/dist/recording/transport/config.js +0 -41
  352. package/dist/recording/transport/config.js.map +0 -1
  353. package/dist/recording/transport/index.d.ts +0 -16
  354. package/dist/recording/transport/index.d.ts.map +0 -1
  355. package/dist/recording/transport/index.js +0 -12
  356. package/dist/recording/transport/index.js.map +0 -1
  357. package/dist/recording/transport/rows.d.ts +0 -88
  358. package/dist/recording/transport/rows.d.ts.map +0 -1
  359. package/dist/recording/transport/rows.js +0 -15
  360. package/dist/recording/transport/rows.js.map +0 -1
  361. package/dist/recording/wiring/emitter-factory.d.ts +0 -39
  362. package/dist/recording/wiring/emitter-factory.d.ts.map +0 -1
  363. package/dist/recording/wiring/emitter-factory.js +0 -62
  364. package/dist/recording/wiring/emitter-factory.js.map +0 -1
  365. package/dist/recording/wiring/identity.d.ts +0 -27
  366. package/dist/recording/wiring/identity.d.ts.map +0 -1
  367. package/dist/recording/wiring/identity.js.map +0 -1
  368. package/dist/recording/wiring/index.d.ts +0 -12
  369. package/dist/recording/wiring/index.d.ts.map +0 -1
  370. package/dist/recording/wiring/index.js +0 -9
  371. package/dist/recording/wiring/index.js.map +0 -1
  372. package/dist/recording/wiring/record-builders.d.ts +0 -107
  373. package/dist/recording/wiring/record-builders.d.ts.map +0 -1
  374. package/dist/recording/wiring/record-builders.js.map +0 -1
  375. package/dist/recording/wiring/subscriber.d.ts +0 -28
  376. package/dist/recording/wiring/subscriber.d.ts.map +0 -1
  377. package/dist/recording/wiring/subscriber.js +0 -173
  378. package/dist/recording/wiring/subscriber.js.map +0 -1
  379. package/dist/recording/wiring/values.d.ts +0 -19
  380. package/dist/recording/wiring/values.d.ts.map +0 -1
  381. package/dist/recording/wiring/values.js +0 -49
  382. package/dist/recording/wiring/values.js.map +0 -1
  383. package/dist/tracking/build-rehydrate-items.d.ts +0 -15
  384. package/dist/tracking/build-rehydrate-items.d.ts.map +0 -1
  385. package/dist/tracking/build-rehydrate-items.js +0 -19
  386. package/dist/tracking/build-rehydrate-items.js.map +0 -1
  387. package/dist/tracking/constants.d.ts +0 -24
  388. package/dist/tracking/constants.d.ts.map +0 -1
  389. package/dist/tracking/constants.js +0 -52
  390. package/dist/tracking/constants.js.map +0 -1
  391. package/dist/tracking/context.d.ts.map +0 -1
  392. package/dist/tracking/context.js.map +0 -1
  393. package/dist/tracking/index.d.ts +0 -16
  394. package/dist/tracking/index.d.ts.map +0 -1
  395. package/dist/tracking/index.js +0 -11
  396. package/dist/tracking/index.js.map +0 -1
  397. package/dist/tracking/plugin-event-tracker.d.ts +0 -13
  398. package/dist/tracking/plugin-event-tracker.d.ts.map +0 -1
  399. package/dist/tracking/plugin-event-tracker.js +0 -27
  400. package/dist/tracking/plugin-event-tracker.js.map +0 -1
  401. package/dist/tracking/position-id-registry.d.ts.map +0 -1
  402. package/dist/tracking/position-id-registry.js.map +0 -1
  403. package/dist/tracking/spans/constants.d.ts +0 -19
  404. package/dist/tracking/spans/constants.d.ts.map +0 -1
  405. package/dist/tracking/spans/constants.js +0 -31
  406. package/dist/tracking/spans/constants.js.map +0 -1
  407. package/dist/tracking/spans/fan-out-span-transport.d.ts +0 -22
  408. package/dist/tracking/spans/fan-out-span-transport.d.ts.map +0 -1
  409. package/dist/tracking/spans/fan-out-span-transport.js +0 -49
  410. package/dist/tracking/spans/fan-out-span-transport.js.map +0 -1
  411. package/dist/tracking/spans/index.d.ts +0 -13
  412. package/dist/tracking/spans/index.d.ts.map +0 -1
  413. package/dist/tracking/spans/index.js +0 -16
  414. package/dist/tracking/spans/index.js.map +0 -1
  415. package/dist/tracking/spans/otel/fit-row-budget.d.ts +0 -22
  416. package/dist/tracking/spans/otel/fit-row-budget.d.ts.map +0 -1
  417. package/dist/tracking/spans/otel/fit-row-budget.js +0 -91
  418. package/dist/tracking/spans/otel/fit-row-budget.js.map +0 -1
  419. package/dist/tracking/spans/otel/map-span-to-trace-row.d.ts +0 -16
  420. package/dist/tracking/spans/otel/map-span-to-trace-row.d.ts.map +0 -1
  421. package/dist/tracking/spans/otel/map-span-to-trace-row.js +0 -227
  422. package/dist/tracking/spans/otel/map-span-to-trace-row.js.map +0 -1
  423. package/dist/tracking/spans/otel/recording-span-transport.d.ts +0 -43
  424. package/dist/tracking/spans/otel/recording-span-transport.d.ts.map +0 -1
  425. package/dist/tracking/spans/otel/recording-span-transport.js +0 -67
  426. package/dist/tracking/spans/otel/recording-span-transport.js.map +0 -1
  427. package/dist/tracking/spans/otel/span-ids.d.ts +0 -22
  428. package/dist/tracking/spans/otel/span-ids.d.ts.map +0 -1
  429. package/dist/tracking/spans/otel/span-ids.js +0 -32
  430. package/dist/tracking/spans/otel/span-ids.js.map +0 -1
  431. package/dist/tracking/spans/plugin-span-tracker.d.ts +0 -9
  432. package/dist/tracking/spans/plugin-span-tracker.d.ts.map +0 -1
  433. package/dist/tracking/spans/plugin-span-tracker.js +0 -115
  434. package/dist/tracking/spans/plugin-span-tracker.js.map +0 -1
  435. package/dist/tracking/spans/redact-pii.d.ts.map +0 -1
  436. package/dist/tracking/spans/redact-pii.js.map +0 -1
  437. package/dist/tracking/spans/sanitize-payload.d.ts.map +0 -1
  438. package/dist/tracking/spans/sanitize-payload.js.map +0 -1
  439. package/dist/tracking/spans/span-hooks.d.ts +0 -28
  440. package/dist/tracking/spans/span-hooks.d.ts.map +0 -1
  441. package/dist/tracking/spans/span-hooks.js +0 -409
  442. package/dist/tracking/spans/span-hooks.js.map +0 -1
  443. package/dist/tracking/spans/span-tracker.d.ts +0 -133
  444. package/dist/tracking/spans/span-tracker.d.ts.map +0 -1
  445. package/dist/tracking/spans/span-tracker.js +0 -721
  446. package/dist/tracking/spans/span-tracker.js.map +0 -1
  447. package/dist/tracking/spans/span-transport.d.ts +0 -71
  448. package/dist/tracking/spans/span-transport.d.ts.map +0 -1
  449. package/dist/tracking/spans/span-transport.js +0 -240
  450. package/dist/tracking/spans/span-transport.js.map +0 -1
  451. package/dist/tracking/spans/types.d.ts +0 -101
  452. package/dist/tracking/spans/types.d.ts.map +0 -1
  453. package/dist/tracking/spans/types.js +0 -6
  454. package/dist/tracking/spans/types.js.map +0 -1
  455. package/dist/tracking/tracker.d.ts +0 -30
  456. package/dist/tracking/tracker.d.ts.map +0 -1
  457. package/dist/tracking/tracker.js +0 -66
  458. package/dist/tracking/tracker.js.map +0 -1
  459. package/dist/tracking/tracking-handler.d.ts +0 -12
  460. package/dist/tracking/tracking-handler.d.ts.map +0 -1
  461. package/dist/tracking/tracking-handler.js +0 -148
  462. package/dist/tracking/tracking-handler.js.map +0 -1
  463. package/dist/tracking/transport.d.ts +0 -35
  464. package/dist/tracking/transport.d.ts.map +0 -1
  465. package/dist/tracking/transport.js +0 -133
  466. package/dist/tracking/transport.js.map +0 -1
  467. package/dist/tracking/types.d.ts +0 -21
  468. package/dist/tracking/types.d.ts.map +0 -1
  469. package/dist/tracking/types.js +0 -6
  470. package/dist/tracking/types.js.map +0 -1
  471. /package/dist/{tracking → telemetry}/spans/sanitize-payload.d.ts +0 -0
  472. /package/dist/{tracking → telemetry}/spans/sanitize-payload.js +0 -0
@@ -6,6 +6,8 @@ import { ActionRegistry } from "./action-registry.js";
6
6
  import { createRuntimeContext } from "./create-runtime-context.js";
7
7
  import { resolveStrategyConfig } from "./map-strategies.js";
8
8
  import { MaxLeverageCache } from "../leverage/max-leverage-cache.js";
9
+ import { withSpan } from "../telemetry/tracing.js";
10
+ import { SpanStatusCode } from "@opentelemetry/api";
9
11
  /**
10
12
  * For each entry in config.actions, look up factory by action_type, build ActionConfig,
11
13
  * use shared RuntimeContext (built once per trading recipe and reused), instantiate action. Returns actions
@@ -60,30 +62,53 @@ export async function createActions(config, options) {
60
62
  const scanPayload = event?.data;
61
63
  const scannerId = scanPayload?.scanResult?.scannerId;
62
64
  const address = event.address;
63
- console.info("[senpi-runtime] [ingest-trace] runActionsForSignal entry", JSON.stringify({
64
- address,
65
- scannerId,
66
- registeredActions: actions.map((a) => ({
67
- name: a.name,
68
- scannersFilter: a.config.scanners ?? null,
69
- })),
70
- }));
71
65
  const promises = [];
72
66
  for (const { action, name, config: cfg } of actions) {
73
67
  const scanners = cfg.scanners;
74
68
  if (Array.isArray(scanners) && scanners.length > 0) {
75
69
  if (scannerId == null || !scanners.includes(scannerId)) {
76
- console.info("[senpi-runtime] [ingest-trace] runActionsForSignal SKIP (scanner mismatch)", JSON.stringify({ action: name, requiredScanners: scanners, signalScannerId: scannerId }));
77
70
  continue;
78
71
  }
79
72
  }
80
- console.info("[senpi-runtime] [ingest-trace] runActionsForSignal FIRE", JSON.stringify({ action: name, scannerId, address }));
81
- if (actionModule) {
82
- promises.push(actionModule.wrapHandle(address, action, cfg, event));
83
- }
84
- else {
85
- promises.push(Promise.resolve(action.handle(event)));
73
+ // One span per fired action, regardless of whether the action module wraps the handle.
74
+ const attrs = {
75
+ "senpi.action.name": name,
76
+ "senpi.action.type": action.actionType,
77
+ "senpi.action.decision_mode": cfg.decision_mode,
78
+ };
79
+ if (cfg.min_confidence != null) {
80
+ attrs["senpi.decision.confidence_threshold"] = String(cfg.min_confidence);
86
81
  }
82
+ promises.push(withSpan("action.execute", attrs, async (span) => {
83
+ // wrapHandle converts thrown errors into a failed ActionResult, so outcome is read
84
+ // off the result rather than relying on a throw reaching withSpan.
85
+ const result = actionModule
86
+ ? await actionModule.wrapHandle(address, action, cfg, event)
87
+ : await action.handle(event);
88
+ const data = result.data;
89
+ if (data) {
90
+ const counts = [
91
+ ["senpi.outcome.submitted_count", "submittedCount"],
92
+ ["senpi.outcome.closed_count", "closedCount"],
93
+ ["senpi.outcome.fired_count", "firedCount"],
94
+ ["senpi.outcome.failed_count", "failedCount"],
95
+ ["senpi.outcome.skipped_count", "skippedCount"],
96
+ ];
97
+ for (const [attrKey, dataKey] of counts) {
98
+ const value = data[dataKey];
99
+ if (typeof value === "number")
100
+ span.setAttribute(attrKey, value);
101
+ }
102
+ }
103
+ // A skipped result is a non-error outcome; only a genuine failure flips status to ERROR.
104
+ if (result.success === false) {
105
+ span.setStatus({
106
+ code: SpanStatusCode.ERROR,
107
+ message: result.error ?? result.summary,
108
+ });
109
+ }
110
+ return result;
111
+ }));
87
112
  }
88
113
  return Promise.all(promises).then(() => undefined);
89
114
  }
@@ -1 +1 @@
1
- {"version":3,"file":"create-actions.js","sourceRoot":"","sources":["../../src/runtime/create-actions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"create-actions.js","sourceRoot":"","sources":["../../src/runtime/create-actions.ts"],"names":[],"mappings":"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"}
@@ -9,7 +9,7 @@ import type { ContextBuilder } from "../context/types.js";
9
9
  import type { NotificationService } from "../types/notification.js";
10
10
  import type { ScannerRuntimeModule } from "../scanners/runtime-module.js";
11
11
  import type { MaxLeverageCache } from "../leverage/max-leverage-cache.js";
12
- import type { PositionIdRegistry } from "../tracking/position-id-registry.js";
12
+ import type { PositionIdRegistry } from "../runtime/position-id-registry.js";
13
13
  export interface CreateRuntimeContextDeps {
14
14
  senpi: SenpiClient;
15
15
  hookSystem: HookSystem;
@@ -1 +1 @@
1
- {"version":3,"file":"create-runtime-context.d.ts","sourceRoot":"","sources":["../../src/runtime/create-runtime-context.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAC9E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAG9E,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,WAAW,CAAC;IACnB,UAAU,EAAE,UAAU,CAAC;IACvB,WAAW,EAAE,WAAW,CAAC;IACzB,cAAc,EAAE,cAAc,CAAC;IAC/B,SAAS,EAAE,SAAS,CAAC;IACrB,aAAa,EAAE,mBAAmB,CAAC;IACnC,aAAa,CAAC,EAAE,oBAAoB,CAAC;IACrC,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;CACzC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,cAAc,EAAE,cAAc,EAC9B,KAAK,EAAE,WAAW,GACjB,aAAa,CAEf;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,cAAc,EAAE,cAAc,EAC9B,KAAK,EAAE,WAAW,GACjB,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAE5B;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,cAAc,EAAE,cAAc,EAC9B,IAAI,EAAE,wBAAwB,GAC7B,cAAc,CAchB"}
1
+ {"version":3,"file":"create-runtime-context.d.ts","sourceRoot":"","sources":["../../src/runtime/create-runtime-context.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAC9E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAG7E,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,WAAW,CAAC;IACnB,UAAU,EAAE,UAAU,CAAC;IACvB,WAAW,EAAE,WAAW,CAAC;IACzB,cAAc,EAAE,cAAc,CAAC;IAC/B,SAAS,EAAE,SAAS,CAAC;IACrB,aAAa,EAAE,mBAAmB,CAAC;IACnC,aAAa,CAAC,EAAE,oBAAoB,CAAC;IACrC,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;CACzC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,cAAc,EAAE,cAAc,EAC9B,KAAK,EAAE,WAAW,GACjB,aAAa,CAEf;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,cAAc,EAAE,cAAc,EAC9B,KAAK,EAAE,WAAW,GACjB,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAE5B;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,cAAc,EAAE,cAAc,EAC9B,IAAI,EAAE,wBAAwB,GAC7B,cAAc,CAchB"}
@@ -3,6 +3,7 @@
3
3
  */
4
4
  import type { ScannerDataProviders } from "../scanners/engine/data-providers.js";
5
5
  import type { ScannerLogger } from "../scanners/protocol/context.js";
6
+ import type { IdentityEnvelope } from "../telemetry/identity.js";
6
7
  import { createScannerRuntimeModule } from "../scanners/runtime-module.js";
7
8
  import type { RuntimeConfig } from "./runtime-config.js";
8
9
  /**
@@ -16,5 +17,5 @@ import type { RuntimeConfig } from "./runtime-config.js";
16
17
  * synthesized as `{ fields: signal_data_schema }` + `outputs: {signals: true,
17
18
  * context: false}`.
18
19
  */
19
- export declare function createScannerModuleFromRuntimeConfig(config: RuntimeConfig, stateDir: string, providers?: ScannerDataProviders, logger?: ScannerLogger): ReturnType<typeof createScannerRuntimeModule>;
20
+ export declare function createScannerModuleFromRuntimeConfig(config: RuntimeConfig, stateDir: string, providers?: ScannerDataProviders, logger?: ScannerLogger, identity?: () => IdentityEnvelope): ReturnType<typeof createScannerRuntimeModule>;
20
21
  //# sourceMappingURL=create-scanner-module.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-scanner-module.d.ts","sourceRoot":"","sources":["../../src/runtime/create-scanner-module.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AACjF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAG3E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAKzD;;;;;;;;;;GAUG;AACH,wBAAgB,oCAAoC,CAClD,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,oBAAoB,EAChC,MAAM,CAAC,EAAE,aAAa,GACrB,UAAU,CAAC,OAAO,0BAA0B,CAAC,CA0C/C"}
1
+ {"version":3,"file":"create-scanner-module.d.ts","sourceRoot":"","sources":["../../src/runtime/create-scanner-module.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AACjF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAG3E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAKzD;;;;;;;;;;GAUG;AACH,wBAAgB,oCAAoC,CAClD,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,oBAAoB,EAChC,MAAM,CAAC,EAAE,aAAa,EACtB,QAAQ,CAAC,EAAE,MAAM,gBAAgB,GAChC,UAAU,CAAC,OAAO,0BAA0B,CAAC,CA2C/C"}
@@ -17,7 +17,7 @@ import { buildScannerComposition } from "./scanner-composition.js";
17
17
  * synthesized as `{ fields: signal_data_schema }` + `outputs: {signals: true,
18
18
  * context: false}`.
19
19
  */
20
- export function createScannerModuleFromRuntimeConfig(config, stateDir, providers, logger) {
20
+ export function createScannerModuleFromRuntimeConfig(config, stateDir, providers, logger, identity) {
21
21
  const strategy = resolveStrategyRegistration(config);
22
22
  const scanners = [];
23
23
  for (const sc of config.scanners ?? []) {
@@ -46,6 +46,7 @@ export function createScannerModuleFromRuntimeConfig(config, stateDir, providers
46
46
  composition,
47
47
  providers,
48
48
  logger,
49
+ identity,
49
50
  });
50
51
  }
51
52
  //# sourceMappingURL=create-scanner-module.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-scanner-module.js","sourceRoot":"","sources":["../../src/runtime/create-scanner-module.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAE3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAE7E,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAEnE;;;;;;;;;;GAUG;AACH,MAAM,UAAU,oCAAoC,CAClD,MAAqB,EACrB,QAAgB,EAChB,SAAgC,EAChC,MAAsB;IAEtB,MAAM,QAAQ,GAAG,2BAA2B,CAAC,MAAM,CAAC,CAAC;IACrD,MAAM,QAAQ,GAAmB,EAAE,CAAC;IACpC,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;QACvC,yEAAyE;QACzE,+EAA+E;QAC/E,8EAA8E;QAC9E,8EAA8E;QAC9E,MAAM,UAAU,GAAG,EAAE,CAAC,IAAI,KAAK,kBAAkB,CAAC;QAClD,MAAM,cAAc,GAAG,UAAU;YAC/B,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,kBAAkB,IAAI,EAAE,EAAE;YACzC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC;QACd,QAAQ,CAAC,IAAI,CACX,eAAe,CAAC,aAAa,CAC3B,EAAE,CAAC,IAAI,EACP,EAAE,CAAC,IAAI,EACP,cAAc,EACd,EAAE,CAAC,UAAU,EACb,UAAU;YACR,CAAC,CAAC;gBACE,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE;gBAC1C,SAAS,EAAE,EAAE,CAAC,SAAS;gBACvB,gBAAgB,EAAE,EAAE,CAAC,kBAAkB;aACxC;YACH,CAAC,CAAC,SAAS,CACd,CACF,CAAC;IACJ,CAAC;IACD,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IACxD,MAAM,WAAW,GAAG,uBAAuB,CACzC,MAAM,EACN,gBAAgB,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,EACrD,MAAM,CACP,CAAC;IACF,OAAO,0BAA0B,CAAC;QAChC,QAAQ;QACR,QAAQ;QACR,QAAQ,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC;QAC5D,WAAW;QACX,SAAS;QACT,MAAM;KACP,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"create-scanner-module.js","sourceRoot":"","sources":["../../src/runtime/create-scanner-module.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAE3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAE7E,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAEnE;;;;;;;;;;GAUG;AACH,MAAM,UAAU,oCAAoC,CAClD,MAAqB,EACrB,QAAgB,EAChB,SAAgC,EAChC,MAAsB,EACtB,QAAiC;IAEjC,MAAM,QAAQ,GAAG,2BAA2B,CAAC,MAAM,CAAC,CAAC;IACrD,MAAM,QAAQ,GAAmB,EAAE,CAAC;IACpC,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;QACvC,yEAAyE;QACzE,+EAA+E;QAC/E,8EAA8E;QAC9E,8EAA8E;QAC9E,MAAM,UAAU,GAAG,EAAE,CAAC,IAAI,KAAK,kBAAkB,CAAC;QAClD,MAAM,cAAc,GAAG,UAAU;YAC/B,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,kBAAkB,IAAI,EAAE,EAAE;YACzC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC;QACd,QAAQ,CAAC,IAAI,CACX,eAAe,CAAC,aAAa,CAC3B,EAAE,CAAC,IAAI,EACP,EAAE,CAAC,IAAI,EACP,cAAc,EACd,EAAE,CAAC,UAAU,EACb,UAAU;YACR,CAAC,CAAC;gBACE,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE;gBAC1C,SAAS,EAAE,EAAE,CAAC,SAAS;gBACvB,gBAAgB,EAAE,EAAE,CAAC,kBAAkB;aACxC;YACH,CAAC,CAAC,SAAS,CACd,CACF,CAAC;IACJ,CAAC;IACD,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IACxD,MAAM,WAAW,GAAG,uBAAuB,CACzC,MAAM,EACN,gBAAgB,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,EACrD,MAAM,CACP,CAAC;IACF,OAAO,0BAA0B,CAAC;QAChC,QAAQ;QACR,QAAQ;QACR,QAAQ,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC;QAC5D,WAAW;QACX,SAAS;QACT,MAAM;QACN,QAAQ;KACT,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * The event-log half of the real domain events on the bus: `position.*` lifecycle and `dsl.*`
3
+ * transitions. Unlike the action-origin events (order/decision/outcome), these are first-class facts
4
+ * already broadcast on the `SenpiEventBus` — so one thin subscriber maps each to a `logger.event`,
5
+ * reusing the pure builders ({@link buildPositionLifecycle} / {@link buildDslTransition})
6
+ * for the field projection rather than re-parsing the payloads.
7
+ *
8
+ * Why a subscriber, not at-site: the bus is a synchronous `EventEmitter`, so a handler runs in the
9
+ * emitter's async context — it inherits the active span (trace_id/span_id auto-stamp) and the
10
+ * `trackingContext` identity exactly as an at-site emit would. Position events fire inside the signal
11
+ * flow; `dsl.*` transitions fire inside the monitor tick, which the DSL plugin wraps in a
12
+ * `trackingContext` so these carry identity too.
13
+ *
14
+ * All fields here are safe scalars — these events carry no free-text, so none use the `redact` slot.
15
+ */
16
+ import type { SenpiEventBus } from "../types/event-bus.js";
17
+ import type { DslTransitionKind, PositionLifecycleEvent } from "../telemetry/event-builders.js";
18
+ import { type EmittableEvent } from "../actions/event-derivation.js";
19
+ /**
20
+ * Map a `position.*` lifecycle record to its event. An `opened` whose `reconciliation_source` is
21
+ * `externally_detected` is surfaced as `position.reconciled` — a gap-pass position the runtime did
22
+ * not open — so the two are distinguishable downstream; everything else maps one-to-one. All `info`.
23
+ */
24
+ declare function buildPositionLifecycleEvent(event: PositionLifecycleEvent, payload: unknown, nowMs: number): EmittableEvent | null;
25
+ /** Map a `dsl.*` transition record to its event. All `info` — failure rides `dsl.closed`'s reason. */
26
+ declare function buildDslTransitionEvent(transition: DslTransitionKind, payload: unknown, nowMs: number): EmittableEvent | null;
27
+ export interface DomainEventSubscriber {
28
+ /** Unsubscribe every handler. Idempotent. */
29
+ dispose(): void;
30
+ }
31
+ /**
32
+ * Subscribe the event log to the `position.*` / `dsl.*` domain events on the bus. Each handler builds
33
+ * its event through {@link emitEvent}'s guard, so a throwing builder or a telemetry failure can never
34
+ * propagate back through `bus.emit` into the trading path. Attach only when telemetry is enabled
35
+ * (per-event assembly on the serial path is dead work otherwise).
36
+ */
37
+ export declare function createDomainEventSubscriber(bus: SenpiEventBus): DomainEventSubscriber;
38
+ export declare const __test: {
39
+ buildPositionLifecycleEvent: typeof buildPositionLifecycleEvent;
40
+ buildDslTransitionEvent: typeof buildDslTransitionEvent;
41
+ };
42
+ export {};
43
+ //# sourceMappingURL=domain-events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domain-events.d.ts","sourceRoot":"","sources":["../../src/runtime/domain-events.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAK3D,OAAO,KAAK,EACV,iBAAiB,EAEjB,sBAAsB,EAEvB,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EAAa,KAAK,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAkDhF;;;;GAIG;AACH,iBAAS,2BAA2B,CAClC,KAAK,EAAE,sBAAsB,EAC7B,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,MAAM,GACZ,cAAc,GAAG,IAAI,CA+BvB;AAwBD,sGAAsG;AACtG,iBAAS,uBAAuB,CAC9B,UAAU,EAAE,iBAAiB,EAC7B,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,MAAM,GACZ,cAAc,GAAG,IAAI,CA0BvB;AAED,MAAM,WAAW,qBAAqB;IACpC,6CAA6C;IAC7C,OAAO,IAAI,IAAI,CAAC;CACjB;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,aAAa,GAAG,qBAAqB,CA6BrF;AAGD,eAAO,MAAM,MAAM;;;CAA2D,CAAC"}
@@ -0,0 +1,181 @@
1
+ /**
2
+ * The event-log half of the real domain events on the bus: `position.*` lifecycle and `dsl.*`
3
+ * transitions. Unlike the action-origin events (order/decision/outcome), these are first-class facts
4
+ * already broadcast on the `SenpiEventBus` — so one thin subscriber maps each to a `logger.event`,
5
+ * reusing the pure builders ({@link buildPositionLifecycle} / {@link buildDslTransition})
6
+ * for the field projection rather than re-parsing the payloads.
7
+ *
8
+ * Why a subscriber, not at-site: the bus is a synchronous `EventEmitter`, so a handler runs in the
9
+ * emitter's async context — it inherits the active span (trace_id/span_id auto-stamp) and the
10
+ * `trackingContext` identity exactly as an at-site emit would. Position events fire inside the signal
11
+ * flow; `dsl.*` transitions fire inside the monitor tick, which the DSL plugin wraps in a
12
+ * `trackingContext` so these carry identity too.
13
+ *
14
+ * All fields here are safe scalars — these events carry no free-text, so none use the `redact` slot.
15
+ */
16
+ import { buildDslTransition, buildPositionLifecycle, } from "../telemetry/event-builders.js";
17
+ import { EVENT_NAME, eventAttrs, fmtThousands } from "../utils/event-catalog.js";
18
+ import { createLogger } from "../utils/logger.js";
19
+ import { emitEvent } from "../actions/event-derivation.js";
20
+ const eventLog = createLogger("[senpi-core][domain-events]");
21
+ /** `on_position_*` bus event → the lifecycle discriminator the record builder expects. */
22
+ const POSITION_EVENTS = {
23
+ on_position_opened: "opened",
24
+ on_position_closed: "closed",
25
+ on_position_flipped: "flipped",
26
+ on_position_increased: "increased",
27
+ on_position_decreased: "decreased",
28
+ };
29
+ /** `dsl.*` bus event → the transition discriminator. `dsl.close_attempt` stays a 9b trace unit. */
30
+ const DSL_EVENTS = {
31
+ "dsl.created": "created",
32
+ "dsl.tier_advanced": "tier_advanced",
33
+ "dsl.phase_changed": "phase_changed",
34
+ "dsl.sl_updated": "sl_updated",
35
+ "dsl.close_pending": "close_pending",
36
+ "dsl.closed": "closed",
37
+ "dsl.deleted": "deleted",
38
+ };
39
+ const DIRECTION_TAG = (dir) => (dir ? ` ${dir}` : "");
40
+ const SIZE_AT = (price) => (price !== undefined ? ` @ ${fmtThousands(price)}` : "");
41
+ /** The queryable scalar surface shared by every `position.*` event (fields absent on a variant drop out). */
42
+ function positionAttributes(rec) {
43
+ return eventAttrs({
44
+ "senpi.position.id": rec.positionId,
45
+ "senpi.asset": rec.asset,
46
+ "senpi.dex": rec.dex,
47
+ "senpi.position.direction": rec.direction ?? undefined,
48
+ "senpi.position.entry_price": rec.entryPrice,
49
+ "senpi.position.size": rec.size,
50
+ "senpi.position.leverage": rec.leverage,
51
+ "senpi.position.margin": rec.margin,
52
+ "senpi.position.unrealized_pnl": rec.unrealizedPnl,
53
+ "senpi.position.roe": rec.roe,
54
+ "senpi.position.close_reason": rec.closeReason,
55
+ "senpi.position.closed_price": rec.closedPrice,
56
+ "senpi.position.closed_size": rec.closedSize,
57
+ "senpi.position.size_delta": rec.sizeDelta,
58
+ "senpi.position.previous_size": rec.previousSize,
59
+ "senpi.position.new_asset": rec.newAsset,
60
+ "senpi.position.reconciliation_source": rec.reconciliationSource,
61
+ });
62
+ }
63
+ /**
64
+ * Map a `position.*` lifecycle record to its event. An `opened` whose `reconciliation_source` is
65
+ * `externally_detected` is surfaced as `position.reconciled` — a gap-pass position the runtime did
66
+ * not open — so the two are distinguishable downstream; everything else maps one-to-one. All `info`.
67
+ */
68
+ function buildPositionLifecycleEvent(event, payload, nowMs) {
69
+ const rec = buildPositionLifecycle(event, payload, nowMs);
70
+ if (rec === null)
71
+ return null;
72
+ const attributes = positionAttributes(rec);
73
+ const head = `${rec.asset}${DIRECTION_TAG(rec.direction)}`;
74
+ const base = { level: "info", attributes };
75
+ switch (rec.event) {
76
+ case "opened": {
77
+ const sized = rec.size !== undefined ? ` ${rec.size}` : "";
78
+ if (rec.reconciliationSource === "externally_detected") {
79
+ return { name: EVENT_NAME.positionReconciled, body: `Reconciled ${head}${sized} — externally detected`, ...base };
80
+ }
81
+ return { name: EVENT_NAME.positionOpened, body: `Opened ${head}${sized}${SIZE_AT(rec.entryPrice)}`, ...base };
82
+ }
83
+ case "closed":
84
+ return {
85
+ name: EVENT_NAME.positionClosed,
86
+ body: `Closed ${head}${SIZE_AT(rec.closedPrice)}${rec.closeReason ? ` (${rec.closeReason})` : ""}`,
87
+ ...base,
88
+ };
89
+ case "increased":
90
+ return { name: EVENT_NAME.positionIncreased, body: `Increased ${head}${rec.sizeDelta !== undefined ? ` by ${rec.sizeDelta}` : ""}`, ...base };
91
+ case "decreased":
92
+ return { name: EVENT_NAME.positionDecreased, body: `Decreased ${head}${rec.sizeDelta !== undefined ? ` by ${rec.sizeDelta}` : ""}`, ...base };
93
+ case "flipped":
94
+ return { name: EVENT_NAME.positionFlipped, body: `Flipped ${head}${rec.newAsset ? ` → ${rec.newAsset}` : ""}`, ...base };
95
+ default:
96
+ // `open_order_submitted` is not an event-log event (not subscribed); ignore defensively.
97
+ return null;
98
+ }
99
+ }
100
+ /** The queryable scalar surface shared by every `dsl.*` transition (fields absent on a variant drop out). */
101
+ function dslAttributes(rec) {
102
+ return eventAttrs({
103
+ "senpi.position.id": rec.positionId,
104
+ "senpi.asset": rec.asset,
105
+ "senpi.dex": rec.dex,
106
+ "senpi.position.direction": rec.direction ?? undefined,
107
+ "senpi.dsl.preset": rec.preset,
108
+ "senpi.dsl.phase": rec.phase,
109
+ "senpi.dsl.tier_index": rec.tierIndex ?? undefined,
110
+ "senpi.dsl.floor_price": rec.floorPrice,
111
+ "senpi.dsl.new_floor_price": rec.newFloorPrice,
112
+ "senpi.dsl.new_sl_price": rec.newSLPrice,
113
+ "senpi.dsl.sl_order_id": rec.slOrderId,
114
+ "senpi.dsl.current_roe": rec.currentROE,
115
+ "senpi.dsl.peak_roe": rec.peakROE,
116
+ "senpi.dsl.locked_profit_pct": rec.lockedProfitPct,
117
+ "senpi.dsl.close_reason": rec.closeReason,
118
+ "senpi.dsl.attempt": rec.attempt,
119
+ });
120
+ }
121
+ /** Map a `dsl.*` transition record to its event. All `info` — failure rides `dsl.closed`'s reason. */
122
+ function buildDslTransitionEvent(transition, payload, nowMs) {
123
+ const rec = buildDslTransition(transition, payload, nowMs);
124
+ if (rec === null)
125
+ return null;
126
+ const attributes = dslAttributes(rec);
127
+ const head = rec.asset;
128
+ const base = { level: "info", attributes };
129
+ switch (rec.transition) {
130
+ case "created":
131
+ return { name: EVENT_NAME.dslCreated, body: `DSL armed ${head}${rec.preset ? ` (${rec.preset})` : ""}`, ...base };
132
+ case "tier_advanced":
133
+ return { name: EVENT_NAME.dslTierAdvanced, body: `DSL tier → ${rec.tierIndex ?? "?"} on ${head}`, ...base };
134
+ case "phase_changed":
135
+ return { name: EVENT_NAME.dslPhaseChanged, body: `DSL phase → ${rec.phase ?? "?"} on ${head}`, ...base };
136
+ case "sl_updated":
137
+ return { name: EVENT_NAME.dslSlUpdated, body: `DSL stop → ${rec.newSLPrice !== undefined ? fmtThousands(rec.newSLPrice) : "?"} on ${head}`, ...base };
138
+ case "close_pending":
139
+ return { name: EVENT_NAME.dslClosePending, body: `DSL close pending ${head}${rec.attempt !== undefined ? ` (attempt ${rec.attempt})` : ""}`, ...base };
140
+ case "closed":
141
+ return { name: EVENT_NAME.dslClosed, body: `DSL closed ${head}${rec.closeReason ? ` (${rec.closeReason})` : ""}`, ...base };
142
+ case "deleted":
143
+ return { name: EVENT_NAME.dslDeleted, body: `DSL deleted ${head}`, ...base };
144
+ default:
145
+ // `settings_updated` has no catalog event (not subscribed); ignore defensively.
146
+ return null;
147
+ }
148
+ }
149
+ /**
150
+ * Subscribe the event log to the `position.*` / `dsl.*` domain events on the bus. Each handler builds
151
+ * its event through {@link emitEvent}'s guard, so a throwing builder or a telemetry failure can never
152
+ * propagate back through `bus.emit` into the trading path. Attach only when telemetry is enabled
153
+ * (per-event assembly on the serial path is dead work otherwise).
154
+ */
155
+ export function createDomainEventSubscriber(bus) {
156
+ const handlers = [];
157
+ function subscribe(event, handler) {
158
+ bus.on(event, handler);
159
+ handlers.push({ event, handler });
160
+ }
161
+ for (const [event, lifecycleEvent] of Object.entries(POSITION_EVENTS)) {
162
+ subscribe(event, (payload) => emitEvent(eventLog, () => buildPositionLifecycleEvent(lifecycleEvent, payload, Date.now())));
163
+ }
164
+ for (const [event, transition] of Object.entries(DSL_EVENTS)) {
165
+ subscribe(event, (payload) => emitEvent(eventLog, () => buildDslTransitionEvent(transition, payload, Date.now())));
166
+ }
167
+ let disposed = false;
168
+ return {
169
+ dispose() {
170
+ if (disposed)
171
+ return;
172
+ disposed = true;
173
+ for (const { event, handler } of handlers)
174
+ bus.off(event, handler);
175
+ handlers.length = 0;
176
+ },
177
+ };
178
+ }
179
+ // Exported for unit tests — the pure record→event projection, independent of the bus wiring.
180
+ export const __test = { buildPositionLifecycleEvent, buildDslTransitionEvent };
181
+ //# sourceMappingURL=domain-events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domain-events.js","sourceRoot":"","sources":["../../src/runtime/domain-events.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EACL,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,gCAAgC,CAAC;AAOxC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAiB,MAAM,2BAA2B,CAAC;AAChG,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAuB,MAAM,gCAAgC,CAAC;AAEhF,MAAM,QAAQ,GAAG,YAAY,CAAC,6BAA6B,CAAC,CAAC;AAE7D,0FAA0F;AAC1F,MAAM,eAAe,GAA2C;IAC9D,kBAAkB,EAAE,QAAQ;IAC5B,kBAAkB,EAAE,QAAQ;IAC5B,mBAAmB,EAAE,SAAS;IAC9B,qBAAqB,EAAE,WAAW;IAClC,qBAAqB,EAAE,WAAW;CACnC,CAAC;AAEF,mGAAmG;AACnG,MAAM,UAAU,GAAsC;IACpD,aAAa,EAAE,SAAS;IACxB,mBAAmB,EAAE,eAAe;IACpC,mBAAmB,EAAE,eAAe;IACpC,gBAAgB,EAAE,YAAY;IAC9B,mBAAmB,EAAE,eAAe;IACpC,YAAY,EAAE,QAAQ;IACtB,aAAa,EAAE,SAAS;CACzB,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,GAA8B,EAAU,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACzF,MAAM,OAAO,GAAG,CAAC,KAAyB,EAAU,EAAE,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAEhH,6GAA6G;AAC7G,SAAS,kBAAkB,CAAC,GAA4B;IACtD,OAAO,UAAU,CAA6C;QAC5D,mBAAmB,EAAE,GAAG,CAAC,UAAU;QACnC,aAAa,EAAE,GAAG,CAAC,KAAK;QACxB,WAAW,EAAE,GAAG,CAAC,GAAG;QACpB,0BAA0B,EAAE,GAAG,CAAC,SAAS,IAAI,SAAS;QACtD,4BAA4B,EAAE,GAAG,CAAC,UAAU;QAC5C,qBAAqB,EAAE,GAAG,CAAC,IAAI;QAC/B,yBAAyB,EAAE,GAAG,CAAC,QAAQ;QACvC,uBAAuB,EAAE,GAAG,CAAC,MAAM;QACnC,+BAA+B,EAAE,GAAG,CAAC,aAAa;QAClD,oBAAoB,EAAE,GAAG,CAAC,GAAG;QAC7B,6BAA6B,EAAE,GAAG,CAAC,WAAW;QAC9C,6BAA6B,EAAE,GAAG,CAAC,WAAW;QAC9C,4BAA4B,EAAE,GAAG,CAAC,UAAU;QAC5C,2BAA2B,EAAE,GAAG,CAAC,SAAS;QAC1C,8BAA8B,EAAE,GAAG,CAAC,YAAY;QAChD,0BAA0B,EAAE,GAAG,CAAC,QAAQ;QACxC,sCAAsC,EAAE,GAAG,CAAC,oBAAoB;KACjE,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,SAAS,2BAA2B,CAClC,KAA6B,EAC7B,OAAgB,EAChB,KAAa;IAEb,MAAM,GAAG,GAAG,sBAAsB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IAC1D,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC9B,MAAM,UAAU,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,GAAG,GAAG,CAAC,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;IAC3D,MAAM,IAAI,GAAG,EAAE,KAAK,EAAE,MAAe,EAAE,UAAU,EAAE,CAAC;IAEpD,QAAQ,GAAG,CAAC,KAAK,EAAE,CAAC;QAClB,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3D,IAAI,GAAG,CAAC,oBAAoB,KAAK,qBAAqB,EAAE,CAAC;gBACvD,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,kBAAkB,EAAE,IAAI,EAAE,cAAc,IAAI,GAAG,KAAK,wBAAwB,EAAE,GAAG,IAAI,EAAE,CAAC;YACpH,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,cAAc,EAAE,IAAI,EAAE,UAAU,IAAI,GAAG,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC;QAChH,CAAC;QACD,KAAK,QAAQ;YACX,OAAO;gBACL,IAAI,EAAE,UAAU,CAAC,cAAc;gBAC/B,IAAI,EAAE,UAAU,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBAClG,GAAG,IAAI;aACR,CAAC;QACJ,KAAK,WAAW;YACd,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,iBAAiB,EAAE,IAAI,EAAE,aAAa,IAAI,GAAG,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC;QAChJ,KAAK,WAAW;YACd,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,iBAAiB,EAAE,IAAI,EAAE,aAAa,IAAI,GAAG,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC;QAChJ,KAAK,SAAS;YACZ,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,eAAe,EAAE,IAAI,EAAE,WAAW,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC;QAC3H;YACE,yFAAyF;YACzF,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAED,6GAA6G;AAC7G,SAAS,aAAa,CAAC,GAAwB;IAC7C,OAAO,UAAU,CAAyC;QACxD,mBAAmB,EAAE,GAAG,CAAC,UAAU;QACnC,aAAa,EAAE,GAAG,CAAC,KAAK;QACxB,WAAW,EAAE,GAAG,CAAC,GAAG;QACpB,0BAA0B,EAAE,GAAG,CAAC,SAAS,IAAI,SAAS;QACtD,kBAAkB,EAAE,GAAG,CAAC,MAAM;QAC9B,iBAAiB,EAAE,GAAG,CAAC,KAAK;QAC5B,sBAAsB,EAAE,GAAG,CAAC,SAAS,IAAI,SAAS;QAClD,uBAAuB,EAAE,GAAG,CAAC,UAAU;QACvC,2BAA2B,EAAE,GAAG,CAAC,aAAa;QAC9C,wBAAwB,EAAE,GAAG,CAAC,UAAU;QACxC,uBAAuB,EAAE,GAAG,CAAC,SAAS;QACtC,uBAAuB,EAAE,GAAG,CAAC,UAAU;QACvC,oBAAoB,EAAE,GAAG,CAAC,OAAO;QACjC,6BAA6B,EAAE,GAAG,CAAC,eAAe;QAClD,wBAAwB,EAAE,GAAG,CAAC,WAAW;QACzC,mBAAmB,EAAE,GAAG,CAAC,OAAO;KACjC,CAAC,CAAC;AACL,CAAC;AAED,sGAAsG;AACtG,SAAS,uBAAuB,CAC9B,UAA6B,EAC7B,OAAgB,EAChB,KAAa;IAEb,MAAM,GAAG,GAAG,kBAAkB,CAAC,UAAU,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IAC3D,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC9B,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC;IACvB,MAAM,IAAI,GAAG,EAAE,KAAK,EAAE,MAAe,EAAE,UAAU,EAAE,CAAC;IAEpD,QAAQ,GAAG,CAAC,UAAU,EAAE,CAAC;QACvB,KAAK,SAAS;YACZ,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,UAAU,EAAE,IAAI,EAAE,aAAa,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC;QACpH,KAAK,eAAe;YAClB,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,eAAe,EAAE,IAAI,EAAE,cAAc,GAAG,CAAC,SAAS,IAAI,GAAG,OAAO,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC;QAC9G,KAAK,eAAe;YAClB,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,eAAe,EAAE,IAAI,EAAE,eAAe,GAAG,CAAC,KAAK,IAAI,GAAG,OAAO,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC;QAC3G,KAAK,YAAY;YACf,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,YAAY,EAAE,IAAI,EAAE,cAAc,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC;QACxJ,KAAK,eAAe;YAClB,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,eAAe,EAAE,IAAI,EAAE,qBAAqB,IAAI,GAAG,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,aAAa,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC;QACzJ,KAAK,QAAQ;YACX,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,IAAI,GAAG,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC;QAC9H,KAAK,SAAS;YACZ,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,UAAU,EAAE,IAAI,EAAE,eAAe,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC;QAC/E;YACE,gFAAgF;YAChF,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAOD;;;;;GAKG;AACH,MAAM,UAAU,2BAA2B,CAAC,GAAkB;IAC5D,MAAM,QAAQ,GAAmE,EAAE,CAAC;IAEpF,SAAS,SAAS,CAAC,KAAa,EAAE,OAAoC;QACpE,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IACpC,CAAC;IAED,KAAK,MAAM,CAAC,KAAK,EAAE,cAAc,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;QACtE,SAAS,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE,CAC3B,SAAS,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,2BAA2B,CAAC,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAC5F,CAAC;IACJ,CAAC;IAED,KAAK,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7D,SAAS,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE,CAC3B,SAAS,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,uBAAuB,CAAC,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CACpF,CAAC;IACJ,CAAC;IAED,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,OAAO;QACL,OAAO;YACL,IAAI,QAAQ;gBAAE,OAAO;YACrB,QAAQ,GAAG,IAAI,CAAC;YAChB,KAAK,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,QAAQ;gBAAE,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YACnE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QACtB,CAAC;KACF,CAAC;AACJ,CAAC;AAED,6FAA6F;AAC7F,MAAM,CAAC,MAAM,MAAM,GAAG,EAAE,2BAA2B,EAAE,uBAAuB,EAAE,CAAC"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Pure builders for the scanner-summary and runtime-lifecycle event-log events. Each returns a fully
3
+ * built {@link EmittableEvent} (or `null` when the source yields nothing), so the runtime emits with a
4
+ * single `logger.event` call. Bodies are deterministic narratives; every attribute is a safe scalar.
5
+ *
6
+ * The scanner-summary funnel selection is reused from {@link buildScannerSummary}
7
+ * — no reimplementation of the drop classification.
8
+ */
9
+ import { EVENT_NAME } from "../utils/event-catalog.js";
10
+ import type { EmittableEvent } from "../actions/event-derivation.js";
11
+ /**
12
+ * `scanner.summary` from the same scanner-run payload the scanner-complete handler emits.
13
+ * `null` when the scan considered no candidates (the anti-spam grain).
14
+ * Dropped candidates are market data → safe count attributes (`dropped_count` + by-reason), never
15
+ * `redact`.
16
+ */
17
+ export declare function buildScannerSummaryEvent(payload: unknown, nowMs: number): EmittableEvent<typeof EVENT_NAME.scannerSummary> | null;
18
+ export interface RuntimeStartedInput {
19
+ /** Strategy wallet — stamped so out-of-flow lifecycle events route to the per-strategy event store. */
20
+ readonly address?: string;
21
+ readonly recipeName?: string;
22
+ readonly recipeVersion?: string | number;
23
+ readonly runtimeVersion?: string;
24
+ readonly scannerCount: number;
25
+ readonly actionCount: number;
26
+ readonly hasDsl: boolean;
27
+ /** Raw, pre-env-resolution config — the form the `senpi.config.hash` is computed over. */
28
+ readonly unresolvedConfig?: Record<string, unknown>;
29
+ /** Resolved sizing/leverage preset — low-cardinality scalars surfaced so the loaded values are visible. */
30
+ readonly slots?: number;
31
+ readonly tradingRisk?: string;
32
+ readonly marginPerSlot?: number;
33
+ readonly marginPct?: number;
34
+ readonly defaultLeverage?: number;
35
+ }
36
+ /**
37
+ * `runtime.started` — carries the UNRESOLVED config hash (the form the recording identity hashes), so
38
+ * the printed hash matches `senpi.config.hash` on the rows. Emitted at every `Runtime.start()`.
39
+ */
40
+ export declare function buildRuntimeStartedEvent(input: RuntimeStartedInput): EmittableEvent<typeof EVENT_NAME.runtimeStarted>;
41
+ /** `runtime.stopped` — clean shutdown, with uptime. */
42
+ export declare function buildRuntimeStoppedEvent(runtimeVersion: string | undefined, uptimeMs: number, address?: string): EmittableEvent<typeof EVENT_NAME.runtimeStopped>;
43
+ export interface RuntimeCreatedInput {
44
+ readonly runtimeId: string;
45
+ /** Strategy wallet — stamped so this out-of-flow registry event routes to the per-strategy store. */
46
+ readonly address?: string;
47
+ readonly recipeName?: string;
48
+ }
49
+ /**
50
+ * `runtime.created` — a runtime added to the registry via `senpi.installRuntime`. The create fact,
51
+ * distinct from `runtime.started` (which also fires on a transient restart).
52
+ */
53
+ export declare function buildRuntimeCreatedEvent(input: RuntimeCreatedInput): EmittableEvent<typeof EVENT_NAME.runtimeCreated>;
54
+ export interface RuntimeDeletedInput {
55
+ readonly runtimeId: string;
56
+ /** Strategy wallet — stamped so this out-of-flow registry event routes to the per-strategy store. */
57
+ readonly address?: string;
58
+ /** Whether a running handle was stopped as part of the delete (vs a never-booted registration). */
59
+ readonly hadLiveHandle: boolean;
60
+ }
61
+ /**
62
+ * `runtime.deleted` — a runtime removed from the registry via `senpi.deleteRuntime`. The discriminator
63
+ * a transient `runtime.stopped` can't provide; fires unconditionally so a never-booted runtime
64
+ * (which emits no `runtime.stopped`) is still observable.
65
+ */
66
+ export declare function buildRuntimeDeletedEvent(input: RuntimeDeletedInput): EmittableEvent<typeof EVENT_NAME.runtimeDeleted>;
67
+ /** `runtime.paused` — a risk gate tripped a running→paused transition. WARN. */
68
+ export declare function buildRuntimePausedEvent(gateId: string | undefined, gateName: string | undefined, reason: string | undefined, address?: string): EmittableEvent<typeof EVENT_NAME.runtimePaused>;
69
+ /** `runtime.resumed` — a previously-tripped risk gate cleared, re-arming a paused→running transition. */
70
+ export declare function buildRuntimeResumedEvent(gateId: string | undefined, gateName: string | undefined, address?: string): EmittableEvent<typeof EVENT_NAME.runtimeResumed>;
71
+ export interface QueueBackpressureInput {
72
+ readonly depth: number;
73
+ readonly threshold: number;
74
+ readonly scannerId?: string;
75
+ /** Strategy wallet — stamped explicitly; this fires outside the per-signal identity context. */
76
+ readonly address?: string;
77
+ }
78
+ /**
79
+ * `runtime.queue_backpressure` — the serial signal queue reached the backpressure threshold, so the
80
+ * consumer is falling behind inflow. WARN; the caller fires it on the rising edge only. No free-text,
81
+ * so no `redact`.
82
+ */
83
+ export declare function buildQueueBackpressureEvent(input: QueueBackpressureInput): EmittableEvent<typeof EVENT_NAME.runtimeQueueBackpressure>;
84
+ /** `runtime.error` — an uncaught signal-processing error. ERROR; the message rides `redact`. */
85
+ export declare function buildRuntimeErrorEvent(phase: string, scannerId: string | undefined, message: string): EmittableEvent<typeof EVENT_NAME.runtimeError>;
86
+ //# sourceMappingURL=lifecycle-events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle-events.d.ts","sourceRoot":"","sources":["../../src/runtime/lifecycle-events.ts"],"names":[],"mappings":"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"}