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

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 (458) 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 +255 -77
  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/intake/intake-events.d.ts +44 -0
  130. package/dist/runtime-api/intake/intake-events.d.ts.map +1 -0
  131. package/dist/runtime-api/intake/intake-events.js +131 -0
  132. package/dist/runtime-api/intake/intake-events.js.map +1 -0
  133. package/dist/runtime-api/intake/scanner-launcher.d.ts +2 -0
  134. package/dist/runtime-api/intake/scanner-launcher.d.ts.map +1 -1
  135. package/dist/runtime-api/intake/scanner-launcher.js +58 -15
  136. package/dist/runtime-api/intake/scanner-launcher.js.map +1 -1
  137. package/dist/runtime-api/intake/scanner-registry.d.ts +3 -0
  138. package/dist/runtime-api/intake/scanner-registry.d.ts.map +1 -1
  139. package/dist/runtime-api/intake/scanner-registry.js +3 -0
  140. package/dist/runtime-api/intake/scanner-registry.js.map +1 -1
  141. package/dist/runtime-api/intake/supervisor-events.d.ts +61 -0
  142. package/dist/runtime-api/intake/supervisor-events.d.ts.map +1 -0
  143. package/dist/runtime-api/intake/supervisor-events.js +173 -0
  144. package/dist/runtime-api/intake/supervisor-events.js.map +1 -0
  145. package/dist/runtime-api/routes/signals.d.ts +1 -1
  146. package/dist/runtime-api/routes/signals.d.ts.map +1 -1
  147. package/dist/runtime-api/routes/signals.js +121 -35
  148. package/dist/runtime-api/routes/signals.js.map +1 -1
  149. package/dist/runtime-api/server.d.ts.map +1 -1
  150. package/dist/runtime-api/server.js +10 -1
  151. package/dist/runtime-api/server.js.map +1 -1
  152. package/dist/scanners/engine/data-providers.d.ts +3 -0
  153. package/dist/scanners/engine/data-providers.d.ts.map +1 -1
  154. package/dist/scanners/engine/data-providers.js.map +1 -1
  155. package/dist/scanners/engine/engine.d.ts +18 -0
  156. package/dist/scanners/engine/engine.d.ts.map +1 -1
  157. package/dist/scanners/engine/engine.js +96 -2
  158. package/dist/scanners/engine/engine.js.map +1 -1
  159. package/dist/scanners/engine/input-resolver.d.ts.map +1 -1
  160. package/dist/scanners/engine/input-resolver.js +9 -7
  161. package/dist/scanners/engine/input-resolver.js.map +1 -1
  162. package/dist/scanners/runtime-module.d.ts +3 -0
  163. package/dist/scanners/runtime-module.d.ts.map +1 -1
  164. package/dist/scanners/runtime-module.js +7 -0
  165. package/dist/scanners/runtime-module.js.map +1 -1
  166. package/dist/senpi/client.d.ts +10 -0
  167. package/dist/senpi/client.d.ts.map +1 -1
  168. package/dist/senpi/client.js +113 -46
  169. package/dist/senpi/client.js.map +1 -1
  170. package/dist/skills-manager/bootstrap.d.ts.map +1 -1
  171. package/dist/skills-manager/bootstrap.js +22 -33
  172. package/dist/skills-manager/bootstrap.js.map +1 -1
  173. package/dist/skills-manager/clone-groups.d.ts +20 -0
  174. package/dist/skills-manager/clone-groups.d.ts.map +1 -0
  175. package/dist/skills-manager/clone-groups.js +45 -0
  176. package/dist/skills-manager/clone-groups.js.map +1 -0
  177. package/dist/skills-manager/coordinator.d.ts.map +1 -1
  178. package/dist/skills-manager/coordinator.js +111 -75
  179. package/dist/skills-manager/coordinator.js.map +1 -1
  180. package/dist/skills-manager/manifest.d.ts +24 -0
  181. package/dist/skills-manager/manifest.d.ts.map +1 -1
  182. package/dist/skills-manager/manifest.js +23 -10
  183. package/dist/skills-manager/manifest.js.map +1 -1
  184. package/dist/skills-manager/skills-manifest.json +12 -7
  185. package/dist/skills-manager/types.d.ts +12 -0
  186. package/dist/skills-manager/types.d.ts.map +1 -1
  187. package/dist/state/state-events.d.ts +13 -0
  188. package/dist/state/state-events.d.ts.map +1 -0
  189. package/dist/state/state-events.js +22 -0
  190. package/dist/state/state-events.js.map +1 -0
  191. package/dist/state/state-manager.d.ts.map +1 -1
  192. package/dist/state/state-manager.js +14 -1
  193. package/dist/state/state-manager.js.map +1 -1
  194. package/dist/telemetry/attributes.d.ts +13 -0
  195. package/dist/telemetry/attributes.d.ts.map +1 -0
  196. package/dist/telemetry/attributes.js +22 -0
  197. package/dist/telemetry/attributes.js.map +1 -0
  198. package/dist/{tracking → telemetry}/context.d.ts +12 -5
  199. package/dist/telemetry/context.d.ts.map +1 -0
  200. package/dist/{tracking → telemetry}/context.js +4 -4
  201. package/dist/telemetry/context.js.map +1 -0
  202. package/dist/{recording/records.d.ts → telemetry/event-builders.d.ts} +145 -33
  203. package/dist/telemetry/event-builders.d.ts.map +1 -0
  204. package/dist/{recording/wiring/record-builders.js → telemetry/event-builders.js} +94 -40
  205. package/dist/telemetry/event-builders.js.map +1 -0
  206. package/dist/telemetry/event-store.d.ts +66 -0
  207. package/dist/telemetry/event-store.d.ts.map +1 -0
  208. package/dist/telemetry/event-store.js +202 -0
  209. package/dist/telemetry/event-store.js.map +1 -0
  210. package/dist/telemetry/identity.d.ts +72 -0
  211. package/dist/telemetry/identity.d.ts.map +1 -0
  212. package/dist/{recording/wiring → telemetry}/identity.js +6 -2
  213. package/dist/telemetry/identity.js.map +1 -0
  214. package/dist/telemetry/metrics.d.ts +169 -0
  215. package/dist/telemetry/metrics.d.ts.map +1 -0
  216. package/dist/telemetry/metrics.js +437 -0
  217. package/dist/telemetry/metrics.js.map +1 -0
  218. package/dist/telemetry/otel-sdk.d.ts +93 -0
  219. package/dist/telemetry/otel-sdk.d.ts.map +1 -0
  220. package/dist/telemetry/otel-sdk.js +297 -0
  221. package/dist/telemetry/otel-sdk.js.map +1 -0
  222. package/dist/telemetry/spans/constants.d.ts +12 -0
  223. package/dist/telemetry/spans/constants.d.ts.map +1 -0
  224. package/dist/telemetry/spans/constants.js +12 -0
  225. package/dist/telemetry/spans/constants.js.map +1 -0
  226. package/dist/telemetry/spans/gen-ai.d.ts +74 -0
  227. package/dist/telemetry/spans/gen-ai.d.ts.map +1 -0
  228. package/dist/telemetry/spans/gen-ai.js +339 -0
  229. package/dist/telemetry/spans/gen-ai.js.map +1 -0
  230. package/dist/telemetry/spans/index.d.ts +11 -0
  231. package/dist/telemetry/spans/index.d.ts.map +1 -0
  232. package/dist/telemetry/spans/index.js +11 -0
  233. package/dist/telemetry/spans/index.js.map +1 -0
  234. package/dist/{tracking → telemetry}/spans/redact-pii.d.ts +19 -21
  235. package/dist/telemetry/spans/redact-pii.d.ts.map +1 -0
  236. package/dist/{tracking → telemetry}/spans/redact-pii.js +35 -32
  237. package/dist/telemetry/spans/redact-pii.js.map +1 -0
  238. package/dist/telemetry/spans/sanitize-payload.d.ts.map +1 -0
  239. package/dist/telemetry/spans/sanitize-payload.js.map +1 -0
  240. package/dist/telemetry/spans/span-hooks.d.ts +18 -0
  241. package/dist/telemetry/spans/span-hooks.d.ts.map +1 -0
  242. package/dist/telemetry/spans/span-hooks.js +764 -0
  243. package/dist/telemetry/spans/span-hooks.js.map +1 -0
  244. package/dist/telemetry/tool-plane.d.ts +31 -0
  245. package/dist/telemetry/tool-plane.d.ts.map +1 -0
  246. package/dist/telemetry/tool-plane.js +70 -0
  247. package/dist/telemetry/tool-plane.js.map +1 -0
  248. package/dist/telemetry/trace-identity.d.ts +32 -0
  249. package/dist/telemetry/trace-identity.d.ts.map +1 -0
  250. package/dist/telemetry/trace-identity.js +62 -0
  251. package/dist/telemetry/trace-identity.js.map +1 -0
  252. package/dist/telemetry/tracing.d.ts +33 -0
  253. package/dist/telemetry/tracing.d.ts.map +1 -0
  254. package/dist/telemetry/tracing.js +70 -0
  255. package/dist/telemetry/tracing.js.map +1 -0
  256. package/dist/types/dsl/index.d.ts +8 -9
  257. package/dist/types/dsl/index.d.ts.map +1 -1
  258. package/dist/types/runtime.d.ts +1 -1
  259. package/dist/types/runtime.d.ts.map +1 -1
  260. package/dist/types/scanner.d.ts +2 -0
  261. package/dist/types/scanner.d.ts.map +1 -1
  262. package/dist/utils/event-catalog.d.ts +506 -0
  263. package/dist/utils/event-catalog.d.ts.map +1 -0
  264. package/dist/utils/event-catalog.js +142 -0
  265. package/dist/utils/event-catalog.js.map +1 -0
  266. package/dist/utils/logger.d.ts +63 -5
  267. package/dist/utils/logger.d.ts.map +1 -1
  268. package/dist/utils/logger.js +360 -27
  269. package/dist/utils/logger.js.map +1 -1
  270. package/dist/utils/wallet-address.d.ts +3 -0
  271. package/dist/utils/wallet-address.d.ts.map +1 -0
  272. package/dist/utils/wallet-address.js +17 -0
  273. package/dist/utils/wallet-address.js.map +1 -0
  274. package/openclaw.plugin.json +20 -6
  275. package/package.json +10 -2
  276. package/dist/actions/tracking-helpers.d.ts +0 -28
  277. package/dist/actions/tracking-helpers.d.ts.map +0 -1
  278. package/dist/actions/tracking-helpers.js +0 -93
  279. package/dist/actions/tracking-helpers.js.map +0 -1
  280. package/dist/recording/emitter.d.ts +0 -27
  281. package/dist/recording/emitter.d.ts.map +0 -1
  282. package/dist/recording/emitter.js +0 -2
  283. package/dist/recording/emitter.js.map +0 -1
  284. package/dist/recording/identity.d.ts +0 -34
  285. package/dist/recording/identity.d.ts.map +0 -1
  286. package/dist/recording/identity.js +0 -2
  287. package/dist/recording/identity.js.map +0 -1
  288. package/dist/recording/index.d.ts +0 -11
  289. package/dist/recording/index.d.ts.map +0 -1
  290. package/dist/recording/index.js +0 -2
  291. package/dist/recording/index.js.map +0 -1
  292. package/dist/recording/noop-emitter.d.ts +0 -23
  293. package/dist/recording/noop-emitter.d.ts.map +0 -1
  294. package/dist/recording/noop-emitter.js +0 -22
  295. package/dist/recording/noop-emitter.js.map +0 -1
  296. package/dist/recording/otel/attributes.d.ts +0 -35
  297. package/dist/recording/otel/attributes.d.ts.map +0 -1
  298. package/dist/recording/otel/attributes.js +0 -131
  299. package/dist/recording/otel/attributes.js.map +0 -1
  300. package/dist/recording/otel/constants.d.ts +0 -123
  301. package/dist/recording/otel/constants.d.ts.map +0 -1
  302. package/dist/recording/otel/constants.js +0 -172
  303. package/dist/recording/otel/constants.js.map +0 -1
  304. package/dist/recording/otel/ids.d.ts +0 -25
  305. package/dist/recording/otel/ids.d.ts.map +0 -1
  306. package/dist/recording/otel/ids.js +0 -37
  307. package/dist/recording/otel/ids.js.map +0 -1
  308. package/dist/recording/otel/index.d.ts +0 -13
  309. package/dist/recording/otel/index.d.ts.map +0 -1
  310. package/dist/recording/otel/index.js +0 -9
  311. package/dist/recording/otel/index.js.map +0 -1
  312. package/dist/recording/otel/mappers.d.ts +0 -100
  313. package/dist/recording/otel/mappers.d.ts.map +0 -1
  314. package/dist/recording/otel/mappers.js +0 -683
  315. package/dist/recording/otel/mappers.js.map +0 -1
  316. package/dist/recording/otel/otel-emitter.d.ts +0 -43
  317. package/dist/recording/otel/otel-emitter.d.ts.map +0 -1
  318. package/dist/recording/otel/otel-emitter.js +0 -99
  319. package/dist/recording/otel/otel-emitter.js.map +0 -1
  320. package/dist/recording/otel/redaction.d.ts +0 -47
  321. package/dist/recording/otel/redaction.d.ts.map +0 -1
  322. package/dist/recording/otel/redaction.js +0 -88
  323. package/dist/recording/otel/redaction.js.map +0 -1
  324. package/dist/recording/records.d.ts.map +0 -1
  325. package/dist/recording/records.js +0 -14
  326. package/dist/recording/records.js.map +0 -1
  327. package/dist/recording/transport/batcher.d.ts +0 -59
  328. package/dist/recording/transport/batcher.d.ts.map +0 -1
  329. package/dist/recording/transport/batcher.js +0 -234
  330. package/dist/recording/transport/batcher.js.map +0 -1
  331. package/dist/recording/transport/client.d.ts +0 -41
  332. package/dist/recording/transport/client.d.ts.map +0 -1
  333. package/dist/recording/transport/client.js +0 -69
  334. package/dist/recording/transport/client.js.map +0 -1
  335. package/dist/recording/transport/config.d.ts +0 -53
  336. package/dist/recording/transport/config.d.ts.map +0 -1
  337. package/dist/recording/transport/config.js +0 -41
  338. package/dist/recording/transport/config.js.map +0 -1
  339. package/dist/recording/transport/index.d.ts +0 -16
  340. package/dist/recording/transport/index.d.ts.map +0 -1
  341. package/dist/recording/transport/index.js +0 -12
  342. package/dist/recording/transport/index.js.map +0 -1
  343. package/dist/recording/transport/rows.d.ts +0 -88
  344. package/dist/recording/transport/rows.d.ts.map +0 -1
  345. package/dist/recording/transport/rows.js +0 -15
  346. package/dist/recording/transport/rows.js.map +0 -1
  347. package/dist/recording/wiring/emitter-factory.d.ts +0 -39
  348. package/dist/recording/wiring/emitter-factory.d.ts.map +0 -1
  349. package/dist/recording/wiring/emitter-factory.js +0 -62
  350. package/dist/recording/wiring/emitter-factory.js.map +0 -1
  351. package/dist/recording/wiring/identity.d.ts +0 -27
  352. package/dist/recording/wiring/identity.d.ts.map +0 -1
  353. package/dist/recording/wiring/identity.js.map +0 -1
  354. package/dist/recording/wiring/index.d.ts +0 -12
  355. package/dist/recording/wiring/index.d.ts.map +0 -1
  356. package/dist/recording/wiring/index.js +0 -9
  357. package/dist/recording/wiring/index.js.map +0 -1
  358. package/dist/recording/wiring/record-builders.d.ts +0 -107
  359. package/dist/recording/wiring/record-builders.d.ts.map +0 -1
  360. package/dist/recording/wiring/record-builders.js.map +0 -1
  361. package/dist/recording/wiring/subscriber.d.ts +0 -28
  362. package/dist/recording/wiring/subscriber.d.ts.map +0 -1
  363. package/dist/recording/wiring/subscriber.js +0 -173
  364. package/dist/recording/wiring/subscriber.js.map +0 -1
  365. package/dist/recording/wiring/values.d.ts +0 -19
  366. package/dist/recording/wiring/values.d.ts.map +0 -1
  367. package/dist/recording/wiring/values.js +0 -49
  368. package/dist/recording/wiring/values.js.map +0 -1
  369. package/dist/tracking/build-rehydrate-items.d.ts +0 -15
  370. package/dist/tracking/build-rehydrate-items.d.ts.map +0 -1
  371. package/dist/tracking/build-rehydrate-items.js +0 -19
  372. package/dist/tracking/build-rehydrate-items.js.map +0 -1
  373. package/dist/tracking/constants.d.ts +0 -24
  374. package/dist/tracking/constants.d.ts.map +0 -1
  375. package/dist/tracking/constants.js +0 -52
  376. package/dist/tracking/constants.js.map +0 -1
  377. package/dist/tracking/context.d.ts.map +0 -1
  378. package/dist/tracking/context.js.map +0 -1
  379. package/dist/tracking/index.d.ts +0 -16
  380. package/dist/tracking/index.d.ts.map +0 -1
  381. package/dist/tracking/index.js +0 -11
  382. package/dist/tracking/index.js.map +0 -1
  383. package/dist/tracking/plugin-event-tracker.d.ts +0 -13
  384. package/dist/tracking/plugin-event-tracker.d.ts.map +0 -1
  385. package/dist/tracking/plugin-event-tracker.js +0 -27
  386. package/dist/tracking/plugin-event-tracker.js.map +0 -1
  387. package/dist/tracking/position-id-registry.d.ts.map +0 -1
  388. package/dist/tracking/position-id-registry.js.map +0 -1
  389. package/dist/tracking/spans/constants.d.ts +0 -19
  390. package/dist/tracking/spans/constants.d.ts.map +0 -1
  391. package/dist/tracking/spans/constants.js +0 -31
  392. package/dist/tracking/spans/constants.js.map +0 -1
  393. package/dist/tracking/spans/fan-out-span-transport.d.ts +0 -22
  394. package/dist/tracking/spans/fan-out-span-transport.d.ts.map +0 -1
  395. package/dist/tracking/spans/fan-out-span-transport.js +0 -49
  396. package/dist/tracking/spans/fan-out-span-transport.js.map +0 -1
  397. package/dist/tracking/spans/index.d.ts +0 -13
  398. package/dist/tracking/spans/index.d.ts.map +0 -1
  399. package/dist/tracking/spans/index.js +0 -16
  400. package/dist/tracking/spans/index.js.map +0 -1
  401. package/dist/tracking/spans/otel/fit-row-budget.d.ts +0 -22
  402. package/dist/tracking/spans/otel/fit-row-budget.d.ts.map +0 -1
  403. package/dist/tracking/spans/otel/fit-row-budget.js +0 -91
  404. package/dist/tracking/spans/otel/fit-row-budget.js.map +0 -1
  405. package/dist/tracking/spans/otel/map-span-to-trace-row.d.ts +0 -16
  406. package/dist/tracking/spans/otel/map-span-to-trace-row.d.ts.map +0 -1
  407. package/dist/tracking/spans/otel/map-span-to-trace-row.js +0 -227
  408. package/dist/tracking/spans/otel/map-span-to-trace-row.js.map +0 -1
  409. package/dist/tracking/spans/otel/recording-span-transport.d.ts +0 -43
  410. package/dist/tracking/spans/otel/recording-span-transport.d.ts.map +0 -1
  411. package/dist/tracking/spans/otel/recording-span-transport.js +0 -67
  412. package/dist/tracking/spans/otel/recording-span-transport.js.map +0 -1
  413. package/dist/tracking/spans/otel/span-ids.d.ts +0 -22
  414. package/dist/tracking/spans/otel/span-ids.d.ts.map +0 -1
  415. package/dist/tracking/spans/otel/span-ids.js +0 -32
  416. package/dist/tracking/spans/otel/span-ids.js.map +0 -1
  417. package/dist/tracking/spans/plugin-span-tracker.d.ts +0 -9
  418. package/dist/tracking/spans/plugin-span-tracker.d.ts.map +0 -1
  419. package/dist/tracking/spans/plugin-span-tracker.js +0 -115
  420. package/dist/tracking/spans/plugin-span-tracker.js.map +0 -1
  421. package/dist/tracking/spans/redact-pii.d.ts.map +0 -1
  422. package/dist/tracking/spans/redact-pii.js.map +0 -1
  423. package/dist/tracking/spans/sanitize-payload.d.ts.map +0 -1
  424. package/dist/tracking/spans/sanitize-payload.js.map +0 -1
  425. package/dist/tracking/spans/span-hooks.d.ts +0 -28
  426. package/dist/tracking/spans/span-hooks.d.ts.map +0 -1
  427. package/dist/tracking/spans/span-hooks.js +0 -409
  428. package/dist/tracking/spans/span-hooks.js.map +0 -1
  429. package/dist/tracking/spans/span-tracker.d.ts +0 -133
  430. package/dist/tracking/spans/span-tracker.d.ts.map +0 -1
  431. package/dist/tracking/spans/span-tracker.js +0 -721
  432. package/dist/tracking/spans/span-tracker.js.map +0 -1
  433. package/dist/tracking/spans/span-transport.d.ts +0 -71
  434. package/dist/tracking/spans/span-transport.d.ts.map +0 -1
  435. package/dist/tracking/spans/span-transport.js +0 -240
  436. package/dist/tracking/spans/span-transport.js.map +0 -1
  437. package/dist/tracking/spans/types.d.ts +0 -101
  438. package/dist/tracking/spans/types.d.ts.map +0 -1
  439. package/dist/tracking/spans/types.js +0 -6
  440. package/dist/tracking/spans/types.js.map +0 -1
  441. package/dist/tracking/tracker.d.ts +0 -30
  442. package/dist/tracking/tracker.d.ts.map +0 -1
  443. package/dist/tracking/tracker.js +0 -66
  444. package/dist/tracking/tracker.js.map +0 -1
  445. package/dist/tracking/tracking-handler.d.ts +0 -12
  446. package/dist/tracking/tracking-handler.d.ts.map +0 -1
  447. package/dist/tracking/tracking-handler.js +0 -148
  448. package/dist/tracking/tracking-handler.js.map +0 -1
  449. package/dist/tracking/transport.d.ts +0 -35
  450. package/dist/tracking/transport.d.ts.map +0 -1
  451. package/dist/tracking/transport.js +0 -133
  452. package/dist/tracking/transport.js.map +0 -1
  453. package/dist/tracking/types.d.ts +0 -21
  454. package/dist/tracking/types.d.ts.map +0 -1
  455. package/dist/tracking/types.js +0 -6
  456. package/dist/tracking/types.js.map +0 -1
  457. /package/dist/{tracking → telemetry}/spans/sanitize-payload.d.ts +0 -0
  458. /package/dist/{tracking → telemetry}/spans/sanitize-payload.js +0 -0
