@senpi/runtime 3.0.6-dev.runtime-phase-2.20260630134327 → 3.0.6-dev.runtime-phase-2.20260630134451

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 (326) hide show
  1. package/dist/actions/{tracking-helpers.d.ts → action-events.d.ts} +24 -23
  2. package/dist/actions/action-events.d.ts.map +1 -0
  3. package/dist/actions/{tracking-helpers.js → action-events.js} +25 -77
  4. package/dist/actions/action-events.js.map +1 -0
  5. package/dist/actions/close-position/close-position.action.d.ts.map +1 -1
  6. package/dist/actions/close-position/close-position.action.js +8 -17
  7. package/dist/actions/close-position/close-position.action.js.map +1 -1
  8. package/dist/actions/event-derivation.d.ts +5 -6
  9. package/dist/actions/event-derivation.d.ts.map +1 -1
  10. package/dist/actions/event-derivation.js +4 -5
  11. package/dist/actions/event-derivation.js.map +1 -1
  12. package/dist/actions/llm-decision/anthropic-llm-decision.d.ts +5 -9
  13. package/dist/actions/llm-decision/anthropic-llm-decision.d.ts.map +1 -1
  14. package/dist/actions/llm-decision/anthropic-llm-decision.js +6 -86
  15. package/dist/actions/llm-decision/anthropic-llm-decision.js.map +1 -1
  16. package/dist/actions/llm-decision/factory.d.ts +0 -6
  17. package/dist/actions/llm-decision/factory.d.ts.map +1 -1
  18. package/dist/actions/llm-decision/factory.js +0 -2
  19. package/dist/actions/llm-decision/factory.js.map +1 -1
  20. package/dist/actions/llm-decision/openclaw-llm-decision.d.ts.map +1 -1
  21. package/dist/actions/llm-decision/openclaw-llm-decision.js +25 -5
  22. package/dist/actions/llm-decision/openclaw-llm-decision.js.map +1 -1
  23. package/dist/actions/open-position/open-position.action.d.ts.map +1 -1
  24. package/dist/actions/open-position/open-position.action.js +9 -17
  25. package/dist/actions/open-position/open-position.action.js.map +1 -1
  26. package/dist/actions/position-tracker/position-tracker.action.d.ts.map +1 -1
  27. package/dist/actions/position-tracker/position-tracker.action.js +1 -2
  28. package/dist/actions/position-tracker/position-tracker.action.js.map +1 -1
  29. package/dist/dsl/engine-client/event-mapping.d.ts.map +1 -1
  30. package/dist/dsl/engine-client/event-mapping.js +0 -3
  31. package/dist/dsl/engine-client/event-mapping.js.map +1 -1
  32. package/dist/dsl/events/build-closed-event.d.ts.map +1 -1
  33. package/dist/dsl/events/build-closed-event.js +0 -1
  34. package/dist/dsl/events/build-closed-event.js.map +1 -1
  35. package/dist/dsl/events/handlers.d.ts.map +1 -1
  36. package/dist/dsl/events/handlers.js +2 -4
  37. package/dist/dsl/events/handlers.js.map +1 -1
  38. package/dist/dsl/monitor/create-monitor.d.ts +1 -1
  39. package/dist/dsl/monitor/create-monitor.d.ts.map +1 -1
  40. package/dist/dsl/monitor/create-monitor.js +0 -30
  41. package/dist/dsl/monitor/create-monitor.js.map +1 -1
  42. package/dist/dsl/monitor/process-one-position.d.ts.map +1 -1
  43. package/dist/dsl/monitor/process-one-position.js +0 -121
  44. package/dist/dsl/monitor/process-one-position.js.map +1 -1
  45. package/dist/dsl/plugin/index.js +3 -3
  46. package/dist/dsl/plugin/index.js.map +1 -1
  47. package/dist/dsl/plugin/options.d.ts +1 -1
  48. package/dist/index.d.ts.map +1 -1
  49. package/dist/index.js +27 -60
  50. package/dist/index.js.map +1 -1
  51. package/dist/runtime/__tests__/helpers/runtime-gateway-harness.d.ts +2 -0
  52. package/dist/runtime/__tests__/helpers/runtime-gateway-harness.d.ts.map +1 -1
  53. package/dist/runtime/__tests__/helpers/runtime-gateway-harness.js +24 -3
  54. package/dist/runtime/__tests__/helpers/runtime-gateway-harness.js.map +1 -1
  55. package/dist/runtime/create-runtime-context.d.ts +1 -1
  56. package/dist/runtime/create-runtime-context.d.ts.map +1 -1
  57. package/dist/runtime/create-scanner-module.d.ts +1 -1
  58. package/dist/runtime/domain-events.d.ts +4 -4
  59. package/dist/runtime/domain-events.d.ts.map +1 -1
  60. package/dist/runtime/domain-events.js +4 -4
  61. package/dist/runtime/domain-events.js.map +1 -1
  62. package/dist/runtime/lifecycle-events.d.ts +3 -3
  63. package/dist/runtime/lifecycle-events.js +5 -5
  64. package/dist/runtime/lifecycle-events.js.map +1 -1
  65. package/dist/{tracking → runtime}/position-id-registry.d.ts +14 -1
  66. package/dist/runtime/position-id-registry.d.ts.map +1 -0
  67. package/dist/{tracking → runtime}/position-id-registry.js +20 -3
  68. package/dist/runtime/position-id-registry.js.map +1 -0
  69. package/dist/runtime/run.d.ts +2 -4
  70. package/dist/runtime/run.d.ts.map +1 -1
  71. package/dist/runtime/run.js.map +1 -1
  72. package/dist/runtime/runtime-schema.d.ts +120 -486
  73. package/dist/runtime/runtime-schema.d.ts.map +1 -1
  74. package/dist/runtime/runtime-schema.js +0 -27
  75. package/dist/runtime/runtime-schema.js.map +1 -1
  76. package/dist/runtime/runtime.d.ts +4 -9
  77. package/dist/runtime/runtime.d.ts.map +1 -1
  78. package/dist/runtime/runtime.js +33 -190
  79. package/dist/runtime/runtime.js.map +1 -1
  80. package/dist/scanners/engine/data-providers.d.ts +1 -1
  81. package/dist/scanners/runtime-module.d.ts +1 -1
  82. package/dist/senpi/client.d.ts +10 -0
  83. package/dist/senpi/client.d.ts.map +1 -1
  84. package/dist/senpi/client.js +70 -50
  85. package/dist/senpi/client.js.map +1 -1
  86. package/dist/telemetry/attributes.d.ts +13 -0
  87. package/dist/telemetry/attributes.d.ts.map +1 -0
  88. package/dist/telemetry/attributes.js +22 -0
  89. package/dist/telemetry/attributes.js.map +1 -0
  90. package/dist/{tracking → telemetry}/context.d.ts +6 -5
  91. package/dist/telemetry/context.d.ts.map +1 -0
  92. package/dist/{tracking → telemetry}/context.js +4 -4
  93. package/dist/telemetry/context.js.map +1 -0
  94. package/dist/{recording/records.d.ts → telemetry/event-builders.d.ts} +138 -30
  95. package/dist/telemetry/event-builders.d.ts.map +1 -0
  96. package/dist/{recording/wiring/record-builders.js → telemetry/event-builders.js} +90 -39
  97. package/dist/telemetry/event-builders.js.map +1 -0
  98. package/dist/telemetry/identity.d.ts +62 -0
  99. package/dist/telemetry/identity.d.ts.map +1 -0
  100. package/dist/{recording/wiring → telemetry}/identity.js +5 -2
  101. package/dist/telemetry/identity.js.map +1 -0
  102. package/dist/telemetry/metrics.d.ts +47 -0
  103. package/dist/telemetry/metrics.d.ts.map +1 -0
  104. package/dist/telemetry/metrics.js +154 -0
  105. package/dist/telemetry/metrics.js.map +1 -0
  106. package/dist/telemetry/otel-sdk.d.ts +21 -33
  107. package/dist/telemetry/otel-sdk.d.ts.map +1 -1
  108. package/dist/telemetry/otel-sdk.js +77 -50
  109. package/dist/telemetry/otel-sdk.js.map +1 -1
  110. package/dist/telemetry/spans/constants.d.ts +12 -0
  111. package/dist/telemetry/spans/constants.d.ts.map +1 -0
  112. package/dist/telemetry/spans/constants.js +12 -0
  113. package/dist/telemetry/spans/constants.js.map +1 -0
  114. package/dist/telemetry/spans/gen-ai.d.ts +70 -0
  115. package/dist/telemetry/spans/gen-ai.d.ts.map +1 -0
  116. package/dist/telemetry/spans/gen-ai.js +330 -0
  117. package/dist/telemetry/spans/gen-ai.js.map +1 -0
  118. package/dist/telemetry/spans/index.d.ts +11 -0
  119. package/dist/telemetry/spans/index.d.ts.map +1 -0
  120. package/dist/telemetry/spans/index.js +11 -0
  121. package/dist/telemetry/spans/index.js.map +1 -0
  122. package/dist/{tracking → telemetry}/spans/redact-pii.d.ts +18 -20
  123. package/dist/telemetry/spans/redact-pii.d.ts.map +1 -0
  124. package/dist/{tracking → telemetry}/spans/redact-pii.js +30 -29
  125. package/dist/telemetry/spans/redact-pii.js.map +1 -0
  126. package/dist/telemetry/spans/sanitize-payload.d.ts.map +1 -0
  127. package/dist/telemetry/spans/sanitize-payload.js.map +1 -0
  128. package/dist/telemetry/spans/span-hooks.d.ts +11 -0
  129. package/dist/telemetry/spans/span-hooks.d.ts.map +1 -0
  130. package/dist/telemetry/spans/span-hooks.js +609 -0
  131. package/dist/telemetry/spans/span-hooks.js.map +1 -0
  132. package/dist/telemetry/trace-identity.d.ts +1 -1
  133. package/dist/telemetry/tracing.d.ts +2 -1
  134. package/dist/telemetry/tracing.d.ts.map +1 -1
  135. package/dist/telemetry/tracing.js +1 -1
  136. package/dist/telemetry/tracing.js.map +1 -1
  137. package/dist/types/dsl/index.d.ts +2 -9
  138. package/dist/types/dsl/index.d.ts.map +1 -1
  139. package/dist/types/runtime.d.ts +1 -1
  140. package/dist/types/runtime.d.ts.map +1 -1
  141. package/dist/utils/event-catalog.d.ts +2 -2
  142. package/dist/utils/event-catalog.js +2 -2
  143. package/dist/utils/logger.js +3 -4
  144. package/dist/utils/logger.js.map +1 -1
  145. package/package.json +1 -1
  146. package/dist/actions/tracking-helpers.d.ts.map +0 -1
  147. package/dist/actions/tracking-helpers.js.map +0 -1
  148. package/dist/recording/emitter.d.ts +0 -27
  149. package/dist/recording/emitter.d.ts.map +0 -1
  150. package/dist/recording/emitter.js +0 -2
  151. package/dist/recording/emitter.js.map +0 -1
  152. package/dist/recording/identity.d.ts +0 -34
  153. package/dist/recording/identity.d.ts.map +0 -1
  154. package/dist/recording/identity.js +0 -2
  155. package/dist/recording/identity.js.map +0 -1
  156. package/dist/recording/index.d.ts +0 -11
  157. package/dist/recording/index.d.ts.map +0 -1
  158. package/dist/recording/index.js +0 -2
  159. package/dist/recording/index.js.map +0 -1
  160. package/dist/recording/noop-emitter.d.ts +0 -23
  161. package/dist/recording/noop-emitter.d.ts.map +0 -1
  162. package/dist/recording/noop-emitter.js +0 -22
  163. package/dist/recording/noop-emitter.js.map +0 -1
  164. package/dist/recording/otel/attributes.d.ts +0 -37
  165. package/dist/recording/otel/attributes.d.ts.map +0 -1
  166. package/dist/recording/otel/attributes.js +0 -131
  167. package/dist/recording/otel/attributes.js.map +0 -1
  168. package/dist/recording/otel/constants.d.ts +0 -123
  169. package/dist/recording/otel/constants.d.ts.map +0 -1
  170. package/dist/recording/otel/constants.js +0 -172
  171. package/dist/recording/otel/constants.js.map +0 -1
  172. package/dist/recording/otel/ids.d.ts +0 -25
  173. package/dist/recording/otel/ids.d.ts.map +0 -1
  174. package/dist/recording/otel/ids.js +0 -37
  175. package/dist/recording/otel/ids.js.map +0 -1
  176. package/dist/recording/otel/index.d.ts +0 -13
  177. package/dist/recording/otel/index.d.ts.map +0 -1
  178. package/dist/recording/otel/index.js +0 -9
  179. package/dist/recording/otel/index.js.map +0 -1
  180. package/dist/recording/otel/mappers.d.ts +0 -100
  181. package/dist/recording/otel/mappers.d.ts.map +0 -1
  182. package/dist/recording/otel/mappers.js +0 -684
  183. package/dist/recording/otel/mappers.js.map +0 -1
  184. package/dist/recording/otel/otel-emitter.d.ts +0 -43
  185. package/dist/recording/otel/otel-emitter.d.ts.map +0 -1
  186. package/dist/recording/otel/otel-emitter.js +0 -99
  187. package/dist/recording/otel/otel-emitter.js.map +0 -1
  188. package/dist/recording/otel/redaction.d.ts +0 -47
  189. package/dist/recording/otel/redaction.d.ts.map +0 -1
  190. package/dist/recording/otel/redaction.js +0 -88
  191. package/dist/recording/otel/redaction.js.map +0 -1
  192. package/dist/recording/records.d.ts.map +0 -1
  193. package/dist/recording/records.js +0 -14
  194. package/dist/recording/records.js.map +0 -1
  195. package/dist/recording/transport/batcher.d.ts +0 -59
  196. package/dist/recording/transport/batcher.d.ts.map +0 -1
  197. package/dist/recording/transport/batcher.js +0 -234
  198. package/dist/recording/transport/batcher.js.map +0 -1
  199. package/dist/recording/transport/client.d.ts +0 -41
  200. package/dist/recording/transport/client.d.ts.map +0 -1
  201. package/dist/recording/transport/client.js +0 -69
  202. package/dist/recording/transport/client.js.map +0 -1
  203. package/dist/recording/transport/config.d.ts +0 -53
  204. package/dist/recording/transport/config.d.ts.map +0 -1
  205. package/dist/recording/transport/config.js +0 -41
  206. package/dist/recording/transport/config.js.map +0 -1
  207. package/dist/recording/transport/index.d.ts +0 -16
  208. package/dist/recording/transport/index.d.ts.map +0 -1
  209. package/dist/recording/transport/index.js +0 -12
  210. package/dist/recording/transport/index.js.map +0 -1
  211. package/dist/recording/transport/rows.d.ts +0 -88
  212. package/dist/recording/transport/rows.d.ts.map +0 -1
  213. package/dist/recording/transport/rows.js +0 -15
  214. package/dist/recording/transport/rows.js.map +0 -1
  215. package/dist/recording/wiring/emitter-factory.d.ts +0 -39
  216. package/dist/recording/wiring/emitter-factory.d.ts.map +0 -1
  217. package/dist/recording/wiring/emitter-factory.js +0 -62
  218. package/dist/recording/wiring/emitter-factory.js.map +0 -1
  219. package/dist/recording/wiring/identity.d.ts +0 -27
  220. package/dist/recording/wiring/identity.d.ts.map +0 -1
  221. package/dist/recording/wiring/identity.js.map +0 -1
  222. package/dist/recording/wiring/index.d.ts +0 -12
  223. package/dist/recording/wiring/index.d.ts.map +0 -1
  224. package/dist/recording/wiring/index.js +0 -9
  225. package/dist/recording/wiring/index.js.map +0 -1
  226. package/dist/recording/wiring/record-builders.d.ts +0 -107
  227. package/dist/recording/wiring/record-builders.d.ts.map +0 -1
  228. package/dist/recording/wiring/record-builders.js.map +0 -1
  229. package/dist/recording/wiring/subscriber.d.ts +0 -28
  230. package/dist/recording/wiring/subscriber.d.ts.map +0 -1
  231. package/dist/recording/wiring/subscriber.js +0 -173
  232. package/dist/recording/wiring/subscriber.js.map +0 -1
  233. package/dist/recording/wiring/values.d.ts +0 -19
  234. package/dist/recording/wiring/values.d.ts.map +0 -1
  235. package/dist/recording/wiring/values.js +0 -49
  236. package/dist/recording/wiring/values.js.map +0 -1
  237. package/dist/tracking/build-rehydrate-items.d.ts +0 -15
  238. package/dist/tracking/build-rehydrate-items.d.ts.map +0 -1
  239. package/dist/tracking/build-rehydrate-items.js +0 -19
  240. package/dist/tracking/build-rehydrate-items.js.map +0 -1
  241. package/dist/tracking/constants.d.ts +0 -24
  242. package/dist/tracking/constants.d.ts.map +0 -1
  243. package/dist/tracking/constants.js +0 -52
  244. package/dist/tracking/constants.js.map +0 -1
  245. package/dist/tracking/context.d.ts.map +0 -1
  246. package/dist/tracking/context.js.map +0 -1
  247. package/dist/tracking/index.d.ts +0 -16
  248. package/dist/tracking/index.d.ts.map +0 -1
  249. package/dist/tracking/index.js +0 -11
  250. package/dist/tracking/index.js.map +0 -1
  251. package/dist/tracking/plugin-event-tracker.d.ts +0 -13
  252. package/dist/tracking/plugin-event-tracker.d.ts.map +0 -1
  253. package/dist/tracking/plugin-event-tracker.js +0 -27
  254. package/dist/tracking/plugin-event-tracker.js.map +0 -1
  255. package/dist/tracking/position-id-registry.d.ts.map +0 -1
  256. package/dist/tracking/position-id-registry.js.map +0 -1
  257. package/dist/tracking/spans/constants.d.ts +0 -19
  258. package/dist/tracking/spans/constants.d.ts.map +0 -1
  259. package/dist/tracking/spans/constants.js +0 -31
  260. package/dist/tracking/spans/constants.js.map +0 -1
  261. package/dist/tracking/spans/fan-out-span-transport.d.ts +0 -22
  262. package/dist/tracking/spans/fan-out-span-transport.d.ts.map +0 -1
  263. package/dist/tracking/spans/fan-out-span-transport.js +0 -49
  264. package/dist/tracking/spans/fan-out-span-transport.js.map +0 -1
  265. package/dist/tracking/spans/index.d.ts +0 -13
  266. package/dist/tracking/spans/index.d.ts.map +0 -1
  267. package/dist/tracking/spans/index.js +0 -16
  268. package/dist/tracking/spans/index.js.map +0 -1
  269. package/dist/tracking/spans/otel/fit-row-budget.d.ts +0 -22
  270. package/dist/tracking/spans/otel/fit-row-budget.d.ts.map +0 -1
  271. package/dist/tracking/spans/otel/fit-row-budget.js +0 -91
  272. package/dist/tracking/spans/otel/fit-row-budget.js.map +0 -1
  273. package/dist/tracking/spans/otel/map-span-to-trace-row.d.ts +0 -16
  274. package/dist/tracking/spans/otel/map-span-to-trace-row.d.ts.map +0 -1
  275. package/dist/tracking/spans/otel/map-span-to-trace-row.js +0 -227
  276. package/dist/tracking/spans/otel/map-span-to-trace-row.js.map +0 -1
  277. package/dist/tracking/spans/otel/recording-span-transport.d.ts +0 -43
  278. package/dist/tracking/spans/otel/recording-span-transport.d.ts.map +0 -1
  279. package/dist/tracking/spans/otel/recording-span-transport.js +0 -67
  280. package/dist/tracking/spans/otel/recording-span-transport.js.map +0 -1
  281. package/dist/tracking/spans/otel/span-ids.d.ts +0 -22
  282. package/dist/tracking/spans/otel/span-ids.d.ts.map +0 -1
  283. package/dist/tracking/spans/otel/span-ids.js +0 -32
  284. package/dist/tracking/spans/otel/span-ids.js.map +0 -1
  285. package/dist/tracking/spans/plugin-span-tracker.d.ts +0 -9
  286. package/dist/tracking/spans/plugin-span-tracker.d.ts.map +0 -1
  287. package/dist/tracking/spans/plugin-span-tracker.js +0 -115
  288. package/dist/tracking/spans/plugin-span-tracker.js.map +0 -1
  289. package/dist/tracking/spans/redact-pii.d.ts.map +0 -1
  290. package/dist/tracking/spans/redact-pii.js.map +0 -1
  291. package/dist/tracking/spans/sanitize-payload.d.ts.map +0 -1
  292. package/dist/tracking/spans/sanitize-payload.js.map +0 -1
  293. package/dist/tracking/spans/span-hooks.d.ts +0 -28
  294. package/dist/tracking/spans/span-hooks.d.ts.map +0 -1
  295. package/dist/tracking/spans/span-hooks.js +0 -409
  296. package/dist/tracking/spans/span-hooks.js.map +0 -1
  297. package/dist/tracking/spans/span-tracker.d.ts +0 -133
  298. package/dist/tracking/spans/span-tracker.d.ts.map +0 -1
  299. package/dist/tracking/spans/span-tracker.js +0 -721
  300. package/dist/tracking/spans/span-tracker.js.map +0 -1
  301. package/dist/tracking/spans/span-transport.d.ts +0 -71
  302. package/dist/tracking/spans/span-transport.d.ts.map +0 -1
  303. package/dist/tracking/spans/span-transport.js +0 -240
  304. package/dist/tracking/spans/span-transport.js.map +0 -1
  305. package/dist/tracking/spans/types.d.ts +0 -101
  306. package/dist/tracking/spans/types.d.ts.map +0 -1
  307. package/dist/tracking/spans/types.js +0 -6
  308. package/dist/tracking/spans/types.js.map +0 -1
  309. package/dist/tracking/tracker.d.ts +0 -30
  310. package/dist/tracking/tracker.d.ts.map +0 -1
  311. package/dist/tracking/tracker.js +0 -66
  312. package/dist/tracking/tracker.js.map +0 -1
  313. package/dist/tracking/tracking-handler.d.ts +0 -12
  314. package/dist/tracking/tracking-handler.d.ts.map +0 -1
  315. package/dist/tracking/tracking-handler.js +0 -148
  316. package/dist/tracking/tracking-handler.js.map +0 -1
  317. package/dist/tracking/transport.d.ts +0 -35
  318. package/dist/tracking/transport.d.ts.map +0 -1
  319. package/dist/tracking/transport.js +0 -133
  320. package/dist/tracking/transport.js.map +0 -1
  321. package/dist/tracking/types.d.ts +0 -21
  322. package/dist/tracking/types.d.ts.map +0 -1
  323. package/dist/tracking/types.js +0 -6
  324. package/dist/tracking/types.js.map +0 -1
  325. /package/dist/{tracking → telemetry}/spans/sanitize-payload.d.ts +0 -0
  326. /package/dist/{tracking → telemetry}/spans/sanitize-payload.js +0 -0
