@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
@@ -0,0 +1,437 @@
1
+ /**
2
+ * Manual OTel instruments, mirroring `tracing.ts`: obtained through the `@opentelemetry/api` proxy
3
+ * meter, so they no-op before the SDK initialises and resolve the real meter afterwards.
4
+ *
5
+ * One lazy cache stands up every instrument once: a name → instrument map per kind, fed by a spec
6
+ * table (description + unit). The instrument is created on first record (so it binds to the real
7
+ * meter after SDK init, not the no-op meter at module load) and cached thereafter. Every record
8
+ * helper is fully guarded — metrics must never throw into a caller path.
9
+ *
10
+ * GenAI instruments follow the GenAI semantic conventions; operational instruments mirror their
11
+ * event-family names (`scanner.*`, `runtime.*`), with attributes in the shared `senpi.*` namespace.
12
+ */
13
+ import { metrics, } from "@opentelemetry/api";
14
+ /** Instrumentation scope; matches the tracer/logger scope. */
15
+ const METER_NAME = "senpi-trading-runtime";
16
+ /** The single meter for our manual instruments. Resolves the no-op meter pre-init. */
17
+ export function getMeter() {
18
+ return metrics.getMeter(METER_NAME);
19
+ }
20
+ /** Histograms: GenAI durations/usage + the operational latency histograms. */
21
+ const HISTOGRAM_SPECS = {
22
+ "gen_ai.client.token.usage": {
23
+ description: "Number of input/output/cache tokens used by a GenAI request",
24
+ unit: "{token}",
25
+ },
26
+ "gen_ai.client.operation.duration": {
27
+ description: "Duration of a GenAI client operation",
28
+ unit: "s",
29
+ },
30
+ "gen_ai.execute_tool.duration": {
31
+ description: "Duration of a tool execution, by origin and outcome",
32
+ unit: "s",
33
+ },
34
+ "gen_ai.invoke_agent.duration": {
35
+ description: "Duration of a GenAI sub-agent invocation",
36
+ unit: "s",
37
+ },
38
+ "signal.queue_wait": {
39
+ description: "Time a signal waited in the serial queue before processing",
40
+ unit: "s",
41
+ },
42
+ };
43
+ /** Counters: throughput + failure counts. */
44
+ const COUNTER_SPECS = {
45
+ "scanner.restarts": {
46
+ description: "Count of supervised-scanner restarts",
47
+ unit: "{restart}",
48
+ },
49
+ "tool.calls": {
50
+ description: "Count of tool calls, by name, origin, and outcome",
51
+ unit: "{call}",
52
+ },
53
+ "scanner.runs": { description: "Count of scanner runs, by outcome", unit: "{run}" },
54
+ "signal.intake": {
55
+ description: "Count of signal-intake dispositions at the HTTP boundary",
56
+ unit: "{signal}",
57
+ },
58
+ "signal.outcome": {
59
+ description: "Count of post-decision signal outcomes, by result",
60
+ unit: "{signal}",
61
+ },
62
+ "decision.made": { description: "Count of trade decisions, by mode and intent", unit: "{decision}" },
63
+ "order.submitted": {
64
+ description: "Count of venue order submissions, by outcome",
65
+ unit: "{order}",
66
+ },
67
+ "dsl.degradations": {
68
+ description: "Count of DSL exit-engine degradation events, by kind",
69
+ unit: "{event}",
70
+ },
71
+ "state.persist_failures": {
72
+ description: "Count of StateManager writes that failed to persist",
73
+ unit: "{failure}",
74
+ },
75
+ "clearinghouse.retries": {
76
+ description: "Count of clearinghouse-state fetch retries, by outcome — early data-layer degradation",
77
+ unit: "{retry}",
78
+ },
79
+ "runtime.heartbeat": {
80
+ description: "Per-runtime liveness tick, emitted every window; its absence detects a dead runtime",
81
+ unit: "{beat}",
82
+ },
83
+ };
84
+ /** Up/down counters: net-state gauges driven by paired edges. */
85
+ const UPDOWN_SPECS = {
86
+ "scanner.degraded": {
87
+ description: "Net count of supervised scanners currently in the degraded (crash-loop) state",
88
+ unit: "{scanner}",
89
+ },
90
+ };
91
+ /** Observable gauges: read at collection time. */
92
+ const GAUGE_SPECS = {
93
+ "runtime.queue_depth": {
94
+ description: "Depth of the runtime's serial signal-processing queue, read at collection time",
95
+ unit: "{signal}",
96
+ },
97
+ "dsl.active_positions": {
98
+ description: "Active DSL-managed positions, read at collection time, split by exit phase",
99
+ unit: "{position}",
100
+ },
101
+ };
102
+ const histogramCache = new Map();
103
+ const counterCache = new Map();
104
+ const upDownCache = new Map();
105
+ const gaugeCache = new Map();
106
+ function histogram(name) {
107
+ let inst = histogramCache.get(name);
108
+ if (!inst)
109
+ histogramCache.set(name, (inst = getMeter().createHistogram(name, HISTOGRAM_SPECS[name])));
110
+ return inst;
111
+ }
112
+ function counter(name) {
113
+ let inst = counterCache.get(name);
114
+ if (!inst)
115
+ counterCache.set(name, (inst = getMeter().createCounter(name, COUNTER_SPECS[name])));
116
+ return inst;
117
+ }
118
+ function upDownCounter(name) {
119
+ let inst = upDownCache.get(name);
120
+ if (!inst)
121
+ upDownCache.set(name, (inst = getMeter().createUpDownCounter(name, UPDOWN_SPECS[name])));
122
+ return inst;
123
+ }
124
+ function observableGauge(name) {
125
+ let inst = gaugeCache.get(name);
126
+ if (!inst)
127
+ gaugeCache.set(name, (inst = getMeter().createObservableGauge(name, GAUGE_SPECS[name])));
128
+ return inst;
129
+ }
130
+ /** Reset cached instruments (tests only). */
131
+ export function __resetMetricsForTest() {
132
+ histogramCache.clear();
133
+ counterCache.clear();
134
+ upDownCache.clear();
135
+ gaugeCache.clear();
136
+ }
137
+ /** Drop undefined/null attributes so we never stamp hollow dimensions. */
138
+ function defined(attrs) {
139
+ const out = {};
140
+ for (const [k, v] of Object.entries(attrs)) {
141
+ if (v !== undefined && v !== null)
142
+ out[k] = v;
143
+ }
144
+ return out;
145
+ }
146
+ /** Elapsed seconds from a `Date.now()` start, clamped to non-negative. */
147
+ export function elapsedSeconds(startMs) {
148
+ if (typeof startMs !== "number" || !Number.isFinite(startMs))
149
+ return undefined;
150
+ return Math.max(0, (Date.now() - startMs) / 1000);
151
+ }
152
+ /**
153
+ * Record token usage at chat finalize: one data point per token type present (input/output and, when
154
+ * the model reports them, cache_read/cache_write — the signal a silent context compaction otherwise
155
+ * hides). Skips a token type whose count is undefined.
156
+ */
157
+ export function recordTokenUsage(dims, tokens) {
158
+ try {
159
+ const base = {
160
+ "gen_ai.operation.name": "chat",
161
+ "gen_ai.provider.name": dims.provider,
162
+ "gen_ai.request.model": dims.model,
163
+ };
164
+ const inst = histogram("gen_ai.client.token.usage");
165
+ const record = (count, type) => {
166
+ if (typeof count === "number" && Number.isFinite(count)) {
167
+ inst.record(count, defined({ ...base, "gen_ai.token.type": type }));
168
+ }
169
+ };
170
+ record(tokens.input, "input");
171
+ record(tokens.output, "output");
172
+ record(tokens.cacheRead, "cache_read");
173
+ record(tokens.cacheWrite, "cache_write");
174
+ }
175
+ catch {
176
+ // Metrics must never break the caller.
177
+ }
178
+ }
179
+ /** Record the chat operation duration (seconds); stamps `error.type` when set. */
180
+ export function recordOperationDuration(seconds, dims) {
181
+ if (seconds === undefined)
182
+ return;
183
+ try {
184
+ histogram("gen_ai.client.operation.duration").record(seconds, defined({
185
+ "gen_ai.operation.name": "chat",
186
+ "gen_ai.provider.name": dims.provider,
187
+ "gen_ai.request.model": dims.model,
188
+ "error.type": dims.errorType,
189
+ }));
190
+ }
191
+ catch {
192
+ // Metrics must never break the caller.
193
+ }
194
+ }
195
+ export function recordToolCall(dims) {
196
+ try {
197
+ const attrs = defined({
198
+ "gen_ai.tool.name": dims.toolName,
199
+ "senpi.tool.origin": dims.origin,
200
+ "senpi.tool.outcome": dims.outcome,
201
+ "error.type": dims.errorType,
202
+ });
203
+ counter("tool.calls").add(1, attrs);
204
+ if (typeof dims.durationSec === "number" && Number.isFinite(dims.durationSec)) {
205
+ histogram("gen_ai.execute_tool.duration").record(dims.durationSec, {
206
+ ...attrs,
207
+ "gen_ai.operation.name": "execute_tool",
208
+ });
209
+ }
210
+ }
211
+ catch {
212
+ // Metrics must never break the caller.
213
+ }
214
+ }
215
+ /** Record the sub-agent invocation duration (seconds); stamps `error.type` when set. */
216
+ export function recordInvokeAgentDuration(seconds, dims) {
217
+ if (seconds === undefined)
218
+ return;
219
+ try {
220
+ histogram("gen_ai.invoke_agent.duration").record(seconds, defined({
221
+ "gen_ai.operation.name": "invoke_agent",
222
+ "gen_ai.agent.name": dims.agentName,
223
+ "error.type": dims.errorType,
224
+ }));
225
+ }
226
+ catch {
227
+ // Metrics must never break the caller.
228
+ }
229
+ }
230
+ function scannerHealthAttrs(dims) {
231
+ return defined({
232
+ "senpi.scanner.name": dims.scannerName,
233
+ "senpi.strategy.address": dims.strategyAddress,
234
+ });
235
+ }
236
+ /** Count one supervised-scanner restart (the supervisor's `restarting` edge). */
237
+ export function recordScannerRestart(dims) {
238
+ try {
239
+ counter("scanner.restarts").add(1, scannerHealthAttrs(dims));
240
+ }
241
+ catch {
242
+ // Metrics must never break the caller.
243
+ }
244
+ }
245
+ /**
246
+ * Move the `scanner.degraded` state gauge: +1 on the healthy→degraded edge, −1 on degraded→recovered.
247
+ * The supervisor fires each edge once, so the net is the count of scanners currently degraded —
248
+ * alertable as `> 0` without a trace or log scan.
249
+ */
250
+ export function recordScannerDegradedDelta(delta, dims) {
251
+ try {
252
+ upDownCounter("scanner.degraded").add(delta, scannerHealthAttrs(dims));
253
+ }
254
+ catch {
255
+ // Metrics must never break the caller.
256
+ }
257
+ }
258
+ // ─── Domain throughput + failure counters/histograms ────────────────────────
259
+ // Each rides a value already measured at an existing event/span site; `errorType` reuses the shared
260
+ // `errorTypeOf` convention. Dimensions are kept deliberately low-cardinality — no asset/id explosion.
261
+ /** Count one scanner run by outcome (the run status). */
262
+ export function recordScannerRun(dims) {
263
+ try {
264
+ counter("scanner.runs").add(1, defined({ "senpi.scanner.id": dims.scannerId, "senpi.scanner.outcome": dims.outcome }));
265
+ }
266
+ catch {
267
+ // Metrics must never break the caller.
268
+ }
269
+ }
270
+ /** Time a signal's wait in the serial queue before processing (seconds). */
271
+ export function recordSignalQueueWait(seconds, dims) {
272
+ if (seconds === undefined)
273
+ return;
274
+ try {
275
+ histogram("signal.queue_wait").record(seconds, defined({ "senpi.scanner.id": dims.scannerId }));
276
+ }
277
+ catch {
278
+ // Metrics must never break the caller.
279
+ }
280
+ }
281
+ /** Count one signal-intake disposition at the HTTP boundary (accepted/rejected/expired/superseded/…). */
282
+ export function recordSignalIntake(dims) {
283
+ try {
284
+ counter("signal.intake").add(1, defined({
285
+ // Stable registry name, never the ephemeral reminted scanner id — that id rotates on every
286
+ // relaunch and would spray unbounded label values into this aggregated counter.
287
+ "senpi.scanner.name": dims.scannerName,
288
+ "senpi.intake.disposition": dims.disposition,
289
+ "senpi.intake.reason_code": dims.reasonCode,
290
+ }));
291
+ }
292
+ catch {
293
+ // Metrics must never break the caller.
294
+ }
295
+ }
296
+ /** Count one post-decision signal outcome by result (accepted/rejected/blocked/error). */
297
+ export function recordSignalOutcome(dims) {
298
+ try {
299
+ counter("signal.outcome").add(1, defined({
300
+ "senpi.outcome.result": dims.result,
301
+ "senpi.outcome.reason_code": dims.reasonCode,
302
+ }));
303
+ }
304
+ catch {
305
+ // Metrics must never break the caller.
306
+ }
307
+ }
308
+ /** Count one trade decision by mode/intent. */
309
+ export function recordDecision(dims) {
310
+ try {
311
+ counter("decision.made").add(1, defined({
312
+ "senpi.decision.mode": dims.mode,
313
+ "senpi.decision.intent": dims.intent,
314
+ "senpi.decision.by_llm": dims.byLlm,
315
+ }));
316
+ }
317
+ catch {
318
+ // Metrics must never break the caller.
319
+ }
320
+ }
321
+ /** Count one venue order submission by outcome (placed/filled/failed). */
322
+ export function recordOrder(dims) {
323
+ try {
324
+ counter("order.submitted").add(1, defined({
325
+ "senpi.asset": dims.asset,
326
+ "senpi.order.outcome": dims.outcome,
327
+ "senpi.order.reason": dims.reason,
328
+ "error.type": dims.errorType,
329
+ }));
330
+ }
331
+ catch {
332
+ // Metrics must never break the caller.
333
+ }
334
+ }
335
+ /** Count one DSL degradation event by kind (sl_sync/price_stale/handoff). */
336
+ export function recordDslDegradation(dims) {
337
+ try {
338
+ counter("dsl.degradations").add(1, defined({
339
+ "senpi.dsl.failure": dims.failure,
340
+ "senpi.dsl.handoff_failure": dims.handoffFailure,
341
+ "error.type": dims.errorType,
342
+ }));
343
+ }
344
+ catch {
345
+ // Metrics must never break the caller.
346
+ }
347
+ }
348
+ /** Count one StateManager write that failed to persist. */
349
+ export function recordStatePersistFailure() {
350
+ try {
351
+ counter("state.persist_failures").add(1);
352
+ }
353
+ catch {
354
+ // Metrics must never break the caller.
355
+ }
356
+ }
357
+ /** Count one clearinghouse-state fetch retry by outcome (`stale` | `unreadable` | `exhausted`). */
358
+ export function recordClearinghouseRetry(outcome) {
359
+ try {
360
+ counter("clearinghouse.retries").add(1, defined({ "senpi.clearinghouse.outcome": outcome }));
361
+ }
362
+ catch {
363
+ // Metrics must never break the caller.
364
+ }
365
+ }
366
+ /**
367
+ * Emit one liveness tick for a runtime. Called once at start and then every window: the *absence* of
368
+ * ticks for a runtime (by wallet/group) is what detects a dead runtime or box — a down process can't
369
+ * emit a "down" event, only the gap in this positive signal is alertable.
370
+ */
371
+ export function recordRuntimeHeartbeat(dims) {
372
+ try {
373
+ counter("runtime.heartbeat").add(1, defined({ "senpi.strategy.address": dims.strategyAddress, "senpi.group": dims.group }));
374
+ }
375
+ catch {
376
+ // Metrics must never break the caller.
377
+ }
378
+ }
379
+ /**
380
+ * Attach an observation callback to an observable gauge and return a disposer that detaches it.
381
+ * Registration and disposal both fail open (a no-op meter or a torn-down instrument never throws);
382
+ * the `observe` callback owns its own guard so a collection read can never throw.
383
+ */
384
+ function registerGaugeCallback(name, observe) {
385
+ let gauge;
386
+ try {
387
+ gauge = observableGauge(name);
388
+ gauge.addCallback(observe);
389
+ }
390
+ catch {
391
+ return () => { };
392
+ }
393
+ return () => {
394
+ try {
395
+ gauge.removeCallback(observe);
396
+ }
397
+ catch {
398
+ // Disposal must never throw into the caller's stop path.
399
+ }
400
+ };
401
+ }
402
+ /**
403
+ * Register a runtime's queue depth as a callback on the shared `runtime.queue_depth` observable gauge,
404
+ * dimensioned by wallet so N runtimes in one process report distinct series. The callback reads the live
405
+ * depth at each collection. Returns a disposer the runtime must call on stop to drop its observation.
406
+ */
407
+ export function registerQueueDepthGauge(source) {
408
+ return registerGaugeCallback("runtime.queue_depth", (result) => {
409
+ try {
410
+ result.observe(source.read(), defined({ "senpi.strategy.address": source.strategyAddress, "senpi.group": source.group }));
411
+ }
412
+ catch {
413
+ // Metrics must never break collection.
414
+ }
415
+ });
416
+ }
417
+ /**
418
+ * Register a runtime's active DSL-managed positions as a callback on the shared `dsl.active_positions`
419
+ * observable gauge, split by exit phase (`senpi.dsl.phase` 1|2) and dimensioned by wallet. Both phases
420
+ * are observed every collection (0 when empty) so the series stay live — a flat 0 (alive, no positions)
421
+ * reads differently from an absent series (a dead runtime). The callback reads the live counts at each
422
+ * collection. Returns a disposer the runtime must call on stop to drop its observation.
423
+ */
424
+ export function registerDslActivePositionsGauge(source) {
425
+ return registerGaugeCallback("dsl.active_positions", (result) => {
426
+ try {
427
+ const { phase1, phase2 } = source.read();
428
+ const base = { "senpi.strategy.address": source.strategyAddress, "senpi.group": source.group };
429
+ result.observe(phase1, defined({ ...base, "senpi.dsl.phase": 1 }));
430
+ result.observe(phase2, defined({ ...base, "senpi.dsl.phase": 2 }));
431
+ }
432
+ catch {
433
+ // Metrics must never break collection.
434
+ }
435
+ });
436
+ }
437
+ //# sourceMappingURL=metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/telemetry/metrics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * OpenTelemetry SDK stand-up: HyperDX's OTel distribution (`@hyperdx/node-opentelemetry`)
3
+ * — auto-instrumentation + uncaught-exception capture — against a self-hosted OTLP collector,
4
+ * with a process-stable resource-attribute set.
5
+ *
6
+ * Init runs from plugin `register()` (process scope): the agent hooks register there, before
7
+ * any runtime, and emit through this SDK's tracer. Only process-stable values ride the resource
8
+ * (`service.*`, `deployment.environment`, `user.id`), so init need not wait for a runtime.
9
+ *
10
+ * Gated by OTLP-config presence: inits iff an OTLP endpoint env is set (no enable flag, no
11
+ * localhost default). No endpoint ⇒ no SDK and the global tracer/logger no-op. If a non-noop
12
+ * global `TracerProvider` already exists (the gateway's `diagnostics-otel` owns it), we stand
13
+ * down and emit through the global API — one SDK per process, first writer wins.
14
+ *
15
+ * The package is imported dynamically: it reads `OTEL_EXPORTER_OTLP_*` at module-load and
16
+ * exposes no init() option for them, so the env must be set first. Under openclaw the operator
17
+ * sets all of these (the SDK derives none):
18
+ * OTEL_EXPORTER_OTLP_ENDPOINT / _TRACES_ENDPOINT / _LOGS_ENDPOINT / _METRICS_ENDPOINT / _HEADERS
19
+ * See docs/runtime-docs/runtime-api.md (Tracing).
20
+ */
21
+ /** True when any OTLP endpoint env is set — the gate for standing up the plugin's SDK. */
22
+ export declare function isOtlpEndpointConfigured(): boolean;
23
+ /**
24
+ * Whether {@link initOtelSdk} has completed. Code that loads `@hyperdx/node-opentelemetry`
25
+ * lazily (e.g. per-trace attribute stamping) gates on this so the package — which captures
26
+ * its OTLP transport env at module-load — never loads when telemetry is disabled or under test.
27
+ */
28
+ export declare function isOtelInitialized(): boolean;
29
+ /**
30
+ * Decode the `senpi_user_id` claim from a JWT without verifying its signature.
31
+ * Returns `undefined` for any non-JWT / malformed / missing-claim input; never throws.
32
+ *
33
+ * The claim name is assumed, not confirmed against a real token — if the id lives
34
+ * under a different claim (e.g. `sub`), this must change before `user.id` is trusted.
35
+ */
36
+ export declare function decodeSenpiUserId(token: string | undefined): string | undefined;
37
+ /** Attribute sources not carried by the {@link IdentityEnvelope}. */
38
+ export interface OtelResourceExtras {
39
+ /** Process-level instance id → `service.instance.id` ({@link PROCESS_INSTANCE_ID}). */
40
+ readonly serviceInstanceId?: string;
41
+ /** → `service.version`. */
42
+ readonly serviceVersion?: string;
43
+ /** → `deployment.environment`. */
44
+ readonly deploymentEnvironment?: string;
45
+ /** Decoded `senpi_user_id` → `user.id`. */
46
+ readonly userId?: string;
47
+ }
48
+ /**
49
+ * Build the `OTEL_RESOURCE_ATTRIBUTES` value as a `key=value,key=value` string.
50
+ * Values are percent-encoded so spaces/commas stay valid; empty keys are omitted.
51
+ *
52
+ * SCOPING (multi-runtime): resource attributes are process-global and immutable
53
+ * after the first init(), but N runtimes (one per wallet) share one process — so
54
+ * only PROCESS-STABLE values belong here. We carry:
55
+ * - service.name, service.version, deployment.environment — process-stable.
56
+ * - service.instance.id — a PROCESS-level id ({@link PROCESS_INSTANCE_ID}), not
57
+ * the per-runtime `IdentityEnvelope.bootId`.
58
+ * - user.id — process-stable: single-tenant, one SENPI_API_KEY = one user for
59
+ * the whole process, so it is the same across every runtime here.
60
+ *
61
+ * The per-runtime keys (senpi.strategy.address, senpi.recipe, senpi.recipe.version,
62
+ * senpi.runtime, senpi.group, senpi.config.hash) are deliberately OMITTED — on a process-global
63
+ * resource they would stamp the first runtime's value onto every other runtime's
64
+ * telemetry. They ride per-trace via `setTraceAttributes` and per-log via the logger's
65
+ * emit-time identity stamp (both reading the same per-runtime identity context).
66
+ */
67
+ export declare function buildOtelResourceAttributes(serviceName: string, extras: OtelResourceExtras): string;
68
+ export interface InitOtelSdkParams {
69
+ /** SENPI_API_KEY JWT (the MCP bearer) — decoded locally for `user.id`. */
70
+ readonly userToken?: string;
71
+ /** Plugin version → `service.version`. */
72
+ readonly serviceVersion: string;
73
+ }
74
+ /**
75
+ * Initialise the OTel SDK. Idempotent, side-effecting, and never crashes boot:
76
+ * no-ops when no OTLP endpoint is configured, when a real global TracerProvider
77
+ * already exists (the gateway owns it — we emit through the global API instead),
78
+ * when already initialised, or under test.
79
+ */
80
+ export declare function initOtelSdk(params: InitOtelSdkParams): Promise<void>;
81
+ /**
82
+ * Flush and stop the OTel SDK. Best-effort, idempotent, never throws.
83
+ *
84
+ * Required because {@link initOtelSdk} disables HyperDX's own SIGTERM handler
85
+ * (`stopOnTerminationSignals: false`) — that handler was the SDK's only on-exit
86
+ * flush, so without an explicit shutdown the span/log batch processors' buffers
87
+ * are dropped at process exit. The SDK is process-global (one per process,
88
+ * shared across all hosted runtimes), so this must be called ONCE at process /
89
+ * plugin teardown, after every span has been emitted — never per-runtime, which
90
+ * would cut off telemetry for sibling runtimes still running.
91
+ */
92
+ export declare function shutdownOtelSdk(): Promise<void>;
93
+ //# sourceMappingURL=otel-sdk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"otel-sdk.d.ts","sourceRoot":"","sources":["../../src/telemetry/otel-sdk.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAgBH,0FAA0F;AAC1F,wBAAgB,wBAAwB,IAAI,OAAO,CAKlD;AAoGD;;;;GAIG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAkB/E;AAED,qEAAqE;AACrE,MAAM,WAAW,kBAAkB;IACjC,uFAAuF;IACvF,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,2BAA2B;IAC3B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,kCAAkC;IAClC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IACxC,2CAA2C;IAC3C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,2BAA2B,CACzC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,kBAAkB,GACzB,MAAM,CAaR;AAED,MAAM,WAAW,iBAAiB;IAChC,0EAA0E;IAC1E,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,0CAA0C;IAC1C,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAKD;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuF1E;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAcrD"}