@@ -2,7 +2,7 @@
2
2
  "id": "runtime",
3
3
  "name": "Senpi Runtime",
4
4
  "description": "Senpi runtime plugin for OpenClaw. Orchestrates scanners, LLM-based trade decisions, and a DSL trailing stop-loss exit engine.",
5
- "version": "3.0.6",
5
+ "version": "3.0.9",
6
6
  "commandAliases": [
7
7
  {
8
8
  "name": "senpi"
@@ -85,7 +85,7 @@
85
85
  "skillsManager": {
86
86
  "type": "object",
87
87
  "additionalProperties": false,
88
- "description": "Skills manager configuration. The managed skill set and each skill's source (repo/branch/path) come from the checked-in manifest src/skills-manager/skills-manifest.json — the single source of truth, shipped with the runtime. Checks the source repo for updates after each plugin auto-update tick and applies patch/minor updates automatically; major updates are detected but NOT auto-applied — they are surfaced via `senpi skills status` for a manual `senpi skills update <name>` (no notification is sent). Cadence is inherited from `autoUpdate.pollIntervalMinutes`; this block has no independent poll interval. Omit this block to manage the full manifest set with defaults.",
88
+ "description": "Skills manager configuration. The managed skill set and each skill's source (repo/branch/path) come from the checked-in manifest src/skills-manager/skills-manifest.json — the single source of truth, shipped with the runtime. Checks the source repo for updates after each plugin auto-update tick and applies patch/minor updates automatically; major updates are gated by default (detected, surfaced via `senpi skills status`, applied via a manual `senpi skills update <name>` — no notification). To authorize automatic major upgrades, set a per-skill `maxMajor` ceiling in the manifest (or `overrides`): the tick then auto-applies majors up to and including that number; bumping it in a reviewed change is the fleet-wide lever for adopting a new skill major. Cadence is inherited from `autoUpdate.pollIntervalMinutes`; this block has no independent poll interval. Omit this block to manage the full manifest set with defaults.",
89
89
  "default": {
90
90
  "enabled": true
91
91
  },
@@ -123,10 +123,24 @@
123
123
  "type": "object",
124
124
  "additionalProperties": false,
125
125
  "properties": {
126
- "repo": { "type": "string" },
127
- "branch": { "type": "string" },
128
- "commit": { "type": "string", "description": "Pin to a commit SHA, or 'latest' to track the branch tip." },
129
- "path": { "type": "string" }
126
+ "repo": {
127
+ "type": "string"
128
+ },
129
+ "branch": {
130
+ "type": "string"
131
+ },
132
+ "commit": {
133
+ "type": "string",
134
+ "description": "Pin to a commit SHA, or 'latest' to track the branch tip."
135
+ },
136
+ "path": {
137
+ "type": "string"
138
+ },
139
+ "maxMajor": {
140
+ "type": "integer",
141
+ "minimum": 0,
142
+ "description": "Auto-update major-version ceiling: the tick auto-applies updates up to and including this major and gates anything above. Unset gates all majors (manual update required)."
143
+ }
130
144
  }
131
145
  },
132
146
  "description": "Optional per-skill source overrides keyed by skill name, e.g. { \"senpi-strategy-ops\": { \"branch\": \"strategy-v2\" } }. Each entry may override repo, branch, and/or path. Branch precedence (highest first): per-skill env SENPI_SKILLS_BRANCH_<NAME> > this per-skill override > global env SENPI_SKILLS_BRANCH > manifest entry branch > manifest defaults.branch. So a per-skill override pins a skill even while the global env retargets the rest."
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@senpi/runtime",
3
- "version": "3.0.6-dev.skill-manager-v2.20260629194505",
3
+ "version": "3.0.9-dev.runtime-phase-2.20260707070820",
4
4
  "description": "Senpi runtime plugin for OpenClaw",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -33,11 +33,15 @@
33
33
  },
34
34
  "dependencies": {
35
35
  "@anthropic-ai/sdk": "^0.39.0",
36
+ "@hyperdx/node-opentelemetry": "^0.11.0",
36
37
  "@modelcontextprotocol/sdk": "^1.0.0",
38
+ "@opentelemetry/api": "^1.9.1",
39
+ "@opentelemetry/api-logs": "^0.218.0",
40
+ "@opentelemetry/instrumentation-undici": "^0.28.0",
41
+ "@opentelemetry/sdk-trace-base": "2.8.0",
37
42
  "@sinclair/typebox": "^0.34.0",
38
43
  "async-retry": "^1.3.3",
39
44
  "bip39": "^3.1.0",
40
- "dd-trace": "^5.99.1",
41
45
  "dotenv": "^16.4.5",
42
46
  "fastify": "^5.8.5",
43
47
  "mcporter": "^0.7.3",
@@ -49,12 +53,16 @@
49
53
  "openclaw": ">=2026.5.0"
50
54
  },
51
55
  "devDependencies": {
56
+ "@opentelemetry/context-async-hooks": "^2.8.0",
52
57
  "@types/async-retry": "^1.4.9",
53
58
  "@types/node": "^22.0.0",
54
59
  "tsx": "^4.21.0",
55
60
  "typescript": "^5.7.0",
56
61
  "vitest": "^3.0.0"
57
62
  },
63
+ "overrides": {
64
+ "@opentelemetry/sdk-trace-base": "2.8.0"
65
+ },
58
66
  "openclaw": {
59
67
  "type": "extension",
60
68
  "extensions": [
@@ -1,28 +0,0 @@
1
- import type { ActionResult, ActionType, DecisionMode, HookEvent, ScanResult } from './types.js';
2
- import type { HookSystem } from '../types/hooks.js';
3
- export interface TrackingHelperContext {
4
- hookSystem: HookSystem;
5
- actionName: string;
6
- actionType: ActionType;
7
- decisionMode: DecisionMode;
8
- decisionModel?: string;
9
- minConfidence?: number;
10
- }
11
- /** Additive telemetry stamps echoed onto `tracking.action_result` (decision-window + scan provenance). */
12
- export interface TrackingActionResultExtras {
13
- scanResult?: ScanResult;
14
- /** Epoch ms when the action began handling the scan event. */
15
- decisionStartedAt?: number;
16
- /** Epoch ms when the decision phase ended (decision engine returned or threw). */
17
- decisionEndedAt?: number;
18
- minConfidence?: number;
19
- }
20
- export declare function emitTrackingDecision(ctx: TrackingHelperContext, event: HookEvent, address: string, scanResult: ScanResult | undefined, decision: object, minConfidence?: number, prompt?: string, contextData?: Record<string, unknown>, skipReason?: string): void;
21
- /** `order.placed` — an order was submitted / is resting. Reads only values already in scope. */
22
- export declare function emitOrderPlaced(hookSystem: HookSystem, event: HookEvent, address: string, data: Record<string, unknown>): void;
23
- /** `order.filled` — a fill was confirmed. */
24
- export declare function emitOrderFilled(hookSystem: HookSystem, event: HookEvent, address: string, data: Record<string, unknown>): void;
25
- /** `order.failed` — the venue rejected the order or the submit threw. */
26
- export declare function emitOrderFailed(hookSystem: HookSystem, event: HookEvent, address: string, data: Record<string, unknown>): void;
27
- export declare function emitTrackingActionResult(ctx: TrackingHelperContext, event: HookEvent, address: string, result: ActionResult, extras?: TrackingActionResultExtras): void;
28
- //# sourceMappingURL=tracking-helpers.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tracking-helpers.d.ts","sourceRoot":"","sources":["../../src/actions/tracking-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAChG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,UAAU,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,UAAU,CAAC;IACvB,YAAY,EAAE,YAAY,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,0GAA0G;AAC1G,MAAM,WAAW,0BAA0B;IACzC,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,8DAA8D;IAC9D,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kFAAkF;IAClF,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAcD,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,qBAAqB,EAC1B,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,UAAU,GAAG,SAAS,EAClC,QAAQ,EAAE,MAAM,EAChB,aAAa,CAAC,EAAE,MAAM,EACtB,MAAM,CAAC,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,UAAU,CAAC,EAAE,MAAM,GAClB,IAAI,CA0BN;AA+BD,gGAAgG;AAChG,wBAAgB,eAAe,CAC7B,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,IAAI,CAEN;AAED,6CAA6C;AAC7C,wBAAgB,eAAe,CAC7B,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,IAAI,CAEN;AAED,yEAAyE;AACzE,wBAAgB,eAAe,CAC7B,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,IAAI,CAEN;AAED,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,qBAAqB,EAC1B,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,YAAY,EACpB,MAAM,CAAC,EAAE,0BAA0B,GAClC,IAAI,CAkBN"}
@@ -1,93 +0,0 @@
1
- /** The signal projection echoed onto both tracking emits (decision + action_result), or null when no scan result. */
2
- function projectScannerSignals(scanResult) {
3
- return scanResult?.signals?.map((s) => ({
4
- asset: s.asset,
5
- direction: s.direction,
6
- score: s.score,
7
- signalType: s.signalType,
8
- factors: s.factors,
9
- meta: s.meta,
10
- })) ?? null;
11
- }
12
- export function emitTrackingDecision(ctx, event, address, scanResult, decision, minConfidence, prompt, contextData, skipReason) {
13
- const data = {
14
- actionName: ctx.actionName,
15
- actionType: ctx.actionType,
16
- decisionMode: ctx.decisionMode,
17
- decisionModel: ctx.decisionModel,
18
- minConfidence: minConfidence ?? ctx.minConfidence ?? 1,
19
- decision,
20
- prompt: prompt ?? null,
21
- contextData: contextData ?? null,
22
- scannerId: scanResult?.scannerId ?? null,
23
- scannerSignals: projectScannerSignals(scanResult),
24
- scannerActionableCount: scanResult?.actionableCount ?? null,
25
- scannerScannedCount: scanResult?.scannedCount ?? null,
26
- runId: event.data.__scanRunId ?? null,
27
- __correlationId: event.data.__correlationId,
28
- };
29
- if (skipReason)
30
- data.skipReason = skipReason;
31
- ctx.hookSystem.fire({
32
- type: 'tracking.decision',
33
- runtimeName: event.runtimeName,
34
- address,
35
- data,
36
- timestamp: new Date().toISOString(),
37
- }).catch(() => { });
38
- }
39
- /**
40
- * Task 8a order-event emits (`order.placed` / `order.filled` / `order.failed`). Each is an additive,
41
- * fire-and-forget `hookSystem.fire` of a new `tracking.order_*` type (Rule 2b) at the existing
42
- * submission/success/failure points — no trading logic, control flow, or existing emit is touched.
43
- *
44
- * Defensively guarded (Rule 1 / Rule 3): the whole body is wrapped so a synchronous throw can never
45
- * escape into the open/close path, and the fire is not awaited and its rejection is swallowed.
46
- * `runtimeName` + `__correlationId` thread from the source HookEvent exactly like the other helpers.
47
- */
48
- function fireOrderEvent(hookSystem, type, event, address, data) {
49
- try {
50
- hookSystem.fire({
51
- type,
52
- runtimeName: event.runtimeName,
53
- address,
54
- data: { ...data, __correlationId: event.data.__correlationId },
55
- timestamp: new Date().toISOString(),
56
- }).catch(() => { });
57
- }
58
- catch {
59
- // Telemetry must never throw into trading (Rule 3).
60
- }
61
- }
62
- /** `order.placed` — an order was submitted / is resting. Reads only values already in scope. */
63
- export function emitOrderPlaced(hookSystem, event, address, data) {
64
- fireOrderEvent(hookSystem, 'tracking.order_placed', event, address, data);
65
- }
66
- /** `order.filled` — a fill was confirmed. */
67
- export function emitOrderFilled(hookSystem, event, address, data) {
68
- fireOrderEvent(hookSystem, 'tracking.order_filled', event, address, data);
69
- }
70
- /** `order.failed` — the venue rejected the order or the submit threw. */
71
- export function emitOrderFailed(hookSystem, event, address, data) {
72
- fireOrderEvent(hookSystem, 'tracking.order_failed', event, address, data);
73
- }
74
- export function emitTrackingActionResult(ctx, event, address, result, extras) {
75
- ctx.hookSystem.fire({
76
- type: 'tracking.action_result',
77
- runtimeName: event.runtimeName,
78
- address,
79
- data: {
80
- actionName: ctx.actionName,
81
- result,
82
- scannerId: extras?.scanResult?.scannerId ?? null,
83
- scannerSignals: projectScannerSignals(extras?.scanResult),
84
- minConfidence: extras?.minConfidence ?? ctx.minConfidence ?? 1,
85
- decisionStartedAt: extras?.decisionStartedAt ?? null,
86
- decisionEndedAt: extras?.decisionEndedAt ?? null,
87
- runId: event.data.__scanRunId ?? null,
88
- __correlationId: event.data.__correlationId,
89
- },
90
- timestamp: new Date().toISOString(),
91
- }).catch(() => { });
92
- }
93
- //# sourceMappingURL=tracking-helpers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tracking-helpers.js","sourceRoot":"","sources":["../../src/actions/tracking-helpers.ts"],"names":[],"mappings":"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"}
@@ -1,27 +0,0 @@
1
- import type { DecisionMadeRecord, DslCloseAttemptRecord, DslTickRecord, DslTransitionRecord, OrderEventRecord, PositionLifecycleRecord, RuntimeErrorRecord, RuntimeLifecycleRecord, RuntimeStateRecord, ScannerRunRecord, ScannerSummaryRecord, SignalEvaluatedRecord, SignalOutcomeRecord } from "./records.js";
2
- /**
3
- * The recording seam the runtime speaks to — one method per record type. Producers pass records;
4
- * they never construct transport-specific objects.
5
- *
6
- * Every method is fire-and-forget (`void`) and must never throw, block, or otherwise affect trading
7
- * behavior. The default implementation is the {@link NoopEmitter}.
8
- *
9
- * Identity is held by the implementation (see {@link IdentityEnvelope}) and stamped onto each
10
- * record internally; producers pass only the record.
11
- */
12
- export interface RecordingEmitter {
13
- recordScannerRun(record: ScannerRunRecord): void;
14
- recordSignalEvaluated(record: SignalEvaluatedRecord): void;
15
- recordPositionLifecycle(record: PositionLifecycleRecord): void;
16
- recordDslTransition(record: DslTransitionRecord): void;
17
- recordDslTick(record: DslTickRecord): void;
18
- recordError(record: RuntimeErrorRecord): void;
19
- recordRuntimeLifecycle(record: RuntimeLifecycleRecord): void;
20
- recordRuntimeState(record: RuntimeStateRecord): void;
21
- recordDecisionMade(record: DecisionMadeRecord): void;
22
- recordSignalOutcome(record: SignalOutcomeRecord): void;
23
- recordScannerSummary(record: ScannerSummaryRecord): void;
24
- recordDslCloseAttempt(record: DslCloseAttemptRecord): void;
25
- recordOrderEvent(record: OrderEventRecord): void;
26
- }
27
- //# sourceMappingURL=emitter.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"emitter.d.ts","sourceRoot":"","sources":["../../src/recording/emitter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,qBAAqB,EACrB,aAAa,EACb,mBAAmB,EACnB,gBAAgB,EAChB,uBAAuB,EACvB,kBAAkB,EAClB,sBAAsB,EACtB,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,EACpB,MAAM,cAAc,CAAC;AAEtB;;;;;;;;;GASG;AACH,MAAM,WAAW,gBAAgB;IAC/B,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACjD,qBAAqB,CAAC,MAAM,EAAE,qBAAqB,GAAG,IAAI,CAAC;IAC3D,uBAAuB,CAAC,MAAM,EAAE,uBAAuB,GAAG,IAAI,CAAC;IAC/D,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACvD,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;IAC3C,WAAW,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAC9C,sBAAsB,CAAC,MAAM,EAAE,sBAAsB,GAAG,IAAI,CAAC;IAC7D,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAErD,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACrD,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACvD,oBAAoB,CAAC,MAAM,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACzD,qBAAqB,CAAC,MAAM,EAAE,qBAAqB,GAAG,IAAI,CAAC;IAC3D,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAAC;CAClD"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=emitter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"emitter.js","sourceRoot":"","sources":["../../src/recording/emitter.ts"],"names":[],"mappings":""}
@@ -1,34 +0,0 @@
1
- /**
2
- * Identity stamped onto every record by the emitter at construction.
3
- *
4
- * Producers never pass these fields on a record — the emitter holds them for its lifetime and
5
- * applies them to everything it forwards. Because a runtime instance is bound to a single
6
- * strategy/wallet, `strategyAddress` lives here rather than being repeated on each record.
7
- */
8
- export interface IdentityEnvelope {
9
- /** Logical service name (e.g. the ingestion service identifier). */
10
- readonly service: string;
11
- /** Recipe / strategy configuration name (the config's top-level `name`). */
12
- readonly recipe: string;
13
- /** Declared config version (the config's optional top-level `version`), when set. */
14
- readonly recipeVersion?: string | number;
15
- /**
16
- * Content fingerprint of the **unresolved** config (raw, pre env-var substitution), canonically
17
- * serialized (sorted keys) and hashed once at boot. Unresolved on purpose: hashing post-`${VAR}`
18
- * would (a) put secrets in the hash input and (b) change the key whenever a secret rotates, even
19
- * for a byte-identical recipe — the opposite of a "which recipe produced this" join key. Hashing
20
- * the raw config makes the key stable across secret rotation and deterministic. Computed upstream
21
- * at boot, NOT in the mapper, so the mapper's redaction pass can never perturb it. The
22
- * cross-session join key: every record carries it via the envelope, while the unresolved config
23
- * blob lives once on `RuntimeLifecycleRecord.config` (hash and blob share the same input).
24
- * Distinguishes edits that didn't bump the declared `recipeVersion`.
25
- */
26
- readonly configHash?: string;
27
- /** Runtime instance name (`runtimeName`). */
28
- readonly runtime: string;
29
- /** Strategy identifier = wallet address. */
30
- readonly strategyAddress: string;
31
- /** Unique id for this process boot, to disambiguate restarts. */
32
- readonly bootId: string;
33
- }
34
- //# sourceMappingURL=identity.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../src/recording/identity.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAC/B,oEAAoE;IACpE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,4EAA4E;IAC5E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,qFAAqF;IACrF,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzC;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,6CAA6C;IAC7C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,4CAA4C;IAC5C,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,iEAAiE;IACjE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=identity.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"identity.js","sourceRoot":"","sources":["../../src/recording/identity.ts"],"names":[],"mappings":""}
@@ -1,11 +0,0 @@
1
- /**
2
- * `src/recording/` — the recording contract: the single seam between the trading runtime and any
3
- * telemetry backend. Exports the record types, the {@link RecordingEmitter} interface, an identity
4
- * envelope, and the default {@link NoopEmitter}. Nothing here knows about spans, attributes, wire
5
- * formats, or transport — those live behind the adapter and transport layers.
6
- */
7
- export type { DecisionActionIntent, DecisionMadeRecord, DecisionMode, DslCloseAttemptRecord, DslTickRecord, DslTickUnit, DslTierSummary, DslTransitionKind, DslTransitionRecord, OrderEventKind, OrderEventRecord, PositionLifecycleEvent, PositionLifecycleRecord, RecordingRecord, RuntimeErrorRecord, RuntimeLifecyclePhase, RuntimeLifecycleRecord, RuntimeStatePhase, RuntimeStateRecord, ScannerRunOutcome, ScannerRunRecord, ScannerSummaryRecord, SignalDecision, SignalEvaluatedRecord, SignalEvaluation, SignalOutcome, SignalOutcomeDisposition, SignalOutcomeRecord, SignalOutcomeResult, SignalSummary, TradeDirection, } from "./records.js";
8
- export type { IdentityEnvelope } from "./identity.js";
9
- export type { RecordingEmitter } from "./emitter.js";
10
- export { NoopEmitter, noopEmitter } from "./noop-emitter.js";
11
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/recording/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,YAAY,EACV,oBAAoB,EACpB,kBAAkB,EAClB,YAAY,EACZ,qBAAqB,EACrB,aAAa,EACb,WAAW,EACX,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,EACd,gBAAgB,EAChB,sBAAsB,EACtB,uBAAuB,EACvB,eAAe,EACf,kBAAkB,EAClB,qBAAqB,EACrB,sBAAsB,EACtB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,oBAAoB,EACpB,cAAc,EACd,qBAAqB,EACrB,gBAAgB,EAChB,aAAa,EACb,wBAAwB,EACxB,mBAAmB,EACnB,mBAAmB,EACnB,aAAa,EACb,cAAc,GACf,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtD,YAAY,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC"}
@@ -1,2 +0,0 @@
1
- export { NoopEmitter, noopEmitter } from "./noop-emitter.js";
2
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/recording/index.ts"],"names":[],"mappings":"AAyCA,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC"}
@@ -1,23 +0,0 @@
1
- import type { RecordingEmitter } from "./emitter.js";
2
- /**
3
- * Default {@link RecordingEmitter}: does nothing. Telemetry is opt-in, so the runtime always has a
4
- * safe, inert emitter wired in. Every method is a no-op and cannot throw.
5
- */
6
- export declare class NoopEmitter implements RecordingEmitter {
7
- recordScannerRun(): void;
8
- recordSignalEvaluated(): void;
9
- recordPositionLifecycle(): void;
10
- recordDslTransition(): void;
11
- recordDslTick(): void;
12
- recordError(): void;
13
- recordRuntimeLifecycle(): void;
14
- recordRuntimeState(): void;
15
- recordDecisionMade(): void;
16
- recordSignalOutcome(): void;
17
- recordScannerSummary(): void;
18
- recordDslCloseAttempt(): void;
19
- recordOrderEvent(): void;
20
- }
21
- /** Shared inert instance — the NoopEmitter is stateless, so one instance suffices. */
22
- export declare const noopEmitter: RecordingEmitter;
23
- //# sourceMappingURL=noop-emitter.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"noop-emitter.d.ts","sourceRoot":"","sources":["../../src/recording/noop-emitter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAErD;;;GAGG;AACH,qBAAa,WAAY,YAAW,gBAAgB;IAClD,gBAAgB,IAAI,IAAI;IACxB,qBAAqB,IAAI,IAAI;IAC7B,uBAAuB,IAAI,IAAI;IAC/B,mBAAmB,IAAI,IAAI;IAC3B,aAAa,IAAI,IAAI;IACrB,WAAW,IAAI,IAAI;IACnB,sBAAsB,IAAI,IAAI;IAC9B,kBAAkB,IAAI,IAAI;IAC1B,kBAAkB,IAAI,IAAI;IAC1B,mBAAmB,IAAI,IAAI;IAC3B,oBAAoB,IAAI,IAAI;IAC5B,qBAAqB,IAAI,IAAI;IAC7B,gBAAgB,IAAI,IAAI;CACzB;AAED,sFAAsF;AACtF,eAAO,MAAM,WAAW,EAAE,gBAAoC,CAAC"}
@@ -1,22 +0,0 @@
1
- /**
2
- * Default {@link RecordingEmitter}: does nothing. Telemetry is opt-in, so the runtime always has a
3
- * safe, inert emitter wired in. Every method is a no-op and cannot throw.
4
- */
5
- export class NoopEmitter {
6
- recordScannerRun() { }
7
- recordSignalEvaluated() { }
8
- recordPositionLifecycle() { }
9
- recordDslTransition() { }
10
- recordDslTick() { }
11
- recordError() { }
12
- recordRuntimeLifecycle() { }
13
- recordRuntimeState() { }
14
- recordDecisionMade() { }
15
- recordSignalOutcome() { }
16
- recordScannerSummary() { }
17
- recordDslCloseAttempt() { }
18
- recordOrderEvent() { }
19
- }
20
- /** Shared inert instance — the NoopEmitter is stateless, so one instance suffices. */
21
- export const noopEmitter = new NoopEmitter();
22
- //# sourceMappingURL=noop-emitter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"noop-emitter.js","sourceRoot":"","sources":["../../src/recording/noop-emitter.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,OAAO,WAAW;IACtB,gBAAgB,KAAU,CAAC;IAC3B,qBAAqB,KAAU,CAAC;IAChC,uBAAuB,KAAU,CAAC;IAClC,mBAAmB,KAAU,CAAC;IAC9B,aAAa,KAAU,CAAC;IACxB,WAAW,KAAU,CAAC;IACtB,sBAAsB,KAAU,CAAC;IACjC,kBAAkB,KAAU,CAAC;IAC7B,kBAAkB,KAAU,CAAC;IAC7B,mBAAmB,KAAU,CAAC;IAC9B,oBAAoB,KAAU,CAAC;IAC/B,qBAAqB,KAAU,CAAC;IAChC,gBAAgB,KAAU,CAAC;CAC5B;AAED,sFAAsF;AACtF,MAAM,CAAC,MAAM,WAAW,GAAqB,IAAI,WAAW,EAAE,CAAC"}
@@ -1,35 +0,0 @@
1
- /**
2
- * Attribute flattening + the timestamp/duration conversions. The flattening rule is the central
3
- * query convention: dotted lowercase snake_case keys, `String(v)` values (booleans as
4
- * `"true"`/`"false"`), null/undefined omitted, open bags flattened one level, arrays as a single
5
- * JSON-string key. Caps bound a row well under the batcher's body cap.
6
- *
7
- * Order within a row is: redact (typed-field, upstream) → flatten (here) → cap (here).
8
- */
9
- /** ms → epoch-ns digit string. BigInt: ms·1e6 overflows Number's safe-integer range. */
10
- export declare function msToNs(ms: number): string;
11
- /** Duration ns digit string from a clean `endedAt − startedAt` (clamped ≥ 0 defensively). */
12
- export declare function durationNs(startedAt: number, endedAt: number): string;
13
- /**
14
- * Accumulates a row's flat attribute map, applying the casing/null/cap rules uniformly. Callers add
15
- * scalars under explicit keys (never auto camel→snake — acronyms mangle), bags one level deep, and
16
- * arrays/blobs as single JSON keys.
17
- */
18
- export declare class AttrBuilder {
19
- private readonly attrs;
20
- private totalChars;
21
- /** Set a scalar under an explicit key. null/undefined → omit; over budget → drop silently. */
22
- put(key: string, value: string | number | boolean | null | undefined): this;
23
- /** Flatten an open bag ONE level under `prefix` (`prefix.{k}`); scalars `String()`, else JSON. */
24
- putBag(prefix: string, bag: Record<string, unknown> | undefined | null): this;
25
- /** `Record<string,boolean>` → `prefix.{name} = "true"|"false"`. */
26
- putFactors(prefix: string, factors: Record<string, boolean> | undefined | null): this;
27
- /** A single JSON-string key for an array or structured value (queried rarely, structure kept). */
28
- putJson(key: string, value: unknown, maxChars?: number): this;
29
- /** The `runtime.config` blob: single JSON key, larger size cap, never flattened. */
30
- putConfig(key: string, value: unknown): this;
31
- /** Assign under the total-attr guard. Returns whether the key was actually stored. */
32
- private assign;
33
- build(): Record<string, string>;
34
- }
35
- //# sourceMappingURL=attributes.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"attributes.d.ts","sourceRoot":"","sources":["../../../src/recording/otel/attributes.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAqBH,wFAAwF;AACxF,wBAAgB,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAEzC;AAED,6FAA6F;AAC7F,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAGrE;AAeD;;;;GAIG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA8B;IACpD,OAAO,CAAC,UAAU,CAAK;IAEvB,8FAA8F;IAC9F,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI;IAO3E,kGAAkG;IAClG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI;IAgB7E,mEAAmE;IACnE,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI;IAUrF,kGAAkG;IAClG,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,GAAE,MAA6B,GAAG,IAAI;IAQnF,oFAAoF;IACpF,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAI5C,sFAAsF;IACtF,OAAO,CAAC,MAAM;IASd,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAGhC"}
@@ -1,131 +0,0 @@
1
- /**
2
- * Attribute flattening + the timestamp/duration conversions. The flattening rule is the central
3
- * query convention: dotted lowercase snake_case keys, `String(v)` values (booleans as
4
- * `"true"`/`"false"`), null/undefined omitted, open bags flattened one level, arrays as a single
5
- * JSON-string key. Caps bound a row well under the batcher's body cap.
6
- *
7
- * Order within a row is: redact (typed-field, upstream) → flatten (here) → cap (here).
8
- */
9
- import { MAX_ATTR_VALUE_CHARS, MAX_BAG_KEYS, MAX_CONFIG_CHARS, MAX_TOTAL_ATTR_CHARS, TRUNCATE_MARKER, } from "./constants.js";
10
- /**
11
- * Non-finite or negative epoch-ms must not reach `BigInt()` — `BigInt(NaN)`/`BigInt(Infinity)`
12
- * throw, and a negative timestamp is an invalid wire value. Sanitize to `0n` so one bad clock value
13
- * degrades a single row rather than throwing and dropping the whole record (every numeric *attribute*
14
- * is already finite-guarded in {@link AttrBuilder.put}; timestamps bypass that path).
15
- */
16
- function toEpochMs(ms) {
17
- if (!Number.isFinite(ms) || ms < 0)
18
- return 0n;
19
- return BigInt(Math.trunc(ms));
20
- }
21
- /** ms → epoch-ns digit string. BigInt: ms·1e6 overflows Number's safe-integer range. */
22
- export function msToNs(ms) {
23
- return (toEpochMs(ms) * 1000000n).toString();
24
- }
25
- /** Duration ns digit string from a clean `endedAt − startedAt` (clamped ≥ 0 defensively). */
26
- export function durationNs(startedAt, endedAt) {
27
- const ns = (toEpochMs(endedAt) - toEpochMs(startedAt)) * 1000000n;
28
- return (ns < 0n ? 0n : ns).toString();
29
- }
30
- /** Truncate a value past the per-value cap, marking it so the cut is visible downstream. */
31
- function capValue(value, max) {
32
- if (value.length <= max)
33
- return value;
34
- // `max` could be smaller than the marker (defensive: no current caller passes one that small);
35
- // clamp the kept length to ≥ 0 so the slice index never goes negative.
36
- return value.slice(0, Math.max(0, max - TRUNCATE_MARKER.length)) + TRUNCATE_MARKER;
37
- }
38
- function scalarToString(value) {
39
- if (typeof value === "boolean")
40
- return value ? "true" : "false";
41
- return String(value);
42
- }
43
- /**
44
- * Accumulates a row's flat attribute map, applying the casing/null/cap rules uniformly. Callers add
45
- * scalars under explicit keys (never auto camel→snake — acronyms mangle), bags one level deep, and
46
- * arrays/blobs as single JSON keys.
47
- */
48
- export class AttrBuilder {
49
- attrs = {};
50
- totalChars = 0;
51
- /** Set a scalar under an explicit key. null/undefined → omit; over budget → drop silently. */
52
- put(key, value) {
53
- if (value === null || value === undefined)
54
- return this;
55
- if (typeof value === "number" && !Number.isFinite(value))
56
- return this;
57
- this.assign(key, capValue(scalarToString(value), MAX_ATTR_VALUE_CHARS));
58
- return this;
59
- }
60
- /** Flatten an open bag ONE level under `prefix` (`prefix.{k}`); scalars `String()`, else JSON. */
61
- putBag(prefix, bag) {
62
- if (!bag)
63
- return this;
64
- let count = 0;
65
- for (const [k, v] of Object.entries(bag)) {
66
- if (count >= MAX_BAG_KEYS)
67
- break;
68
- if (v === null || v === undefined)
69
- continue;
70
- const str = typeof v === "object" ? safeJson(v) : scalarToString(v);
71
- if (str === undefined)
72
- continue;
73
- // Count only keys actually emitted, so MAX_BAG_KEYS means "emitted" not "attempted" even
74
- // when the total-attr guard drops some.
75
- if (this.assign(`${prefix}.${k}`, capValue(str, MAX_ATTR_VALUE_CHARS)))
76
- count++;
77
- }
78
- return this;
79
- }
80
- /** `Record<string,boolean>` → `prefix.{name} = "true"|"false"`. */
81
- putFactors(prefix, factors) {
82
- if (!factors)
83
- return this;
84
- let count = 0;
85
- for (const [name, v] of Object.entries(factors)) {
86
- if (count >= MAX_BAG_KEYS)
87
- break;
88
- if (this.assign(`${prefix}.${name}`, v ? "true" : "false"))
89
- count++;
90
- }
91
- return this;
92
- }
93
- /** A single JSON-string key for an array or structured value (queried rarely, structure kept). */
94
- putJson(key, value, maxChars = MAX_ATTR_VALUE_CHARS) {
95
- if (value === null || value === undefined)
96
- return this;
97
- const str = safeJson(value);
98
- if (str === undefined)
99
- return this;
100
- this.assign(key, capValue(str, maxChars));
101
- return this;
102
- }
103
- /** The `runtime.config` blob: single JSON key, larger size cap, never flattened. */
104
- putConfig(key, value) {
105
- return this.putJson(key, value, MAX_CONFIG_CHARS);
106
- }
107
- /** Assign under the total-attr guard. Returns whether the key was actually stored. */
108
- assign(key, value) {
109
- // Total-attr guard: once the row's attrs hit the budget, drop further keys rather than let one
110
- // record blow past the batcher's body cap.
111
- if (this.totalChars + key.length + value.length > MAX_TOTAL_ATTR_CHARS)
112
- return false;
113
- this.attrs[key] = value;
114
- this.totalChars += key.length + value.length;
115
- return true;
116
- }
117
- build() {
118
- return this.attrs;
119
- }
120
- }
121
- /** `JSON.stringify` that never throws (circular refs etc.) — returns undefined on failure. */
122
- function safeJson(value) {
123
- try {
124
- const s = JSON.stringify(value);
125
- return s === undefined ? undefined : s;
126
- }
127
- catch {
128
- return undefined;
129
- }
130
- }
131
- //# sourceMappingURL=attributes.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"attributes.js","sourceRoot":"","sources":["../../../src/recording/otel/attributes.ts"],"names":[],"mappings":"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"}