@@ -0,0 +1,609 @@
1
+ /**
2
+ * registerSpanHooks: wires the nine OpenClaw plugin hooks (llm_input/llm_output,
3
+ * before/after_tool_call, the four subagent_* hooks, agent_end) to real OTel gen_ai
4
+ * spans via the shared `getTracer()`:
5
+ * - llm_input → llm_output → `chat` (CLIENT)
6
+ * - tool_call → `execute_tool` (INTERNAL), parented to the model span
7
+ * - subagent_* lifecycle → `invoke_agent` (INTERNAL), parented to the model span
8
+ * - agent_end → ends any still-open spans for the run
9
+ *
10
+ * Open and finalize are separate callbacks, so we can't use `withSpan`; we `startSpan`
11
+ * and hold the handle in a session-keyed registry until the finalize hook, recording
12
+ * errors directly on the held span (it's never the active span, so `logger.error` won't).
13
+ *
14
+ * Identity rides as `senpi.*` attributes from the `X-Senpi-*` headers (ALS doesn't cross
15
+ * the loopback fetch). The trading trace is joined by the `traceparent` header when present
16
+ * (nesting under `signal.process`), else by a `senpi.run.id` attribute. Handlers
17
+ * never throw.
18
+ */
19
+ import { SpanKind, context as otelContext, propagation, trace, } from "@opentelemetry/api";
20
+ import { getTracer } from "../../telemetry/tracing.js";
21
+ import { HEADER_ADDRESS, HEADER_CORRELATION_ID, HEADER_RECIPE_NAME, HEADER_RUNTIME_ID, HEADER_RUNTIME_VERSION, } from "./constants.js";
22
+ import { GEN_AI, errorTypeOf, firstNumber, normalizeGenAiMessages, recordSpanError, setDefinedAttributes, setGenAiContentAttribute, toFinishReasons, } from "./gen-ai.js";
23
+ import { elapsedSeconds, recordExecuteToolDuration, recordInvokeAgentDuration, recordOperationDuration, recordTokenUsage, } from "../../telemetry/metrics.js";
24
+ import { createLogger } from "../../utils/logger.js";
25
+ const logger = createLogger("[senpi-core][span-hooks]");
26
+ export function registerSpanHooks(options) {
27
+ const { api } = options;
28
+ const tracer = getTracer();
29
+ // Held model spans, keyed by (sessionKey, runId). The tool/subagent spans parent
30
+ // off the model span for the same session/run.
31
+ const modelSpans = new Map();
32
+ // Held tool spans, keyed by (sessionKey, runId, toolCallId|toolName seq).
33
+ const toolSpans = new Map();
34
+ // Held subagent spans, keyed by childSessionKey (sessionKey/runId = the host).
35
+ const subagentSpans = new Map();
36
+ let toolSeq = 0;
37
+ // Tool hooks often arrive with a ctx that lacks sessionKey/runId. Remember
38
+ // (agentId → sessionKey/runId) from llm_input, plus the last-seen pair, so tool
39
+ // hooks can resolve their host session.
40
+ const sessionByAgentId = new Map();
41
+ let lastActive = null;
42
+ const rememberSession = (agentCtx, sessionKey, runId) => {
43
+ const agentId = nonEmptyString(asRecord(agentCtx)?.agentId);
44
+ if (agentId)
45
+ sessionByAgentId.set(agentId, { sessionKey, runId });
46
+ lastActive = { sessionKey, runId };
47
+ };
48
+ const resolveToolSession = (ctx) => {
49
+ const direct = {
50
+ sessionKey: readSessionKey(ctx, undefined),
51
+ runId: readRunId(ctx, undefined),
52
+ };
53
+ if (direct.sessionKey && direct.runId) {
54
+ return { sessionKey: direct.sessionKey, runId: direct.runId };
55
+ }
56
+ const agentId = nonEmptyString(asRecord(ctx)?.agentId);
57
+ if (agentId) {
58
+ const hit = sessionByAgentId.get(agentId);
59
+ if (hit)
60
+ return hit;
61
+ }
62
+ return lastActive;
63
+ };
64
+ /** Build a parent Context for tool/subagent spans from the host model span (if any). */
65
+ const parentContextForModel = (sessionKey, runId) => {
66
+ const model = modelSpans.get(sessionLlmKey(sessionKey, runId));
67
+ return model ? trace.setSpan(otelContext.active(), model.span) : otelContext.active();
68
+ };
69
+ // ─── LLM (`chat` span) ───────────────────────────────────────────────────
70
+ api.on("llm_input", (event, agentCtx) => {
71
+ try {
72
+ const identity = readIdentity(agentCtx);
73
+ const sessionKey = readSessionKey(agentCtx, event);
74
+ const runId = readRunId(agentCtx, event);
75
+ if (!sessionKey || !runId) {
76
+ logger.warn("llm_input missing sessionKey/runId; skipping span");
77
+ return;
78
+ }
79
+ rememberSession(agentCtx, sessionKey, runId);
80
+ const key = sessionLlmKey(sessionKey, runId);
81
+ // A duplicate llm_input for the same (session, run) means a new turn opened
82
+ // without the previous one closing — end the prior span before replacing it.
83
+ const prior = modelSpans.get(key);
84
+ if (prior)
85
+ endSpan(prior.span);
86
+ const ev = asRecord(event) ?? {};
87
+ const requestModel = nonEmptyString(ev.model);
88
+ const provider = nonEmptyString(ev.provider);
89
+ const span = tracer.startSpan(`chat ${requestModel ?? "unknown"}`, { kind: SpanKind.CLIENT },
90
+ // Parent off the trading trace when the traceparent header threaded through.
91
+ parentContextFromHeaders(agentCtx));
92
+ const held = {
93
+ span,
94
+ sessionKey,
95
+ runId,
96
+ startMs: Date.now(),
97
+ provider,
98
+ model: requestModel,
99
+ };
100
+ modelSpans.set(key, held);
101
+ setDefinedAttributes(span, {
102
+ [GEN_AI.OPERATION_NAME]: "chat",
103
+ [GEN_AI.PROVIDER_NAME]: provider,
104
+ [GEN_AI.REQUEST_MODEL]: requestModel,
105
+ [GEN_AI.REQUEST_TEMPERATURE]: firstNumber(ev.temperature),
106
+ [GEN_AI.REQUEST_MAX_TOKENS]: firstNumber(ev.maxTokens),
107
+ ...identityAttributes(identity),
108
+ });
109
+ // Content (redacted + capped). Stamping is async and the span ends in llm_output,
110
+ // so track the promise for the finalize to await — else a fast round-trip could end
111
+ // the span before the input content lands.
112
+ held.pending = Promise.allSettled([
113
+ setGenAiContentAttribute(span, GEN_AI.SYSTEM_INSTRUCTIONS, buildSystemInstructions(ev)),
114
+ setGenAiContentAttribute(span, GEN_AI.INPUT_MESSAGES, buildInputMessages(ev)),
115
+ setGenAiContentAttribute(span, GEN_AI.TOOL_DEFINITIONS, ev.tools),
116
+ ]);
117
+ }
118
+ catch (err) {
119
+ logger.warn("llm_input handler failed", { err: errMsg(err) });
120
+ }
121
+ });
122
+ api.on("llm_output", (event, agentCtx) => {
123
+ try {
124
+ const sessionKey = readSessionKey(agentCtx, event);
125
+ const runId = readRunId(agentCtx, event);
126
+ if (!sessionKey || !runId) {
127
+ logger.warn("llm_output missing sessionKey/runId; skipping span");
128
+ return;
129
+ }
130
+ rememberSession(agentCtx, sessionKey, runId);
131
+ const held = modelSpans.get(sessionLlmKey(sessionKey, runId));
132
+ if (!held) {
133
+ logger.debug("llm_output: no open chat span", { sessionKey, runId });
134
+ return;
135
+ }
136
+ const span = held.span;
137
+ modelSpans.delete(sessionLlmKey(sessionKey, runId));
138
+ const ev = asRecord(event) ?? {};
139
+ const usage = asRecord(ev.usage);
140
+ // Token field naming varies by provider/wrapper; try every known spelling.
141
+ const inputTokens = firstNumber(usage?.input_tokens, usage?.prompt_tokens, usage?.promptTokens, usage?.input);
142
+ const outputTokens = firstNumber(usage?.output_tokens, usage?.completion_tokens, usage?.completionTokens, usage?.output);
143
+ setDefinedAttributes(span, {
144
+ [GEN_AI.RESPONSE_MODEL]: nonEmptyString(ev.model),
145
+ [GEN_AI.RESPONSE_FINISH_REASONS]: toFinishReasons(ev.finishReason ?? ev.stopReason),
146
+ [GEN_AI.USAGE_INPUT_TOKENS]: inputTokens,
147
+ [GEN_AI.USAGE_OUTPUT_TOKENS]: outputTokens,
148
+ });
149
+ const error = ev.error;
150
+ const errored = error !== undefined && error !== null;
151
+ const dims = { provider: held.provider, model: held.model };
152
+ recordTokenUsage(dims, { input: inputTokens, output: outputTokens });
153
+ recordOperationDuration(elapsedSeconds(held.startMs), {
154
+ ...dims,
155
+ errorType: errored ? errorTypeOf(error) : undefined,
156
+ });
157
+ const outputMessages = buildOutputMessages(ev);
158
+ void (async () => {
159
+ try {
160
+ if (held.pending)
161
+ await held.pending;
162
+ await setGenAiContentAttribute(span, GEN_AI.OUTPUT_MESSAGES, outputMessages);
163
+ if (errored)
164
+ recordSpanError(span, error);
165
+ }
166
+ finally {
167
+ try {
168
+ span.end();
169
+ }
170
+ catch {
171
+ /* best effort */
172
+ }
173
+ }
174
+ })();
175
+ }
176
+ catch (err) {
177
+ logger.warn("llm_output handler failed", { err: errMsg(err) });
178
+ }
179
+ });
180
+ // ─── Tool (`execute_tool` span) ────────────────────────────────────────────
181
+ api.on("before_tool_call", (event, toolCtx) => {
182
+ try {
183
+ const identity = readIdentity(toolCtx);
184
+ const resolved = resolveToolSession(toolCtx);
185
+ if (!resolved) {
186
+ logger.debug("before_tool_call session unresolved (no llm_input seen yet); skipping");
187
+ return;
188
+ }
189
+ const ev = asRecord(event);
190
+ const toolName = nonEmptyString(ev?.toolName) ?? nonEmptyString(ev?.name) ?? "unknown";
191
+ const toolCallId = nonEmptyString(ev?.toolCallId) ??
192
+ nonEmptyString(asRecord(toolCtx)?.toolCallId) ??
193
+ null;
194
+ const key = toolKey(resolved.sessionKey, resolved.runId, toolCallId, toolName, ++toolSeq);
195
+ const span = tracer.startSpan(`execute_tool ${toolName}`, { kind: SpanKind.INTERNAL }, parentContextForModel(resolved.sessionKey, resolved.runId));
196
+ const held = {
197
+ span,
198
+ sessionKey: resolved.sessionKey,
199
+ runId: resolved.runId,
200
+ startMs: Date.now(),
201
+ toolName,
202
+ };
203
+ toolSpans.set(key, held);
204
+ setDefinedAttributes(span, {
205
+ [GEN_AI.OPERATION_NAME]: "execute_tool",
206
+ [GEN_AI.TOOL_NAME]: toolName,
207
+ [GEN_AI.TOOL_CALL_ID]: toolCallId ?? undefined,
208
+ ...identityAttributes(identity),
209
+ });
210
+ // Args stamping is async; the finalize (after_tool_call) awaits this so a fast
211
+ // tool doesn't end the span before the args land.
212
+ held.pending = setGenAiContentAttribute(span, GEN_AI.TOOL_CALL_ARGUMENTS, ev?.params ?? ev?.input);
213
+ }
214
+ catch (err) {
215
+ logger.warn("before_tool_call handler failed", { err: errMsg(err) });
216
+ }
217
+ });
218
+ api.on("after_tool_call", (event, toolCtx) => {
219
+ try {
220
+ const resolved = resolveToolSession(toolCtx);
221
+ if (!resolved) {
222
+ logger.debug("after_tool_call session unresolved; skipping");
223
+ return;
224
+ }
225
+ const ev = asRecord(event);
226
+ const toolName = nonEmptyString(ev?.toolName) ?? nonEmptyString(ev?.name) ?? "unknown";
227
+ const toolCallId = nonEmptyString(ev?.toolCallId) ??
228
+ nonEmptyString(asRecord(toolCtx)?.toolCallId) ??
229
+ null;
230
+ const foundKey = findToolKey(toolSpans, resolved.sessionKey, resolved.runId, toolCallId, toolName);
231
+ if (!foundKey) {
232
+ logger.debug("after_tool_call: no open tool span", { toolName, toolCallId });
233
+ return;
234
+ }
235
+ const held = toolSpans.get(foundKey);
236
+ const span = held.span;
237
+ toolSpans.delete(foundKey);
238
+ const error = ev?.error;
239
+ const errored = error !== undefined && error !== null;
240
+ const result = ev?.result;
241
+ recordExecuteToolDuration(elapsedSeconds(held.startMs), {
242
+ toolName: held.toolName,
243
+ errorType: errored ? errorTypeOf(error) : undefined,
244
+ });
245
+ void (async () => {
246
+ try {
247
+ if (held.pending)
248
+ await held.pending;
249
+ if (errored) {
250
+ recordSpanError(span, error);
251
+ }
252
+ else {
253
+ await setGenAiContentAttribute(span, GEN_AI.TOOL_CALL_RESULT, result);
254
+ }
255
+ }
256
+ finally {
257
+ try {
258
+ span.end();
259
+ }
260
+ catch {
261
+ /* best effort */
262
+ }
263
+ }
264
+ })();
265
+ }
266
+ catch (err) {
267
+ logger.warn("after_tool_call handler failed", { err: errMsg(err) });
268
+ }
269
+ });
270
+ // ─── Subagent (`invoke_agent` span, four-hook lifecycle) ───────────────────
271
+ api.on("subagent_spawning", (event, subagentCtx) => {
272
+ try {
273
+ const identity = readIdentity(subagentCtx);
274
+ const ev = asRecord(event);
275
+ const ctxObj = asRecord(subagentCtx);
276
+ const hostSessionKey = nonEmptyString(ctxObj?.requesterSessionKey) ??
277
+ nonEmptyString(ctxObj?.sessionKey) ??
278
+ "";
279
+ const hostRunId = nonEmptyString(ctxObj?.runId) ?? nonEmptyString(ctxObj?.requesterRunId) ?? "";
280
+ const childSessionKey = nonEmptyString(ev?.childSessionKey) ?? nonEmptyString(ctxObj?.childSessionKey);
281
+ if (!childSessionKey) {
282
+ logger.warn("subagent_spawning missing childSessionKey; skipping span");
283
+ return;
284
+ }
285
+ const prior = subagentSpans.get(childSessionKey);
286
+ if (prior)
287
+ endSpan(prior.span);
288
+ const agentName = nonEmptyString(ev?.label) ?? nonEmptyString(ev?.agentId) ?? "unknown";
289
+ const span = tracer.startSpan(`invoke_agent ${agentName}`, { kind: SpanKind.INTERNAL }, hostSessionKey && hostRunId
290
+ ? parentContextForModel(hostSessionKey, hostRunId)
291
+ : otelContext.active());
292
+ // sessionKey/runId carry the HOST run so the agent_end sweep can reach this span.
293
+ subagentSpans.set(childSessionKey, {
294
+ span,
295
+ sessionKey: hostSessionKey,
296
+ runId: hostRunId,
297
+ startMs: Date.now(),
298
+ agentName,
299
+ });
300
+ setDefinedAttributes(span, {
301
+ [GEN_AI.OPERATION_NAME]: "invoke_agent",
302
+ [GEN_AI.AGENT_NAME]: agentName,
303
+ "senpi.subagent.mode": nonEmptyString(ev?.mode),
304
+ "senpi.subagent.requester": nonEmptyString(ev?.requester),
305
+ "senpi.subagent.thread_requested": typeof ev?.threadRequested === "boolean" ? ev.threadRequested : undefined,
306
+ ...identityAttributes(identity),
307
+ });
308
+ }
309
+ catch (err) {
310
+ logger.warn("subagent_spawning handler failed", { err: errMsg(err) });
311
+ }
312
+ });
313
+ api.on("subagent_spawned", (event, subagentCtx) => {
314
+ try {
315
+ const ev = asRecord(event);
316
+ const ctxObj = asRecord(subagentCtx);
317
+ const childSessionKey = nonEmptyString(ev?.childSessionKey) ?? nonEmptyString(ctxObj?.childSessionKey);
318
+ if (!childSessionKey)
319
+ return;
320
+ const held = subagentSpans.get(childSessionKey);
321
+ if (!held)
322
+ return;
323
+ const span = held.span;
324
+ setDefinedAttributes(span, {
325
+ "senpi.subagent.run_id": nonEmptyString(ev?.runId) ?? nonEmptyString(ctxObj?.runId),
326
+ "senpi.subagent.mode": nonEmptyString(ev?.mode),
327
+ "senpi.subagent.thread_requested": typeof ev?.threadRequested === "boolean" ? ev.threadRequested : undefined,
328
+ });
329
+ }
330
+ catch (err) {
331
+ logger.warn("subagent_spawned handler failed", { err: errMsg(err) });
332
+ }
333
+ });
334
+ api.on("subagent_delivery_target", (event, subagentCtx) => {
335
+ try {
336
+ const ev = asRecord(event);
337
+ const ctxObj = asRecord(subagentCtx);
338
+ const childSessionKey = nonEmptyString(ev?.childSessionKey) ?? nonEmptyString(ctxObj?.childSessionKey);
339
+ if (!childSessionKey)
340
+ return;
341
+ const held = subagentSpans.get(childSessionKey);
342
+ if (!held)
343
+ return;
344
+ const span = held.span;
345
+ const origin = asRecord(ev?.requesterOrigin) ?? {};
346
+ setDefinedAttributes(span, {
347
+ "senpi.subagent.delivery.channel": nonEmptyString(origin.channel),
348
+ "senpi.subagent.delivery.account_id": nonEmptyString(origin.accountId),
349
+ "senpi.subagent.delivery.to": nonEmptyString(origin.to),
350
+ "senpi.subagent.delivery.child_run_id": nonEmptyString(ev?.childRunId),
351
+ "senpi.subagent.delivery.spawn_mode": nonEmptyString(ev?.spawnMode),
352
+ });
353
+ }
354
+ catch (err) {
355
+ logger.warn("subagent_delivery_target handler failed", { err: errMsg(err) });
356
+ }
357
+ });
358
+ api.on("subagent_ended", (event, subagentCtx) => {
359
+ try {
360
+ const ev = asRecord(event);
361
+ const ctxObj = asRecord(subagentCtx);
362
+ const childSessionKey = nonEmptyString(ev?.targetSessionKey) ??
363
+ nonEmptyString(ctxObj?.childSessionKey) ??
364
+ nonEmptyString(ev?.childSessionKey);
365
+ if (!childSessionKey)
366
+ return;
367
+ const held = subagentSpans.get(childSessionKey);
368
+ if (!held)
369
+ return;
370
+ const span = held.span;
371
+ subagentSpans.delete(childSessionKey);
372
+ const error = ev?.error;
373
+ const errored = error !== undefined && error !== null;
374
+ recordInvokeAgentDuration(elapsedSeconds(held.startMs), {
375
+ agentName: held.agentName,
376
+ errorType: errored ? errorTypeOf(error) : undefined,
377
+ });
378
+ if (errored) {
379
+ recordSpanError(span, error);
380
+ }
381
+ else {
382
+ setDefinedAttributes(span, {
383
+ "senpi.subagent.outcome": nonEmptyString(ev?.outcome),
384
+ "senpi.subagent.reason": nonEmptyString(ev?.reason),
385
+ });
386
+ }
387
+ try {
388
+ span.end();
389
+ }
390
+ catch {
391
+ /* best effort */
392
+ }
393
+ }
394
+ catch (err) {
395
+ logger.warn("subagent_ended handler failed", { err: errMsg(err) });
396
+ }
397
+ });
398
+ // ─── Agent end (orphan sweep) ──────────────────────────────────────────────
399
+ api.on("agent_end", (event, agentCtx) => {
400
+ try {
401
+ const sessionKey = readSessionKey(agentCtx, event);
402
+ const runId = readRunId(agentCtx, event);
403
+ if (!sessionKey || !runId) {
404
+ logger.warn("agent_end missing sessionKey/runId; skipping sweep");
405
+ return;
406
+ }
407
+ const ev = asRecord(event);
408
+ const outcomeError = ev?.error;
409
+ // End any span still open under this (session, run): the model span, its tool
410
+ // children, and any subagents it hosted. Matching is by the stored host
411
+ // session/run, so nothing leaks past the run's end (incl. subagents, which have
412
+ // no other guaranteed terminator).
413
+ const llmKey = sessionLlmKey(sessionKey, runId);
414
+ const model = modelSpans.get(llmKey);
415
+ if (model) {
416
+ modelSpans.delete(llmKey);
417
+ const errored = outcomeError !== undefined && outcomeError !== null;
418
+ recordOperationDuration(elapsedSeconds(model.startMs), {
419
+ provider: model.provider,
420
+ model: model.model,
421
+ errorType: errored ? errorTypeOf(outcomeError) : undefined,
422
+ });
423
+ if (errored)
424
+ recordSpanError(model.span, outcomeError);
425
+ endSpan(model.span);
426
+ }
427
+ for (const [k, held] of toolSpans) {
428
+ if (held.sessionKey === sessionKey && held.runId === runId) {
429
+ toolSpans.delete(k);
430
+ endSpan(held.span);
431
+ }
432
+ }
433
+ for (const [k, held] of subagentSpans) {
434
+ if (held.sessionKey === sessionKey && held.runId === runId) {
435
+ subagentSpans.delete(k);
436
+ endSpan(held.span);
437
+ }
438
+ }
439
+ }
440
+ catch (err) {
441
+ logger.warn("agent_end handler failed", { err: errMsg(err) });
442
+ }
443
+ });
444
+ }
445
+ // ─── Span key helpers ───────────────────────────────────────────────────────
446
+ const SEP = " ";
447
+ function sessionLlmKey(sessionKey, runId) {
448
+ return `${sessionKey}${SEP}${runId}${SEP}llm`;
449
+ }
450
+ function toolKey(sessionKey, runId, toolCallId, toolName, seq) {
451
+ return toolCallId
452
+ ? `${sessionKey}${SEP}${runId}${SEP}toolcall${SEP}${toolCallId}`
453
+ : `${sessionKey}${SEP}${runId}${SEP}tool${SEP}${toolName}${SEP}${seq}`;
454
+ }
455
+ /** Find the open tool span key within one (session, run): by toolCallId first, else by tool name. */
456
+ function findToolKey(toolSpans, sessionKey, runId, toolCallId, toolName) {
457
+ const prefix = `${sessionKey}${SEP}${runId}${SEP}`;
458
+ if (toolCallId) {
459
+ const suffix = `${SEP}toolcall${SEP}${toolCallId}`;
460
+ for (const key of toolSpans.keys()) {
461
+ if (key.startsWith(prefix) && key.endsWith(suffix))
462
+ return key;
463
+ }
464
+ }
465
+ const namePart = `${SEP}tool${SEP}${toolName}${SEP}`;
466
+ for (const key of toolSpans.keys()) {
467
+ if (key.startsWith(prefix) && key.includes(namePart))
468
+ return key;
469
+ }
470
+ return undefined;
471
+ }
472
+ function endSpan(span) {
473
+ try {
474
+ span.end();
475
+ }
476
+ catch {
477
+ /* best effort */
478
+ }
479
+ }
480
+ // ─── Identity + trace correlation ─────────────────────────────────────────────
481
+ const ADDRESS_RE = /^0x[a-f0-9]{40}$/i;
482
+ const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
483
+ /** Cap on a free-form header value stamped as an attribute (defence vs oversized header). */
484
+ const MAX_HEADER_ATTR_CHARS = 256;
485
+ function clampHeader(v) {
486
+ return v.length > MAX_HEADER_ATTR_CHARS ? v.slice(0, MAX_HEADER_ATTR_CHARS) : v;
487
+ }
488
+ /**
489
+ * Map the senpi identity headers to `senpi.*` span attributes (keys match the on-site
490
+ * identity bag; the headers carry the runtime id as `senpi.runtime.id`, vs on-site
491
+ * `senpi.runtime`). Headers are caller-influenceable, so join keys are validated — a
492
+ * malformed address / correlation id is dropped, not stamped as garbage.
493
+ */
494
+ function identityAttributes(identity) {
495
+ const attrs = {};
496
+ if (identity.address) {
497
+ const lowered = identity.address.toLowerCase();
498
+ if (ADDRESS_RE.test(lowered))
499
+ attrs["senpi.strategy.address"] = lowered;
500
+ }
501
+ if (identity.recipeName)
502
+ attrs["senpi.recipe"] = clampHeader(identity.recipeName);
503
+ if (identity.runtimeVersion)
504
+ attrs["senpi.recipe.version"] = clampHeader(identity.runtimeVersion);
505
+ if (identity.runtimeId)
506
+ attrs["senpi.runtime.id"] = clampHeader(identity.runtimeId);
507
+ // Fallback join key to the trading trace when traceparent didn't thread through.
508
+ if (identity.runId && UUID_RE.test(identity.runId)) {
509
+ attrs["senpi.run.id"] = identity.runId;
510
+ }
511
+ return attrs;
512
+ }
513
+ function readIdentity(agentCtx) {
514
+ const headers = readHeaders(agentCtx);
515
+ return {
516
+ runId: headers[HEADER_CORRELATION_ID],
517
+ address: headers[HEADER_ADDRESS],
518
+ recipeName: headers[HEADER_RECIPE_NAME],
519
+ runtimeId: headers[HEADER_RUNTIME_ID],
520
+ runtimeVersion: headers[HEADER_RUNTIME_VERSION],
521
+ };
522
+ }
523
+ /** Extract a W3C traceparent from the request headers → a parent Context (else active). */
524
+ function parentContextFromHeaders(agentCtx) {
525
+ try {
526
+ const headers = readHeaders(agentCtx);
527
+ if (headers.traceparent === undefined)
528
+ return otelContext.active();
529
+ return propagation.extract(otelContext.active(), headers);
530
+ }
531
+ catch {
532
+ return otelContext.active();
533
+ }
534
+ }
535
+ // ─── Field readers ────────────────────────────────────────────────────────────
536
+ function asRecord(v) {
537
+ if (v && typeof v === "object" && !Array.isArray(v)) {
538
+ return v;
539
+ }
540
+ return undefined;
541
+ }
542
+ function nonEmptyString(v) {
543
+ return typeof v === "string" && v.length > 0 ? v : undefined;
544
+ }
545
+ /** Pull request headers out of agentCtx; several common locations are checked. */
546
+ function readHeaders(agentCtx) {
547
+ const ctxObj = asRecord(agentCtx);
548
+ if (!ctxObj)
549
+ return {};
550
+ const candidates = [
551
+ asRecord(ctxObj.headers),
552
+ asRecord(asRecord(ctxObj.request)?.headers),
553
+ asRecord(ctxObj.requestHeaders),
554
+ asRecord(asRecord(ctxObj.meta)?.headers),
555
+ ];
556
+ const out = {};
557
+ for (const candidate of candidates) {
558
+ if (!candidate)
559
+ continue;
560
+ for (const [k, v] of Object.entries(candidate)) {
561
+ const lk = k.toLowerCase();
562
+ if (typeof v === "string" && v.length > 0 && out[lk] === undefined) {
563
+ out[lk] = v;
564
+ }
565
+ else if (Array.isArray(v) && v.length > 0 && typeof v[0] === "string") {
566
+ out[lk] = v[0];
567
+ }
568
+ }
569
+ }
570
+ return out;
571
+ }
572
+ function readSessionKey(ctx, event) {
573
+ return (nonEmptyString(asRecord(ctx)?.sessionKey) ??
574
+ nonEmptyString(asRecord(ctx)?.sessionId) ??
575
+ nonEmptyString(asRecord(event)?.sessionKey) ??
576
+ nonEmptyString(asRecord(event)?.sessionId));
577
+ }
578
+ function readRunId(ctx, event) {
579
+ return nonEmptyString(asRecord(ctx)?.runId) ?? nonEmptyString(asRecord(event)?.runId);
580
+ }
581
+ // ─── gen_ai content builders ──────────────────────────────────────────────────
582
+ /** System instructions as `[{type:"text", content}]` per the gen_ai shape. */
583
+ function buildSystemInstructions(ev) {
584
+ const system = ev.systemPrompt ?? ev.system;
585
+ if (typeof system !== "string" || system.length === 0)
586
+ return undefined;
587
+ return [{ type: "text", content: system }];
588
+ }
589
+ /** Input messages: the history (or messages), with any standalone `prompt` as a user turn. */
590
+ function buildInputMessages(ev) {
591
+ const history = ev.historyMessages ?? ev.messages;
592
+ const messages = Array.isArray(history) ? [...history] : history ? [history] : [];
593
+ if (typeof ev.prompt === "string" && ev.prompt.length > 0) {
594
+ messages.push({ role: "user", content: ev.prompt });
595
+ }
596
+ return normalizeGenAiMessages(messages, "user");
597
+ }
598
+ /** Output messages: the assistant text(s) / content, with the finish reason on the message. */
599
+ function buildOutputMessages(ev) {
600
+ const content = ev.assistantTexts ?? ev.lastAssistant ?? ev.content;
601
+ if (content === undefined || content === null)
602
+ return undefined;
603
+ const finish = ev.finishReason ?? ev.stopReason;
604
+ return normalizeGenAiMessages([{ role: "assistant", content, ...(typeof finish === "string" ? { finish_reason: finish } : {}) }], "assistant");
605
+ }
606
+ function errMsg(err) {
607
+ return err instanceof Error ? err.message : String(err);
608
+ }
609
+ //# sourceMappingURL=span-hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"span-hooks.js","sourceRoot":"","sources":["../../../src/telemetry/spans/span-hooks.ts"],"names":[],"mappings":"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"}
@@ -11,7 +11,7 @@
11
11
  * async-context bag the logger reads at emit time (see `trackingContext.identityAttributes`).
12
12
  */
13
13
  import type { Attributes } from "@opentelemetry/api";
14
- import type { IdentityEnvelope } from "../recording/identity.js";
14
+ import type { IdentityEnvelope } from "../telemetry/identity.js";
15
15
  /**
16
16
  * Map the runtime {@link IdentityEnvelope} to its `senpi.*` trace attributes. Optional
17
17
  * envelope fields are omitted when unset rather than emitted as empty/undefined, so a