@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,297 @@
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
+ import { randomUUID } from "node:crypto";
22
+ import { trace } from "@opentelemetry/api";
23
+ import { createLogger } from "../utils/logger.js";
24
+ const logger = createLogger("telemetry/otel-sdk");
25
+ /** Per-signal OTLP endpoint env vars; presence of any (or the base) is the on-switch. */
26
+ const OTLP_ENDPOINT_ENV_VARS = [
27
+ "OTEL_EXPORTER_OTLP_ENDPOINT",
28
+ "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT",
29
+ "OTEL_EXPORTER_OTLP_LOGS_ENDPOINT",
30
+ "OTEL_EXPORTER_OTLP_METRICS_ENDPOINT",
31
+ ];
32
+ /** True when any OTLP endpoint env is set — the gate for standing up the plugin's SDK. */
33
+ export function isOtlpEndpointConfigured() {
34
+ return OTLP_ENDPOINT_ENV_VARS.some((name) => {
35
+ const value = process.env[name];
36
+ return typeof value === "string" && value.trim().length > 0;
37
+ });
38
+ }
39
+ /**
40
+ * True when a real (non-noop) global `TracerProvider` is already registered — i.e.
41
+ * another SDK (the gateway's `diagnostics-otel`) owns the slot. The global API hands
42
+ * back a `ProxyTracerProvider` until `setGlobalTracerProvider` runs; before that its
43
+ * delegate is the no-op provider. We detect "real" by checking whether a delegate
44
+ * provider has been set: `getDelegate()` exists on the proxy and differs from the
45
+ * no-op. Best-effort — on any uncertainty we treat it as "not owned" and init our own.
46
+ */
47
+ function globalTracerProviderIsReal() {
48
+ try {
49
+ const provider = trace.getTracerProvider();
50
+ if (typeof provider?.getDelegate !== "function") {
51
+ // Not a ProxyTracerProvider — a concrete provider is registered directly.
52
+ return true;
53
+ }
54
+ const delegate = provider.getDelegate();
55
+ if (delegate == null)
56
+ return false;
57
+ // The proxy's default delegate is the NoopTracerProvider; anything else is real.
58
+ return delegate.constructor?.name !== "NoopTracerProvider";
59
+ }
60
+ catch {
61
+ return false;
62
+ }
63
+ }
64
+ /**
65
+ * Process-level instance id for `service.instance.id`. Distinct from the
66
+ * per-runtime `IdentityEnvelope.bootId`: resource attributes are process-global,
67
+ * so this must identify the PROCESS (disambiguating restarts), not a single
68
+ * runtime — N runtimes share one of these.
69
+ */
70
+ const PROCESS_INSTANCE_ID = randomUUID();
71
+ /**
72
+ * Re-enable the undici (global `fetch`) auto-instrumentation after `hyperdx.init()`.
73
+ *
74
+ * HyperDX's `init()` leaves undici disabled: across init it calls
75
+ * `setConfig → enable (subscribe undici:request:*) → disable`, with no re-enable
76
+ * (observed by instrumenting the class). So `undici:request:create` ends with no
77
+ * subscribers and no `fetch()` produces an HTTP client span — untracing everything on
78
+ * global `fetch`: the Senpi MCP client (`StreamableHTTPClientTransport`), the LLM
79
+ * client, etc. (`net`/`dns`/`tls` are independent and still emit, so connections show
80
+ * up while the requests riding them don't.)
81
+ *
82
+ * Fix: enable our own `UndiciInstrumentation`; with no provider set it resolves the
83
+ * global one `init()` registered, and HyperDX's instance stays disabled (no double
84
+ * instrumentation). Best-effort — a failure must not fail boot. Also a prerequisite
85
+ * for the manual `mcp.*`/`dsl.*` spans, which assume outbound `fetch` calls
86
+ * auto-nest as HTTP children.
87
+ *
88
+ * Seen with `@hyperdx/node-opentelemetry` 0.11 / `instrumentation-undici` 0.28, Node 24
89
+ * — re-check on upgrade; drop if HyperDX stops disabling undici.
90
+ */
91
+ async function reinstrumentUndici() {
92
+ try {
93
+ const mod = (await import("@opentelemetry/instrumentation-undici"));
94
+ new mod.UndiciInstrumentation().enable();
95
+ logger.debug("undici (fetch) instrumentation re-enabled post-init");
96
+ }
97
+ catch (err) {
98
+ logger.warn("failed to re-enable undici instrumentation; fetch client spans will be missing", {
99
+ err: err instanceof Error ? err.message : String(err),
100
+ });
101
+ }
102
+ }
103
+ /** Process-global once-only guard; resource attributes are immutable after init(). */
104
+ let initialized = false;
105
+ /**
106
+ * Reference to the loaded HyperDX module, captured at init so {@link shutdownOtelSdk}
107
+ * can flush the SDK without a second dynamic import. Process-global like the SDK itself.
108
+ */
109
+ let hyperdxModule;
110
+ /**
111
+ * Whether {@link initOtelSdk} has completed. Code that loads `@hyperdx/node-opentelemetry`
112
+ * lazily (e.g. per-trace attribute stamping) gates on this so the package — which captures
113
+ * its OTLP transport env at module-load — never loads when telemetry is disabled or under test.
114
+ */
115
+ export function isOtelInitialized() {
116
+ return initialized;
117
+ }
118
+ /**
119
+ * Decode the `senpi_user_id` claim from a JWT without verifying its signature.
120
+ * Returns `undefined` for any non-JWT / malformed / missing-claim input; never throws.
121
+ *
122
+ * The claim name is assumed, not confirmed against a real token — if the id lives
123
+ * under a different claim (e.g. `sub`), this must change before `user.id` is trusted.
124
+ */
125
+ export function decodeSenpiUserId(token) {
126
+ if (typeof token !== "string" || token.length === 0)
127
+ return undefined;
128
+ try {
129
+ const segments = token.split(".");
130
+ if (segments.length < 2)
131
+ return undefined;
132
+ const payloadSegment = segments[1];
133
+ if (!payloadSegment)
134
+ return undefined;
135
+ const json = Buffer.from(payloadSegment, "base64url").toString("utf8");
136
+ if (json.length === 0)
137
+ return undefined;
138
+ const payload = JSON.parse(json);
139
+ const claim = payload?.senpi_user_id;
140
+ // Only string/number; anything else (object/array) would coerce to junk.
141
+ if (typeof claim !== "string" && typeof claim !== "number")
142
+ return undefined;
143
+ const asString = String(claim);
144
+ return asString.length > 0 ? asString : undefined;
145
+ }
146
+ catch {
147
+ return undefined;
148
+ }
149
+ }
150
+ /**
151
+ * Build the `OTEL_RESOURCE_ATTRIBUTES` value as a `key=value,key=value` string.
152
+ * Values are percent-encoded so spaces/commas stay valid; empty keys are omitted.
153
+ *
154
+ * SCOPING (multi-runtime): resource attributes are process-global and immutable
155
+ * after the first init(), but N runtimes (one per wallet) share one process — so
156
+ * only PROCESS-STABLE values belong here. We carry:
157
+ * - service.name, service.version, deployment.environment — process-stable.
158
+ * - service.instance.id — a PROCESS-level id ({@link PROCESS_INSTANCE_ID}), not
159
+ * the per-runtime `IdentityEnvelope.bootId`.
160
+ * - user.id — process-stable: single-tenant, one SENPI_API_KEY = one user for
161
+ * the whole process, so it is the same across every runtime here.
162
+ *
163
+ * The per-runtime keys (senpi.strategy.address, senpi.recipe, senpi.recipe.version,
164
+ * senpi.runtime, senpi.group, senpi.config.hash) are deliberately OMITTED — on a process-global
165
+ * resource they would stamp the first runtime's value onto every other runtime's
166
+ * telemetry. They ride per-trace via `setTraceAttributes` and per-log via the logger's
167
+ * emit-time identity stamp (both reading the same per-runtime identity context).
168
+ */
169
+ export function buildOtelResourceAttributes(serviceName, extras) {
170
+ const pairs = [
171
+ ["service.name", serviceName],
172
+ ["service.instance.id", extras.serviceInstanceId],
173
+ ["service.version", extras.serviceVersion],
174
+ ["deployment.environment", extras.deploymentEnvironment],
175
+ ["user.id", extras.userId],
176
+ ];
177
+ return pairs
178
+ .filter(([, value]) => value !== undefined && String(value).length > 0)
179
+ .map(([key, value]) => `${key}=${encodeURIComponent(String(value))}`)
180
+ .join(",");
181
+ }
182
+ /** `service.name` for the plugin-owned resource; matches the tracer/logger scope. */
183
+ const SERVICE_NAME = "senpi-trading-runtime";
184
+ /**
185
+ * Initialise the OTel SDK. Idempotent, side-effecting, and never crashes boot:
186
+ * no-ops when no OTLP endpoint is configured, when a real global TracerProvider
187
+ * already exists (the gateway owns it — we emit through the global API instead),
188
+ * when already initialised, or under test.
189
+ */
190
+ export async function initOtelSdk(params) {
191
+ if (initialized)
192
+ return;
193
+ // Presence of OTLP config is the on-switch — no endpoint means telemetry off.
194
+ if (!isOtlpEndpointConfigured()) {
195
+ logger.debug("OTel SDK init skipped: no OTLP endpoint configured");
196
+ return;
197
+ }
198
+ // Stand down if another SDK (the gateway's diagnostics-otel) already owns the
199
+ // global provider — a second registration drops spans and splits resource identity.
200
+ if (globalTracerProviderIsReal()) {
201
+ logger.info("OTel SDK init skipped: a global TracerProvider already exists; emitting through the global API");
202
+ initialized = true;
203
+ return;
204
+ }
205
+ // Skip under test: the SDK would start exporters and patch core modules during vitest.
206
+ if (process.env.VITEST || process.env.NODE_ENV === "test") {
207
+ logger.debug("OTel SDK init skipped: running under test");
208
+ return;
209
+ }
210
+ try {
211
+ // Commit the guard before any fallible work: a failed init must not let a
212
+ // later caller re-enter and double-append OTEL_RESOURCE_ATTRIBUTES.
213
+ initialized = true;
214
+ // Source the environment label from NODE_ENV (Node-standard). Pass the value
215
+ // through verbatim (so `staging`/custom envs are faithful), defaulting to
216
+ // "development" when unset/empty — a label must never claim production by
217
+ // accident; prod deployments set NODE_ENV=production as standard practice.
218
+ const nodeEnv = process.env.NODE_ENV?.trim();
219
+ const deploymentEnvironment = nodeEnv && nodeEnv.length > 0 ? nodeEnv : "development";
220
+ const userId = decodeSenpiUserId(params.userToken);
221
+ // Append to any host-set value rather than clobber operator attrs.
222
+ const ourAttrs = buildOtelResourceAttributes(SERVICE_NAME, {
223
+ serviceInstanceId: PROCESS_INSTANCE_ID,
224
+ serviceVersion: params.serviceVersion,
225
+ deploymentEnvironment,
226
+ userId,
227
+ });
228
+ const existingAttrs = process.env.OTEL_RESOURCE_ATTRIBUTES?.trim();
229
+ process.env.OTEL_RESOURCE_ATTRIBUTES = existingAttrs
230
+ ? `${existingAttrs},${ourAttrs}`
231
+ : ourAttrs;
232
+ // Dynamic import: loads only now, after the endpoint env is confirmed set.
233
+ const hyperdx = (await import("@hyperdx/node-opentelemetry"));
234
+ hyperdxModule = hyperdx;
235
+ hyperdx.init({
236
+ // No apiKey on init(): the exporter authenticates to the collector via the
237
+ // Authorization header in OTEL_EXPORTER_OTLP_HEADERS (read from env at
238
+ // module-load), not through the SDK's HyperDX apiKey field.
239
+ service: SERVICE_NAME,
240
+ // Off: createLogger() emits structured LogRecords through the OTel Logs API directly,
241
+ // so capturing console.* would duplicate every log (flattened, lossy) into the collector.
242
+ // stdout is untouched — the local human line still prints.
243
+ consoleCapture: false,
244
+ experimentalExceptionCapture: true,
245
+ // Don't let HyperDX install its own SIGTERM/SIGINT handlers. Its default
246
+ // handler calls process.exit() once its own _shutdown() settles, without
247
+ // awaiting our teardown. OpenClaw owns process lifecycle and drives
248
+ // Runtime.stop() → disposeRecording(), whose recording-batcher drain is an
249
+ // async network flush; HyperDX's exit would preempt that and drop buffered
250
+ // rows. Leaving this false hands shutdown ordering back to the gateway.
251
+ stopOnTerminationSignals: false,
252
+ // Arms setTraceAttributes: without it the span processor that copies per-trace
253
+ // identity onto every span and log stays disabled, and the stamping no-ops.
254
+ betaMode: true,
255
+ });
256
+ await reinstrumentUndici();
257
+ logger.info("OTel SDK initialised", {
258
+ service: SERVICE_NAME,
259
+ endpoint: process.env.OTEL_EXPORTER_OTLP_ENDPOINT,
260
+ deploymentEnvironment,
261
+ });
262
+ }
263
+ catch (err) {
264
+ logger.warn("OTel SDK init failed; continuing without telemetry transport", {
265
+ err: err instanceof Error ? err.message : String(err),
266
+ });
267
+ }
268
+ }
269
+ /**
270
+ * Flush and stop the OTel SDK. Best-effort, idempotent, never throws.
271
+ *
272
+ * Required because {@link initOtelSdk} disables HyperDX's own SIGTERM handler
273
+ * (`stopOnTerminationSignals: false`) — that handler was the SDK's only on-exit
274
+ * flush, so without an explicit shutdown the span/log batch processors' buffers
275
+ * are dropped at process exit. The SDK is process-global (one per process,
276
+ * shared across all hosted runtimes), so this must be called ONCE at process /
277
+ * plugin teardown, after every span has been emitted — never per-runtime, which
278
+ * would cut off telemetry for sibling runtimes still running.
279
+ */
280
+ export async function shutdownOtelSdk() {
281
+ if (!initialized || !hyperdxModule)
282
+ return;
283
+ // Flip the guard first so a concurrent/duplicate teardown can't double-shutdown.
284
+ initialized = false;
285
+ const mod = hyperdxModule;
286
+ hyperdxModule = undefined;
287
+ try {
288
+ await mod.shutdown();
289
+ logger.debug("OTel SDK shut down (final flush complete)");
290
+ }
291
+ catch (err) {
292
+ logger.warn("OTel SDK shutdown failed; buffered spans/logs may be lost", {
293
+ err: err instanceof Error ? err.message : String(err),
294
+ });
295
+ }
296
+ }
297
+ //# sourceMappingURL=otel-sdk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"otel-sdk.js","sourceRoot":"","sources":["../../src/telemetry/otel-sdk.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Span telemetry constants.
3
+ *
4
+ * Header names used to cross the runtime → OpenClaw HTTP boundary so the
5
+ * gateway-side hooks can stamp senpi identity onto the gen_ai spans.
6
+ */
7
+ export declare const HEADER_CORRELATION_ID = "x-senpi-correlation-id";
8
+ export declare const HEADER_ADDRESS = "x-senpi-address";
9
+ export declare const HEADER_RECIPE_NAME = "x-senpi-recipe-name";
10
+ export declare const HEADER_RUNTIME_ID = "x-senpi-runtime-id";
11
+ export declare const HEADER_RUNTIME_VERSION = "x-senpi-runtime-version";
12
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/telemetry/spans/constants.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,qBAAqB,2BAA2B,CAAC;AAC9D,eAAO,MAAM,cAAc,oBAAoB,CAAC;AAChD,eAAO,MAAM,kBAAkB,wBAAwB,CAAC;AACxD,eAAO,MAAM,iBAAiB,uBAAuB,CAAC;AACtD,eAAO,MAAM,sBAAsB,4BAA4B,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Span telemetry constants.
3
+ *
4
+ * Header names used to cross the runtime → OpenClaw HTTP boundary so the
5
+ * gateway-side hooks can stamp senpi identity onto the gen_ai spans.
6
+ */
7
+ export const HEADER_CORRELATION_ID = "x-senpi-correlation-id";
8
+ export const HEADER_ADDRESS = "x-senpi-address";
9
+ export const HEADER_RECIPE_NAME = "x-senpi-recipe-name";
10
+ export const HEADER_RUNTIME_ID = "x-senpi-runtime-id";
11
+ export const HEADER_RUNTIME_VERSION = "x-senpi-runtime-version";
12
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/telemetry/spans/constants.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAAG,wBAAwB,CAAC;AAC9D,MAAM,CAAC,MAAM,cAAc,GAAG,iBAAiB,CAAC;AAChD,MAAM,CAAC,MAAM,kBAAkB,GAAG,qBAAqB,CAAC;AACxD,MAAM,CAAC,MAAM,iBAAiB,GAAG,oBAAoB,CAAC;AACtD,MAAM,CAAC,MAAM,sBAAsB,GAAG,yBAAyB,CAAC"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * gen_ai / MCP span mapping — the one place that turns extracted hook content (or on-site
3
+ * MCP call data) into OpenTelemetry GenAI/MCP semantic-convention span attributes (the
4
+ * `GEN_AI` keys below). Standard keys only — no OpenClaw `openclaw.content.*` mirror, no
5
+ * OpenInference `input.value`/`output.value` aliases; `gen_ai.system_instructions` is the
6
+ * spec's underscore form.
7
+ *
8
+ * Content (messages, system instructions, tool args/result) is the highest-PII surface, so
9
+ * it is always redacted *before* stamping and capped *after* (sanitize → redact → cap) so a
10
+ * truncated value can't re-expose a partial secret. If the redactor fails to load, content is
11
+ * dropped rather than emitted unredacted.
12
+ */
13
+ import type { Attributes, Span } from "@opentelemetry/api";
14
+ /**
15
+ * Max chars per content attribute value, applied after redaction. A transport-safety
16
+ * cap that sits far under the OTLP/HTTP request-body limit (~20 MiB), not a backend
17
+ * storage limit — content this size is rare and we'd rather truncate than risk a
18
+ * rejected export.
19
+ */
20
+ export declare const MAX_OTEL_CONTENT_ATTRIBUTE_CHARS: number;
21
+ /** Max items per message / tool-definition array, applied after redaction. */
22
+ export declare const MAX_OTEL_CONTENT_ARRAY_ITEMS = 200;
23
+ export declare const GEN_AI: {
24
+ readonly OPERATION_NAME: "gen_ai.operation.name";
25
+ readonly CONVERSATION_ID: "gen_ai.conversation.id";
26
+ readonly PROVIDER_NAME: "gen_ai.provider.name";
27
+ readonly REQUEST_MODEL: "gen_ai.request.model";
28
+ readonly REQUEST_TEMPERATURE: "gen_ai.request.temperature";
29
+ readonly REQUEST_MAX_TOKENS: "gen_ai.request.max_tokens";
30
+ readonly RESPONSE_MODEL: "gen_ai.response.model";
31
+ readonly RESPONSE_FINISH_REASONS: "gen_ai.response.finish_reasons";
32
+ readonly USAGE_INPUT_TOKENS: "gen_ai.usage.input_tokens";
33
+ readonly USAGE_OUTPUT_TOKENS: "gen_ai.usage.output_tokens";
34
+ readonly USAGE_CACHE_READ_TOKENS: "gen_ai.usage.cache_read_tokens";
35
+ readonly USAGE_CACHE_WRITE_TOKENS: "gen_ai.usage.cache_write_tokens";
36
+ readonly USAGE_TOTAL_TOKENS: "gen_ai.usage.total_tokens";
37
+ readonly SYSTEM_INSTRUCTIONS: "gen_ai.system_instructions";
38
+ readonly INPUT_MESSAGES: "gen_ai.input.messages";
39
+ readonly OUTPUT_MESSAGES: "gen_ai.output.messages";
40
+ readonly TOOL_DEFINITIONS: "gen_ai.tool.definitions";
41
+ readonly AGENT_NAME: "gen_ai.agent.name";
42
+ readonly TOOL_NAME: "gen_ai.tool.name";
43
+ readonly TOOL_CALL_ID: "gen_ai.tool.call.id";
44
+ readonly TOOL_CALL_ARGUMENTS: "gen_ai.tool.call.arguments";
45
+ readonly TOOL_CALL_RESULT: "gen_ai.tool.call.result";
46
+ };
47
+ /** Reset the cached redactor (tests only). */
48
+ export declare function __resetContentRedactorForTest(): void;
49
+ /**
50
+ * Turn a content value into a capped JSON string with PII redacted: sanitize framework
51
+ * metadata, redact (when a redactor is available), then serialize within the caps.
52
+ * Array content keeps the newest items (dropping oldest with a visible elision marker,
53
+ * so the result stays valid JSON); non-array content is tail-truncated with a suffix.
54
+ * Returns `undefined` when the value is empty. Never throws — a failure drops the value.
55
+ */
56
+ export declare function redactAndCapContent(value: unknown): Promise<string | undefined>;
57
+ /** Redact + cap a content value and stamp it onto the span (when capture is on and non-empty). */
58
+ export declare function setGenAiContentAttribute(span: Span, key: string, value: unknown): Promise<void>;
59
+ /** Set every defined value in `attrs` on the span, skipping undefined/null. Never throws. */
60
+ export declare function setDefinedAttributes(span: Span, attrs: Attributes): void;
61
+ /** Low-cardinality `error.type` for the spec: error.name, the string itself, else "_OTHER". */
62
+ export declare function errorTypeOf(error: unknown): string;
63
+ /**
64
+ * Mark a span as failed: record the exception, set ERROR status, and stamp the spec's
65
+ * low-cardinality `error.type`. Never throws.
66
+ */
67
+ export declare function recordSpanError(span: Span, error: unknown): void;
68
+ /** First finite number among the candidates, else undefined. */
69
+ export declare function firstNumber(...values: unknown[]): number | undefined;
70
+ /** Normalize a finish-reason value to a string array (gen_ai.response.finish_reasons is an array). */
71
+ export declare function toFinishReasons(value: unknown): string[] | undefined;
72
+ /** Normalize a list of raw provider messages into spec `{ role, parts }` objects. */
73
+ export declare function normalizeGenAiMessages(value: unknown, fallbackRole: "user" | "assistant"): Array<Record<string, unknown>> | undefined;
74
+ //# sourceMappingURL=gen-ai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gen-ai.d.ts","sourceRoot":"","sources":["../../../src/telemetry/spans/gen-ai.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAc3D;;;;;GAKG;AACH,eAAO,MAAM,gCAAgC,QAAa,CAAC;AAC3D,8EAA8E;AAC9E,eAAO,MAAM,4BAA4B,MAAM,CAAC;AAMhD,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;CAuBT,CAAC;AAyBX,8CAA8C;AAC9C,wBAAgB,6BAA6B,IAAI,IAAI,CAEpD;AA+CD;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAyBrF;AAED,kGAAkG;AAClG,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,IAAI,EACV,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,IAAI,CAAC,CAaf;AAID,6FAA6F;AAC7F,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI,CAQxE;AAED,+FAA+F;AAC/F,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAIlD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAWhE;AAID,gEAAgE;AAChE,wBAAgB,WAAW,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,GAAG,SAAS,CAKpE;AAED,sGAAsG;AACtG,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,EAAE,GAAG,SAAS,CAQpE;AAgGD,qFAAqF;AACrF,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,OAAO,EACd,YAAY,EAAE,MAAM,GAAG,WAAW,GACjC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,CAQ5C"}