@substrate-ai/core 0.19.54

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 (486) hide show
  1. package/README.md +55 -0
  2. package/dist/__tests__/adapter.test.d.ts +12 -0
  3. package/dist/__tests__/adapter.test.d.ts.map +1 -0
  4. package/dist/__tests__/adapter.test.js +259 -0
  5. package/dist/__tests__/adapter.test.js.map +1 -0
  6. package/dist/__tests__/event-bus.test.d.ts +14 -0
  7. package/dist/__tests__/event-bus.test.d.ts.map +1 -0
  8. package/dist/__tests__/event-bus.test.js +199 -0
  9. package/dist/__tests__/event-bus.test.js.map +1 -0
  10. package/dist/__tests__/output-quality.test.d.ts +8 -0
  11. package/dist/__tests__/output-quality.test.d.ts.map +1 -0
  12. package/dist/__tests__/output-quality.test.js +166 -0
  13. package/dist/__tests__/output-quality.test.js.map +1 -0
  14. package/dist/__tests__/schema-suffix.test.d.ts +9 -0
  15. package/dist/__tests__/schema-suffix.test.d.ts.map +1 -0
  16. package/dist/__tests__/schema-suffix.test.js +126 -0
  17. package/dist/__tests__/schema-suffix.test.js.map +1 -0
  18. package/dist/__tests__/yaml-parser.test.d.ts +18 -0
  19. package/dist/__tests__/yaml-parser.test.d.ts.map +1 -0
  20. package/dist/__tests__/yaml-parser.test.js +475 -0
  21. package/dist/__tests__/yaml-parser.test.js.map +1 -0
  22. package/dist/__type-checks__.d.ts +11 -0
  23. package/dist/__type-checks__.d.ts.map +1 -0
  24. package/dist/__type-checks__.js +19 -0
  25. package/dist/__type-checks__.js.map +1 -0
  26. package/dist/adapters/__tests__/adapter-output-normalizer.test.d.ts +12 -0
  27. package/dist/adapters/__tests__/adapter-output-normalizer.test.d.ts.map +1 -0
  28. package/dist/adapters/__tests__/adapter-output-normalizer.test.js +193 -0
  29. package/dist/adapters/__tests__/adapter-output-normalizer.test.js.map +1 -0
  30. package/dist/adapters/adapter-format-error.d.ts +35 -0
  31. package/dist/adapters/adapter-format-error.d.ts.map +1 -0
  32. package/dist/adapters/adapter-format-error.js +38 -0
  33. package/dist/adapters/adapter-format-error.js.map +1 -0
  34. package/dist/adapters/adapter-output-normalizer.d.ts +50 -0
  35. package/dist/adapters/adapter-output-normalizer.d.ts.map +1 -0
  36. package/dist/adapters/adapter-output-normalizer.js +233 -0
  37. package/dist/adapters/adapter-output-normalizer.js.map +1 -0
  38. package/dist/adapters/adapter-registry.d.ts +50 -0
  39. package/dist/adapters/adapter-registry.d.ts.map +1 -0
  40. package/dist/adapters/adapter-registry.js +101 -0
  41. package/dist/adapters/adapter-registry.js.map +1 -0
  42. package/dist/adapters/claude-adapter.d.ts +59 -0
  43. package/dist/adapters/claude-adapter.d.ts.map +1 -0
  44. package/dist/adapters/claude-adapter.js +367 -0
  45. package/dist/adapters/claude-adapter.js.map +1 -0
  46. package/dist/adapters/codex-adapter.d.ts +64 -0
  47. package/dist/adapters/codex-adapter.d.ts.map +1 -0
  48. package/dist/adapters/codex-adapter.js +263 -0
  49. package/dist/adapters/codex-adapter.js.map +1 -0
  50. package/dist/adapters/gemini-adapter.d.ts +57 -0
  51. package/dist/adapters/gemini-adapter.d.ts.map +1 -0
  52. package/dist/adapters/gemini-adapter.js +311 -0
  53. package/dist/adapters/gemini-adapter.js.map +1 -0
  54. package/dist/adapters/index.d.ts +10 -0
  55. package/dist/adapters/index.d.ts.map +1 -0
  56. package/dist/adapters/index.js +14 -0
  57. package/dist/adapters/index.js.map +1 -0
  58. package/dist/adapters/schemas.d.ts +137 -0
  59. package/dist/adapters/schemas.d.ts.map +1 -0
  60. package/dist/adapters/schemas.js +140 -0
  61. package/dist/adapters/schemas.js.map +1 -0
  62. package/dist/adapters/types.d.ts +245 -0
  63. package/dist/adapters/types.d.ts.map +1 -0
  64. package/dist/adapters/types.js +6 -0
  65. package/dist/adapters/types.js.map +1 -0
  66. package/dist/adapters/worker-adapter.d.ts +188 -0
  67. package/dist/adapters/worker-adapter.d.ts.map +1 -0
  68. package/dist/adapters/worker-adapter.js +19 -0
  69. package/dist/adapters/worker-adapter.js.map +1 -0
  70. package/dist/budget/budget-tracker.d.ts +22 -0
  71. package/dist/budget/budget-tracker.d.ts.map +1 -0
  72. package/dist/budget/budget-tracker.js +39 -0
  73. package/dist/budget/budget-tracker.js.map +1 -0
  74. package/dist/budget/index.d.ts +6 -0
  75. package/dist/budget/index.d.ts.map +1 -0
  76. package/dist/budget/index.js +5 -0
  77. package/dist/budget/index.js.map +1 -0
  78. package/dist/config/config-migrator.d.ts +58 -0
  79. package/dist/config/config-migrator.d.ts.map +1 -0
  80. package/dist/config/config-migrator.js +158 -0
  81. package/dist/config/config-migrator.js.map +1 -0
  82. package/dist/config/config-system-impl.d.ts +63 -0
  83. package/dist/config/config-system-impl.d.ts.map +1 -0
  84. package/dist/config/config-system-impl.js +364 -0
  85. package/dist/config/config-system-impl.js.map +1 -0
  86. package/dist/config/config-watcher.d.ts +59 -0
  87. package/dist/config/config-watcher.d.ts.map +1 -0
  88. package/dist/config/config-watcher.js +137 -0
  89. package/dist/config/config-watcher.js.map +1 -0
  90. package/dist/config/defaults.d.ts +13 -0
  91. package/dist/config/defaults.d.ts.map +1 -0
  92. package/dist/config/defaults.js +62 -0
  93. package/dist/config/defaults.js.map +1 -0
  94. package/dist/config/errors.d.ts +25 -0
  95. package/dist/config/errors.d.ts.map +1 -0
  96. package/dist/config/errors.js +49 -0
  97. package/dist/config/errors.js.map +1 -0
  98. package/dist/config/index.d.ts +19 -0
  99. package/dist/config/index.d.ts.map +1 -0
  100. package/dist/config/index.js +39 -0
  101. package/dist/config/index.js.map +1 -0
  102. package/dist/config/types.d.ts +456 -0
  103. package/dist/config/types.d.ts.map +1 -0
  104. package/dist/config/types.js +174 -0
  105. package/dist/config/types.js.map +1 -0
  106. package/dist/config/version-utils.d.ts +39 -0
  107. package/dist/config/version-utils.d.ts.map +1 -0
  108. package/dist/config/version-utils.js +66 -0
  109. package/dist/config/version-utils.js.map +1 -0
  110. package/dist/context/index.d.ts +2 -0
  111. package/dist/context/index.d.ts.map +1 -0
  112. package/dist/context/index.js +2 -0
  113. package/dist/context/index.js.map +1 -0
  114. package/dist/context/types.d.ts +113 -0
  115. package/dist/context/types.d.ts.map +1 -0
  116. package/dist/context/types.js +59 -0
  117. package/dist/context/types.js.map +1 -0
  118. package/dist/cost-tracker/cost-tracker-impl.d.ts +51 -0
  119. package/dist/cost-tracker/cost-tracker-impl.d.ts.map +1 -0
  120. package/dist/cost-tracker/cost-tracker-impl.js +85 -0
  121. package/dist/cost-tracker/cost-tracker-impl.js.map +1 -0
  122. package/dist/cost-tracker/cost-tracker-subscriber.d.ts +31 -0
  123. package/dist/cost-tracker/cost-tracker-subscriber.d.ts.map +1 -0
  124. package/dist/cost-tracker/cost-tracker-subscriber.js +116 -0
  125. package/dist/cost-tracker/cost-tracker-subscriber.js.map +1 -0
  126. package/dist/cost-tracker/index.d.ts +11 -0
  127. package/dist/cost-tracker/index.d.ts.map +1 -0
  128. package/dist/cost-tracker/index.js +7 -0
  129. package/dist/cost-tracker/index.js.map +1 -0
  130. package/dist/cost-tracker/token-rates.d.ts +25 -0
  131. package/dist/cost-tracker/token-rates.d.ts.map +1 -0
  132. package/dist/cost-tracker/token-rates.js +99 -0
  133. package/dist/cost-tracker/token-rates.js.map +1 -0
  134. package/dist/cost-tracker/types.d.ts +6 -0
  135. package/dist/cost-tracker/types.d.ts.map +1 -0
  136. package/dist/cost-tracker/types.js +2 -0
  137. package/dist/cost-tracker/types.js.map +1 -0
  138. package/dist/dispatch/dispatcher-impl.d.ts +92 -0
  139. package/dist/dispatch/dispatcher-impl.d.ts.map +1 -0
  140. package/dist/dispatch/dispatcher-impl.js +847 -0
  141. package/dist/dispatch/dispatcher-impl.js.map +1 -0
  142. package/dist/dispatch/index.d.ts +15 -0
  143. package/dist/dispatch/index.d.ts.map +1 -0
  144. package/dist/dispatch/index.js +14 -0
  145. package/dist/dispatch/index.js.map +1 -0
  146. package/dist/dispatch/interface-change-detector.d.ts +46 -0
  147. package/dist/dispatch/interface-change-detector.d.ts.map +1 -0
  148. package/dist/dispatch/interface-change-detector.js +135 -0
  149. package/dist/dispatch/interface-change-detector.js.map +1 -0
  150. package/dist/dispatch/output-quality.d.ts +43 -0
  151. package/dist/dispatch/output-quality.d.ts.map +1 -0
  152. package/dist/dispatch/output-quality.js +148 -0
  153. package/dist/dispatch/output-quality.js.map +1 -0
  154. package/dist/dispatch/types.d.ts +271 -0
  155. package/dist/dispatch/types.d.ts.map +1 -0
  156. package/dist/dispatch/types.js +76 -0
  157. package/dist/dispatch/types.js.map +1 -0
  158. package/dist/dispatch/yaml-parser.d.ts +40 -0
  159. package/dist/dispatch/yaml-parser.d.ts.map +1 -0
  160. package/dist/dispatch/yaml-parser.js +323 -0
  161. package/dist/dispatch/yaml-parser.js.map +1 -0
  162. package/dist/events/core-events.d.ts +288 -0
  163. package/dist/events/core-events.d.ts.map +1 -0
  164. package/dist/events/core-events.js +10 -0
  165. package/dist/events/core-events.js.map +1 -0
  166. package/dist/events/event-bus.d.ts +55 -0
  167. package/dist/events/event-bus.d.ts.map +1 -0
  168. package/dist/events/event-bus.js +52 -0
  169. package/dist/events/event-bus.js.map +1 -0
  170. package/dist/events/index.d.ts +9 -0
  171. package/dist/events/index.d.ts.map +1 -0
  172. package/dist/events/index.js +6 -0
  173. package/dist/events/index.js.map +1 -0
  174. package/dist/events/types.d.ts +21 -0
  175. package/dist/events/types.d.ts.map +1 -0
  176. package/dist/events/types.js +8 -0
  177. package/dist/events/types.js.map +1 -0
  178. package/dist/git/git-manager.d.ts +31 -0
  179. package/dist/git/git-manager.d.ts.map +1 -0
  180. package/dist/git/git-manager.js +46 -0
  181. package/dist/git/git-manager.js.map +1 -0
  182. package/dist/git/git-utils.d.ts +166 -0
  183. package/dist/git/git-utils.d.ts.map +1 -0
  184. package/dist/git/git-utils.js +347 -0
  185. package/dist/git/git-utils.js.map +1 -0
  186. package/dist/git/git-worktree-manager-impl.d.ts +58 -0
  187. package/dist/git/git-worktree-manager-impl.d.ts.map +1 -0
  188. package/dist/git/git-worktree-manager-impl.js +336 -0
  189. package/dist/git/git-worktree-manager-impl.js.map +1 -0
  190. package/dist/git/git-worktree-manager.d.ts +122 -0
  191. package/dist/git/git-worktree-manager.d.ts.map +1 -0
  192. package/dist/git/git-worktree-manager.js +14 -0
  193. package/dist/git/git-worktree-manager.js.map +1 -0
  194. package/dist/git/index.d.ts +11 -0
  195. package/dist/git/index.d.ts.map +1 -0
  196. package/dist/git/index.js +8 -0
  197. package/dist/git/index.js.map +1 -0
  198. package/dist/index.d.ts +33 -0
  199. package/dist/index.d.ts.map +1 -0
  200. package/dist/index.js +47 -0
  201. package/dist/index.js.map +1 -0
  202. package/dist/llm/client.d.ts +42 -0
  203. package/dist/llm/client.d.ts.map +1 -0
  204. package/dist/llm/client.js +27 -0
  205. package/dist/llm/client.js.map +1 -0
  206. package/dist/monitor/index.d.ts +15 -0
  207. package/dist/monitor/index.d.ts.map +1 -0
  208. package/dist/monitor/index.js +9 -0
  209. package/dist/monitor/index.js.map +1 -0
  210. package/dist/monitor/monitor-agent-impl.d.ts +56 -0
  211. package/dist/monitor/monitor-agent-impl.d.ts.map +1 -0
  212. package/dist/monitor/monitor-agent-impl.js +178 -0
  213. package/dist/monitor/monitor-agent-impl.js.map +1 -0
  214. package/dist/monitor/monitor-agent.d.ts +36 -0
  215. package/dist/monitor/monitor-agent.d.ts.map +1 -0
  216. package/dist/monitor/monitor-agent.js +6 -0
  217. package/dist/monitor/monitor-agent.js.map +1 -0
  218. package/dist/monitor/performance-aggregates.d.ts +41 -0
  219. package/dist/monitor/performance-aggregates.d.ts.map +1 -0
  220. package/dist/monitor/performance-aggregates.js +6 -0
  221. package/dist/monitor/performance-aggregates.js.map +1 -0
  222. package/dist/monitor/recommendation-engine.d.ts +27 -0
  223. package/dist/monitor/recommendation-engine.d.ts.map +1 -0
  224. package/dist/monitor/recommendation-engine.js +140 -0
  225. package/dist/monitor/recommendation-engine.js.map +1 -0
  226. package/dist/monitor/recommendation-types.d.ts +30 -0
  227. package/dist/monitor/recommendation-types.d.ts.map +1 -0
  228. package/dist/monitor/recommendation-types.js +43 -0
  229. package/dist/monitor/recommendation-types.js.map +1 -0
  230. package/dist/monitor/report-generator.d.ts +48 -0
  231. package/dist/monitor/report-generator.d.ts.map +1 -0
  232. package/dist/monitor/report-generator.js +123 -0
  233. package/dist/monitor/report-generator.js.map +1 -0
  234. package/dist/monitor/task-type-classifier.d.ts +19 -0
  235. package/dist/monitor/task-type-classifier.d.ts.map +1 -0
  236. package/dist/monitor/task-type-classifier.js +68 -0
  237. package/dist/monitor/task-type-classifier.js.map +1 -0
  238. package/dist/persistence/adapter.d.ts +4 -0
  239. package/dist/persistence/adapter.d.ts.map +1 -0
  240. package/dist/persistence/adapter.js +56 -0
  241. package/dist/persistence/adapter.js.map +1 -0
  242. package/dist/persistence/cost-types.d.ts +87 -0
  243. package/dist/persistence/cost-types.d.ts.map +1 -0
  244. package/dist/persistence/cost-types.js +14 -0
  245. package/dist/persistence/cost-types.js.map +1 -0
  246. package/dist/persistence/dolt-adapter-transaction.test.d.ts +10 -0
  247. package/dist/persistence/dolt-adapter-transaction.test.d.ts.map +1 -0
  248. package/dist/persistence/dolt-adapter-transaction.test.js +359 -0
  249. package/dist/persistence/dolt-adapter-transaction.test.js.map +1 -0
  250. package/dist/persistence/dolt-adapter.d.ts +77 -0
  251. package/dist/persistence/dolt-adapter.d.ts.map +1 -0
  252. package/dist/persistence/dolt-adapter.js +98 -0
  253. package/dist/persistence/dolt-adapter.js.map +1 -0
  254. package/dist/persistence/dolt-client.d.ts +69 -0
  255. package/dist/persistence/dolt-client.d.ts.map +1 -0
  256. package/dist/persistence/dolt-client.js +278 -0
  257. package/dist/persistence/dolt-client.js.map +1 -0
  258. package/dist/persistence/dolt-errors.d.ts +10 -0
  259. package/dist/persistence/dolt-errors.d.ts.map +1 -0
  260. package/dist/persistence/dolt-errors.js +15 -0
  261. package/dist/persistence/dolt-errors.js.map +1 -0
  262. package/dist/persistence/dolt-init.d.ts +64 -0
  263. package/dist/persistence/dolt-init.d.ts.map +1 -0
  264. package/dist/persistence/dolt-init.js +233 -0
  265. package/dist/persistence/dolt-init.js.map +1 -0
  266. package/dist/persistence/index.d.ts +23 -0
  267. package/dist/persistence/index.d.ts.map +1 -0
  268. package/dist/persistence/index.js +23 -0
  269. package/dist/persistence/index.js.map +1 -0
  270. package/dist/persistence/memory-adapter.d.ts +156 -0
  271. package/dist/persistence/memory-adapter.d.ts.map +1 -0
  272. package/dist/persistence/memory-adapter.js +1167 -0
  273. package/dist/persistence/memory-adapter.js.map +1 -0
  274. package/dist/persistence/monitor-database.d.ts +113 -0
  275. package/dist/persistence/monitor-database.d.ts.map +1 -0
  276. package/dist/persistence/monitor-database.js +345 -0
  277. package/dist/persistence/monitor-database.js.map +1 -0
  278. package/dist/persistence/queries/amendments.d.ts +91 -0
  279. package/dist/persistence/queries/amendments.d.ts.map +1 -0
  280. package/dist/persistence/queries/amendments.js +185 -0
  281. package/dist/persistence/queries/amendments.js.map +1 -0
  282. package/dist/persistence/queries/cost.d.ts +130 -0
  283. package/dist/persistence/queries/cost.d.ts.map +1 -0
  284. package/dist/persistence/queries/cost.js +384 -0
  285. package/dist/persistence/queries/cost.js.map +1 -0
  286. package/dist/persistence/queries/decisions.d.ts +131 -0
  287. package/dist/persistence/queries/decisions.d.ts.map +1 -0
  288. package/dist/persistence/queries/decisions.js +339 -0
  289. package/dist/persistence/queries/decisions.js.map +1 -0
  290. package/dist/persistence/queries/metrics.d.ts +155 -0
  291. package/dist/persistence/queries/metrics.d.ts.map +1 -0
  292. package/dist/persistence/queries/metrics.js +237 -0
  293. package/dist/persistence/queries/metrics.js.map +1 -0
  294. package/dist/persistence/queries/retry-escalated.d.ts +35 -0
  295. package/dist/persistence/queries/retry-escalated.d.ts.map +1 -0
  296. package/dist/persistence/queries/retry-escalated.js +83 -0
  297. package/dist/persistence/queries/retry-escalated.js.map +1 -0
  298. package/dist/persistence/schema-version.d.ts +89 -0
  299. package/dist/persistence/schema-version.d.ts.map +1 -0
  300. package/dist/persistence/schema-version.js +67 -0
  301. package/dist/persistence/schema-version.js.map +1 -0
  302. package/dist/persistence/schema.d.ts +26 -0
  303. package/dist/persistence/schema.d.ts.map +1 -0
  304. package/dist/persistence/schema.js +509 -0
  305. package/dist/persistence/schema.js.map +1 -0
  306. package/dist/persistence/schemas/decisions.d.ts +176 -0
  307. package/dist/persistence/schemas/decisions.d.ts.map +1 -0
  308. package/dist/persistence/schemas/decisions.js +139 -0
  309. package/dist/persistence/schemas/decisions.js.map +1 -0
  310. package/dist/persistence/schemas/operational.d.ts +194 -0
  311. package/dist/persistence/schemas/operational.d.ts.map +1 -0
  312. package/dist/persistence/schemas/operational.js +197 -0
  313. package/dist/persistence/schemas/operational.js.map +1 -0
  314. package/dist/persistence/types.d.ts +98 -0
  315. package/dist/persistence/types.d.ts.map +1 -0
  316. package/dist/persistence/types.js +22 -0
  317. package/dist/persistence/types.js.map +1 -0
  318. package/dist/quality-gates/index.d.ts +2 -0
  319. package/dist/quality-gates/index.d.ts.map +1 -0
  320. package/dist/quality-gates/index.js +2 -0
  321. package/dist/quality-gates/index.js.map +1 -0
  322. package/dist/quality-gates/types.d.ts +106 -0
  323. package/dist/quality-gates/types.d.ts.map +1 -0
  324. package/dist/quality-gates/types.js +5 -0
  325. package/dist/quality-gates/types.js.map +1 -0
  326. package/dist/routing/index.d.ts +19 -0
  327. package/dist/routing/index.d.ts.map +1 -0
  328. package/dist/routing/index.js +32 -0
  329. package/dist/routing/index.js.map +1 -0
  330. package/dist/routing/model-routing-config.d.ts +75 -0
  331. package/dist/routing/model-routing-config.d.ts.map +1 -0
  332. package/dist/routing/model-routing-config.js +110 -0
  333. package/dist/routing/model-routing-config.js.map +1 -0
  334. package/dist/routing/model-routing-resolver.d.ts +48 -0
  335. package/dist/routing/model-routing-resolver.d.ts.map +1 -0
  336. package/dist/routing/model-routing-resolver.js +105 -0
  337. package/dist/routing/model-routing-resolver.js.map +1 -0
  338. package/dist/routing/model-tier.d.ts +21 -0
  339. package/dist/routing/model-tier.d.ts.map +1 -0
  340. package/dist/routing/model-tier.js +34 -0
  341. package/dist/routing/model-tier.js.map +1 -0
  342. package/dist/routing/provider-status.d.ts +99 -0
  343. package/dist/routing/provider-status.d.ts.map +1 -0
  344. package/dist/routing/provider-status.js +163 -0
  345. package/dist/routing/provider-status.js.map +1 -0
  346. package/dist/routing/routing-decision.d.ts +127 -0
  347. package/dist/routing/routing-decision.d.ts.map +1 -0
  348. package/dist/routing/routing-decision.js +111 -0
  349. package/dist/routing/routing-decision.js.map +1 -0
  350. package/dist/routing/routing-engine-impl.d.ts +132 -0
  351. package/dist/routing/routing-engine-impl.d.ts.map +1 -0
  352. package/dist/routing/routing-engine-impl.js +450 -0
  353. package/dist/routing/routing-engine-impl.js.map +1 -0
  354. package/dist/routing/routing-engine.d.ts +83 -0
  355. package/dist/routing/routing-engine.d.ts.map +1 -0
  356. package/dist/routing/routing-engine.js +24 -0
  357. package/dist/routing/routing-engine.js.map +1 -0
  358. package/dist/routing/routing-policy.d.ts +138 -0
  359. package/dist/routing/routing-policy.d.ts.map +1 -0
  360. package/dist/routing/routing-policy.js +159 -0
  361. package/dist/routing/routing-policy.js.map +1 -0
  362. package/dist/routing/routing-recommender.d.ts +60 -0
  363. package/dist/routing/routing-recommender.d.ts.map +1 -0
  364. package/dist/routing/routing-recommender.js +209 -0
  365. package/dist/routing/routing-recommender.js.map +1 -0
  366. package/dist/routing/routing-telemetry.d.ts +36 -0
  367. package/dist/routing/routing-telemetry.d.ts.map +1 -0
  368. package/dist/routing/routing-telemetry.js +39 -0
  369. package/dist/routing/routing-telemetry.js.map +1 -0
  370. package/dist/routing/routing-token-accumulator.d.ts +68 -0
  371. package/dist/routing/routing-token-accumulator.d.ts.map +1 -0
  372. package/dist/routing/routing-token-accumulator.js +111 -0
  373. package/dist/routing/routing-token-accumulator.js.map +1 -0
  374. package/dist/routing/routing-tuner.d.ts +69 -0
  375. package/dist/routing/routing-tuner.d.ts.map +1 -0
  376. package/dist/routing/routing-tuner.js +217 -0
  377. package/dist/routing/routing-tuner.js.map +1 -0
  378. package/dist/routing/types.d.ts +152 -0
  379. package/dist/routing/types.d.ts.map +1 -0
  380. package/dist/routing/types.js +13 -0
  381. package/dist/routing/types.js.map +1 -0
  382. package/dist/supervisor/analysis.d.ts +178 -0
  383. package/dist/supervisor/analysis.d.ts.map +1 -0
  384. package/dist/supervisor/analysis.js +420 -0
  385. package/dist/supervisor/analysis.js.map +1 -0
  386. package/dist/supervisor/experimenter.d.ts +118 -0
  387. package/dist/supervisor/experimenter.d.ts.map +1 -0
  388. package/dist/supervisor/experimenter.js +493 -0
  389. package/dist/supervisor/experimenter.js.map +1 -0
  390. package/dist/supervisor/index.d.ts +13 -0
  391. package/dist/supervisor/index.d.ts.map +1 -0
  392. package/dist/supervisor/index.js +11 -0
  393. package/dist/supervisor/index.js.map +1 -0
  394. package/dist/telemetry/batch-buffer.d.ts +53 -0
  395. package/dist/telemetry/batch-buffer.d.ts.map +1 -0
  396. package/dist/telemetry/batch-buffer.js +83 -0
  397. package/dist/telemetry/batch-buffer.js.map +1 -0
  398. package/dist/telemetry/categorizer.d.ts +65 -0
  399. package/dist/telemetry/categorizer.d.ts.map +1 -0
  400. package/dist/telemetry/categorizer.js +338 -0
  401. package/dist/telemetry/categorizer.js.map +1 -0
  402. package/dist/telemetry/consumer-analyzer.d.ts +53 -0
  403. package/dist/telemetry/consumer-analyzer.d.ts.map +1 -0
  404. package/dist/telemetry/consumer-analyzer.js +182 -0
  405. package/dist/telemetry/consumer-analyzer.js.map +1 -0
  406. package/dist/telemetry/cost-table.d.ts +36 -0
  407. package/dist/telemetry/cost-table.d.ts.map +1 -0
  408. package/dist/telemetry/cost-table.js +127 -0
  409. package/dist/telemetry/cost-table.js.map +1 -0
  410. package/dist/telemetry/efficiency-scorer.d.ts +103 -0
  411. package/dist/telemetry/efficiency-scorer.d.ts.map +1 -0
  412. package/dist/telemetry/efficiency-scorer.js +311 -0
  413. package/dist/telemetry/efficiency-scorer.js.map +1 -0
  414. package/dist/telemetry/index.d.ts +28 -0
  415. package/dist/telemetry/index.d.ts.map +1 -0
  416. package/dist/telemetry/index.js +37 -0
  417. package/dist/telemetry/index.js.map +1 -0
  418. package/dist/telemetry/ingestion-server.d.ts +99 -0
  419. package/dist/telemetry/ingestion-server.d.ts.map +1 -0
  420. package/dist/telemetry/ingestion-server.js +315 -0
  421. package/dist/telemetry/ingestion-server.js.map +1 -0
  422. package/dist/telemetry/log-turn-analyzer.d.ts +35 -0
  423. package/dist/telemetry/log-turn-analyzer.d.ts.map +1 -0
  424. package/dist/telemetry/log-turn-analyzer.js +132 -0
  425. package/dist/telemetry/log-turn-analyzer.js.map +1 -0
  426. package/dist/telemetry/normalizer.d.ts +43 -0
  427. package/dist/telemetry/normalizer.d.ts.map +1 -0
  428. package/dist/telemetry/normalizer.js +320 -0
  429. package/dist/telemetry/normalizer.js.map +1 -0
  430. package/dist/telemetry/recommender.d.ts +116 -0
  431. package/dist/telemetry/recommender.d.ts.map +1 -0
  432. package/dist/telemetry/recommender.js +532 -0
  433. package/dist/telemetry/recommender.js.map +1 -0
  434. package/dist/telemetry/source-detector.d.ts +19 -0
  435. package/dist/telemetry/source-detector.d.ts.map +1 -0
  436. package/dist/telemetry/source-detector.js +73 -0
  437. package/dist/telemetry/source-detector.js.map +1 -0
  438. package/dist/telemetry/task-baselines.d.ts +30 -0
  439. package/dist/telemetry/task-baselines.d.ts.map +1 -0
  440. package/dist/telemetry/task-baselines.js +44 -0
  441. package/dist/telemetry/task-baselines.js.map +1 -0
  442. package/dist/telemetry/telemetry-pipeline.d.ts +122 -0
  443. package/dist/telemetry/telemetry-pipeline.d.ts.map +1 -0
  444. package/dist/telemetry/telemetry-pipeline.js +349 -0
  445. package/dist/telemetry/telemetry-pipeline.js.map +1 -0
  446. package/dist/telemetry/timestamp-normalizer.d.ts +32 -0
  447. package/dist/telemetry/timestamp-normalizer.d.ts.map +1 -0
  448. package/dist/telemetry/timestamp-normalizer.js +133 -0
  449. package/dist/telemetry/timestamp-normalizer.js.map +1 -0
  450. package/dist/telemetry/token-extractor.d.ts +57 -0
  451. package/dist/telemetry/token-extractor.d.ts.map +1 -0
  452. package/dist/telemetry/token-extractor.js +200 -0
  453. package/dist/telemetry/token-extractor.js.map +1 -0
  454. package/dist/telemetry/turn-analyzer.d.ts +34 -0
  455. package/dist/telemetry/turn-analyzer.d.ts.map +1 -0
  456. package/dist/telemetry/turn-analyzer.js +101 -0
  457. package/dist/telemetry/turn-analyzer.js.map +1 -0
  458. package/dist/telemetry/types.d.ts +456 -0
  459. package/dist/telemetry/types.d.ts.map +1 -0
  460. package/dist/telemetry/types.js +186 -0
  461. package/dist/telemetry/types.js.map +1 -0
  462. package/dist/types.d.ts +80 -0
  463. package/dist/types.d.ts.map +1 -0
  464. package/dist/types.js +6 -0
  465. package/dist/types.js.map +1 -0
  466. package/dist/version-manager/index.d.ts +11 -0
  467. package/dist/version-manager/index.d.ts.map +1 -0
  468. package/dist/version-manager/index.js +8 -0
  469. package/dist/version-manager/index.js.map +1 -0
  470. package/dist/version-manager/update-checker.d.ts +44 -0
  471. package/dist/version-manager/update-checker.d.ts.map +1 -0
  472. package/dist/version-manager/update-checker.js +171 -0
  473. package/dist/version-manager/update-checker.js.map +1 -0
  474. package/dist/version-manager/version-cache.d.ts +42 -0
  475. package/dist/version-manager/version-cache.d.ts.map +1 -0
  476. package/dist/version-manager/version-cache.js +69 -0
  477. package/dist/version-manager/version-cache.js.map +1 -0
  478. package/dist/version-manager/version-manager-impl.d.ts +81 -0
  479. package/dist/version-manager/version-manager-impl.d.ts.map +1 -0
  480. package/dist/version-manager/version-manager-impl.js +223 -0
  481. package/dist/version-manager/version-manager-impl.js.map +1 -0
  482. package/dist/version-manager/version-manager.d.ts +70 -0
  483. package/dist/version-manager/version-manager.d.ts.map +1 -0
  484. package/dist/version-manager/version-manager.js +8 -0
  485. package/dist/version-manager/version-manager.js.map +1 -0
  486. package/package.json +27 -0
@@ -0,0 +1,133 @@
1
+ /**
2
+ * Timestamp normalization for OTLP telemetry payloads.
3
+ *
4
+ * OTLP payloads use nanosecond integers for timestamps (e.g. `startTimeUnixNano`).
5
+ * Claude Code and other providers may emit timestamps in various formats.
6
+ *
7
+ * `normalizeTimestamp()` accepts any unknown value and returns a Unix millisecond
8
+ * number. Null/undefined/unparseable inputs fall back to `Date.now()`.
9
+ *
10
+ * Detection order (after ISO string check):
11
+ * 1. Nanoseconds (>= 1e18)
12
+ * 2. Microseconds (>= 1e15)
13
+ * 3. Milliseconds (>= 1e12)
14
+ * 4. Seconds (< 1e12)
15
+ */
16
+ // ---------------------------------------------------------------------------
17
+ // normalizeTimestamp
18
+ // ---------------------------------------------------------------------------
19
+ /**
20
+ * Normalize any timestamp value to Unix milliseconds.
21
+ *
22
+ * Handles:
23
+ * - ISO 8601 strings (e.g. "2024-03-08T12:00:00Z")
24
+ * - Nanosecond integers or numeric strings (>= 1e18)
25
+ * - Microsecond integers or numeric strings (>= 1e15)
26
+ * - Millisecond integers or numeric strings (>= 1e12)
27
+ * - Second integers or numeric strings (< 1e12)
28
+ * - BigInt string values from OTLP `startTimeUnixNano` (e.g. "1709900000000000000")
29
+ * - null / undefined / unparseable → falls back to Date.now()
30
+ *
31
+ * @param value - Raw timestamp value of unknown type
32
+ * @returns Unix millisecond timestamp
33
+ */
34
+ export function normalizeTimestamp(value) {
35
+ if (value === null || value === undefined) {
36
+ return Date.now();
37
+ }
38
+ // ISO 8601 string
39
+ if (typeof value === 'string') {
40
+ // Try ISO 8601 date string first (contains non-digit characters beyond just digits)
41
+ if (isIsoDateString(value)) {
42
+ const parsed = Date.parse(value);
43
+ if (!isNaN(parsed)) {
44
+ return parsed;
45
+ }
46
+ }
47
+ // Numeric string (potentially bigint nanosecond from OTLP)
48
+ // Use BigInt for large nanosecond values to avoid floating point precision loss
49
+ const trimmed = value.trim();
50
+ if (/^\d+$/.test(trimmed)) {
51
+ try {
52
+ const big = BigInt(trimmed);
53
+ return bigIntToMillis(big);
54
+ }
55
+ catch {
56
+ // fall through
57
+ }
58
+ }
59
+ return Date.now();
60
+ }
61
+ // BigInt
62
+ if (typeof value === 'bigint') {
63
+ return bigIntToMillis(value);
64
+ }
65
+ // Number
66
+ if (typeof value === 'number') {
67
+ if (!isFinite(value) || isNaN(value)) {
68
+ return Date.now();
69
+ }
70
+ return numericToMillis(value);
71
+ }
72
+ return Date.now();
73
+ }
74
+ // ---------------------------------------------------------------------------
75
+ // Helpers
76
+ // ---------------------------------------------------------------------------
77
+ /**
78
+ * Returns true if the string looks like an ISO 8601 date string
79
+ * (contains letters or dashes/colons in date-like positions).
80
+ */
81
+ function isIsoDateString(value) {
82
+ // Quick check: contains 'T' or '-' in date-like format, or ends with 'Z'
83
+ return (/^\d{4}-\d{2}-\d{2}/.test(value) ||
84
+ /Z$/.test(value) ||
85
+ /[+-]\d{2}:\d{2}$/.test(value) ||
86
+ value.includes('T'));
87
+ }
88
+ /**
89
+ * Convert a BigInt nanosecond/microsecond/millisecond/second value to milliseconds.
90
+ */
91
+ function bigIntToMillis(value) {
92
+ const NS_THRESHOLD = BigInt('1000000000000000000'); // 1e18
93
+ const US_THRESHOLD = BigInt('1000000000000000'); // 1e15
94
+ const MS_THRESHOLD = BigInt('1000000000000'); // 1e12
95
+ if (value >= NS_THRESHOLD) {
96
+ // Nanoseconds → milliseconds
97
+ return Number(value / BigInt(1_000_000));
98
+ }
99
+ else if (value >= US_THRESHOLD) {
100
+ // Microseconds → milliseconds
101
+ return Number(value / BigInt(1_000));
102
+ }
103
+ else if (value >= MS_THRESHOLD) {
104
+ // Already milliseconds
105
+ return Number(value);
106
+ }
107
+ else {
108
+ // Seconds → milliseconds
109
+ return Number(value) * 1_000;
110
+ }
111
+ }
112
+ /**
113
+ * Convert a numeric value to milliseconds based on magnitude.
114
+ */
115
+ function numericToMillis(value) {
116
+ if (value >= 1e18) {
117
+ // Nanoseconds
118
+ return Math.floor(value / 1_000_000);
119
+ }
120
+ else if (value >= 1e15) {
121
+ // Microseconds
122
+ return Math.floor(value / 1_000);
123
+ }
124
+ else if (value >= 1e12) {
125
+ // Milliseconds
126
+ return Math.floor(value);
127
+ }
128
+ else {
129
+ // Seconds
130
+ return Math.floor(value * 1_000);
131
+ }
132
+ }
133
+ //# sourceMappingURL=timestamp-normalizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timestamp-normalizer.js","sourceRoot":"","sources":["../../src/telemetry/timestamp-normalizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAE9E;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAc;IAC/C,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC,GAAG,EAAE,CAAA;IACnB,CAAC;IAED,kBAAkB;IAClB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,oFAAoF;QACpF,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;YAChC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;gBACnB,OAAO,MAAM,CAAA;YACf,CAAC;QACH,CAAC;QAED,2DAA2D;QAC3D,gFAAgF;QAChF,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAA;QAC5B,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;gBAC3B,OAAO,cAAc,CAAC,GAAG,CAAC,CAAA;YAC5B,CAAC;YAAC,MAAM,CAAC;gBACP,eAAe;YACjB,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC,GAAG,EAAE,CAAA;IACnB,CAAC;IAED,SAAS;IACT,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,cAAc,CAAC,KAAK,CAAC,CAAA;IAC9B,CAAC;IAED,SAAS;IACT,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YACrC,OAAO,IAAI,CAAC,GAAG,EAAE,CAAA;QACnB,CAAC;QACD,OAAO,eAAe,CAAC,KAAK,CAAC,CAAA;IAC/B,CAAC;IAED,OAAO,IAAI,CAAC,GAAG,EAAE,CAAA;AACnB,CAAC;AAED,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E;;;GAGG;AACH,SAAS,eAAe,CAAC,KAAa;IACpC,yEAAyE;IACzE,OAAO,CACL,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC;QAChC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QAChB,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC;QAC9B,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CACpB,CAAA;AACH,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,KAAa;IACnC,MAAM,YAAY,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAA,CAAC,OAAO;IAC1D,MAAM,YAAY,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAA,CAAC,OAAO;IACvD,MAAM,YAAY,GAAG,MAAM,CAAC,eAAe,CAAC,CAAA,CAAC,OAAO;IAEpD,IAAI,KAAK,IAAI,YAAY,EAAE,CAAC;QAC1B,6BAA6B;QAC7B,OAAO,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAA;IAC1C,CAAC;SAAM,IAAI,KAAK,IAAI,YAAY,EAAE,CAAC;QACjC,8BAA8B;QAC9B,OAAO,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;IACtC,CAAC;SAAM,IAAI,KAAK,IAAI,YAAY,EAAE,CAAC;QACjC,uBAAuB;QACvB,OAAO,MAAM,CAAC,KAAK,CAAC,CAAA;IACtB,CAAC;SAAM,CAAC;QACN,yBAAyB;QACzB,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAA;IAC9B,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,KAAa;IACpC,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;QAClB,cAAc;QACd,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC,CAAA;IACtC,CAAC;SAAM,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;QACzB,eAAe;QACf,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAA;IAClC,CAAC;SAAM,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;QACzB,eAAe;QACf,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAC1B,CAAC;SAAM,CAAC;QACN,UAAU;QACV,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAA;IAClC,CAAC;AACH,CAAC"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Token extraction from OTLP span/log attributes and body JSON.
3
+ *
4
+ * OTLP payloads from different LLM providers use varying attribute naming
5
+ * conventions for token counts. This module provides fuzzy extraction via
6
+ * case-insensitive substring pattern matching.
7
+ *
8
+ * Priority: attributes take precedence over body for each field.
9
+ * Body fallback: parses JSON and recursively searches up to depth 4.
10
+ */
11
+ import type { TokenCounts } from './types.js';
12
+ /**
13
+ * A single OTLP attribute entry.
14
+ */
15
+ interface OtlpAttributeValue {
16
+ stringValue?: string;
17
+ intValue?: string | number;
18
+ doubleValue?: string | number;
19
+ boolValue?: boolean;
20
+ }
21
+ interface OtlpAttribute {
22
+ key: string;
23
+ value: OtlpAttributeValue;
24
+ }
25
+ /**
26
+ * Extract token counts from an OTLP attributes array.
27
+ *
28
+ * Matches attribute keys case-insensitively against known patterns.
29
+ * The first matching value for each field wins.
30
+ *
31
+ * @param attributes - Array of OTLP attribute entries
32
+ * @returns Partial token counts (only fields found in attributes)
33
+ */
34
+ export declare function extractTokensFromAttributes(attributes: OtlpAttribute[] | undefined | null): Partial<TokenCounts>;
35
+ /**
36
+ * Extract token counts from a JSON body string via recursive search.
37
+ *
38
+ * Parses the body as JSON and recursively walks the object tree up to
39
+ * depth 4, looking for keys matching token patterns.
40
+ *
41
+ * @param body - Raw body string (may be JSON)
42
+ * @returns Partial token counts found in body
43
+ */
44
+ export declare function extractTokensFromBody(body: string | undefined | null): Partial<TokenCounts>;
45
+ /**
46
+ * Merge attribute-derived and body-derived token counts.
47
+ *
48
+ * Attributes take priority over body for each field.
49
+ * Missing fields default to 0.
50
+ *
51
+ * @param fromAttributes - Token counts from attributes (higher priority)
52
+ * @param fromBody - Token counts from body JSON (lower priority)
53
+ * @returns Complete TokenCounts with all fields
54
+ */
55
+ export declare function mergeTokenCounts(fromAttributes: Partial<TokenCounts>, fromBody: Partial<TokenCounts>): TokenCounts;
56
+ export {};
57
+ //# sourceMappingURL=token-extractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-extractor.d.ts","sourceRoot":"","sources":["../../src/telemetry/token-extractor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAM7C;;GAEG;AACH,UAAU,kBAAkB;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC1B,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC7B,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAED,UAAU,aAAa;IACrB,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,kBAAkB,CAAA;CAC1B;AAwBD;;;;;;;;GAQG;AACH,wBAAgB,2BAA2B,CACzC,UAAU,EAAE,aAAa,EAAE,GAAG,SAAS,GAAG,IAAI,GAC7C,OAAO,CAAC,WAAW,CAAC,CAmCtB;AAMD;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,CAa3F;AAMD;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAC9B,cAAc,EAAE,OAAO,CAAC,WAAW,CAAC,EACpC,QAAQ,EAAE,OAAO,CAAC,WAAW,CAAC,GAC7B,WAAW,CAOb"}
@@ -0,0 +1,200 @@
1
+ /**
2
+ * Token extraction from OTLP span/log attributes and body JSON.
3
+ *
4
+ * OTLP payloads from different LLM providers use varying attribute naming
5
+ * conventions for token counts. This module provides fuzzy extraction via
6
+ * case-insensitive substring pattern matching.
7
+ *
8
+ * Priority: attributes take precedence over body for each field.
9
+ * Body fallback: parses JSON and recursively searches up to depth 4.
10
+ */
11
+ // ---------------------------------------------------------------------------
12
+ // Pattern definitions
13
+ // ---------------------------------------------------------------------------
14
+ /**
15
+ * Patterns for matching attribute keys to token fields.
16
+ * Each pattern is checked case-insensitively via substring match.
17
+ *
18
+ * IMPORTANT: more-specific patterns (cacheRead, cacheCreation) MUST come first
19
+ * so that keys like `cache_read_input_tokens` match `cache_read` before `input_token`.
20
+ */
21
+ const TOKEN_PATTERNS = {
22
+ cacheRead: ['cache_read'],
23
+ cacheCreation: ['cache_creation', 'cache_write'],
24
+ input: ['input_token', 'prompt_token'],
25
+ output: ['output_token', 'completion_token'],
26
+ };
27
+ // ---------------------------------------------------------------------------
28
+ // extractTokensFromAttributes
29
+ // ---------------------------------------------------------------------------
30
+ /**
31
+ * Extract token counts from an OTLP attributes array.
32
+ *
33
+ * Matches attribute keys case-insensitively against known patterns.
34
+ * The first matching value for each field wins.
35
+ *
36
+ * @param attributes - Array of OTLP attribute entries
37
+ * @returns Partial token counts (only fields found in attributes)
38
+ */
39
+ export function extractTokensFromAttributes(attributes) {
40
+ if (!Array.isArray(attributes) || attributes.length === 0) {
41
+ return {};
42
+ }
43
+ const result = {};
44
+ for (const attr of attributes) {
45
+ if (!attr?.key || !attr?.value)
46
+ continue;
47
+ const keyLower = attr.key.toLowerCase();
48
+ const numValue = resolveAttrValue(attr.value);
49
+ if (numValue === undefined)
50
+ continue;
51
+ // Each attribute maps to at most ONE field (first match in priority order wins).
52
+ // cacheRead/cacheCreation patterns are checked before input/output so that
53
+ // keys like `cache_read_input_tokens` do NOT also match `input_token`.
54
+ let matched = false;
55
+ for (const [field, patterns] of Object.entries(TOKEN_PATTERNS)) {
56
+ if (matched)
57
+ break;
58
+ if (result[field] !== undefined)
59
+ continue;
60
+ for (const pattern of patterns) {
61
+ if (keyLower.includes(pattern)) {
62
+ ;
63
+ result[field] = numValue;
64
+ matched = true;
65
+ break;
66
+ }
67
+ }
68
+ }
69
+ }
70
+ return result;
71
+ }
72
+ // ---------------------------------------------------------------------------
73
+ // extractTokensFromBody
74
+ // ---------------------------------------------------------------------------
75
+ /**
76
+ * Extract token counts from a JSON body string via recursive search.
77
+ *
78
+ * Parses the body as JSON and recursively walks the object tree up to
79
+ * depth 4, looking for keys matching token patterns.
80
+ *
81
+ * @param body - Raw body string (may be JSON)
82
+ * @returns Partial token counts found in body
83
+ */
84
+ export function extractTokensFromBody(body) {
85
+ if (!body || typeof body !== 'string') {
86
+ return {};
87
+ }
88
+ let parsed;
89
+ try {
90
+ parsed = JSON.parse(body);
91
+ }
92
+ catch {
93
+ return {};
94
+ }
95
+ return searchObjectForTokens(parsed, 0);
96
+ }
97
+ // ---------------------------------------------------------------------------
98
+ // mergeTokenCounts
99
+ // ---------------------------------------------------------------------------
100
+ /**
101
+ * Merge attribute-derived and body-derived token counts.
102
+ *
103
+ * Attributes take priority over body for each field.
104
+ * Missing fields default to 0.
105
+ *
106
+ * @param fromAttributes - Token counts from attributes (higher priority)
107
+ * @param fromBody - Token counts from body JSON (lower priority)
108
+ * @returns Complete TokenCounts with all fields
109
+ */
110
+ export function mergeTokenCounts(fromAttributes, fromBody) {
111
+ return {
112
+ input: fromAttributes.input ?? fromBody.input ?? 0,
113
+ output: fromAttributes.output ?? fromBody.output ?? 0,
114
+ cacheRead: fromAttributes.cacheRead ?? fromBody.cacheRead ?? 0,
115
+ cacheCreation: fromAttributes.cacheCreation ?? fromBody.cacheCreation ?? 0,
116
+ };
117
+ }
118
+ // ---------------------------------------------------------------------------
119
+ // Helpers
120
+ // ---------------------------------------------------------------------------
121
+ /**
122
+ * Resolve an OTLP attribute value to a number.
123
+ * OTLP integer values arrive as strings (e.g. `"intValue": "2048"`).
124
+ */
125
+ function resolveAttrValue(value) {
126
+ if (value.intValue !== undefined) {
127
+ const n = Number(value.intValue);
128
+ return isFinite(n) ? n : undefined;
129
+ }
130
+ if (value.doubleValue !== undefined) {
131
+ const n = Number(value.doubleValue);
132
+ return isFinite(n) ? n : undefined;
133
+ }
134
+ if (value.stringValue !== undefined) {
135
+ const n = Number(value.stringValue);
136
+ if (!isNaN(n) && isFinite(n))
137
+ return n;
138
+ }
139
+ return undefined;
140
+ }
141
+ /**
142
+ * Recursively search an object for token count fields up to maxDepth.
143
+ */
144
+ function searchObjectForTokens(obj, depth) {
145
+ if (depth >= 4 || obj === null || typeof obj !== 'object') {
146
+ return {};
147
+ }
148
+ const result = {};
149
+ if (Array.isArray(obj)) {
150
+ for (const item of obj) {
151
+ const found = searchObjectForTokens(item, depth + 1);
152
+ mergePartialInto(result, found);
153
+ }
154
+ return result;
155
+ }
156
+ const record = obj;
157
+ for (const [key, val] of Object.entries(record)) {
158
+ const keyLower = key.toLowerCase();
159
+ // Check if this key matches a token pattern.
160
+ // Each key maps to at most ONE field (first match in priority order wins).
161
+ let keyMatched = false;
162
+ for (const [field, patterns] of Object.entries(TOKEN_PATTERNS)) {
163
+ if (keyMatched)
164
+ break;
165
+ if (result[field] !== undefined)
166
+ continue;
167
+ for (const pattern of patterns) {
168
+ if (keyLower.includes(pattern)) {
169
+ const num = typeof val === 'number' ? val : typeof val === 'string' ? Number(val) : NaN;
170
+ if (!isNaN(num) && isFinite(num)) {
171
+ ;
172
+ result[field] = num;
173
+ }
174
+ keyMatched = true;
175
+ break;
176
+ }
177
+ }
178
+ }
179
+ // Recurse into nested objects
180
+ if (val !== null && typeof val === 'object') {
181
+ const nested = searchObjectForTokens(val, depth + 1);
182
+ mergePartialInto(result, nested);
183
+ }
184
+ }
185
+ return result;
186
+ }
187
+ /**
188
+ * Merge source into target, only filling missing fields.
189
+ */
190
+ function mergePartialInto(target, source) {
191
+ if (target.input === undefined && source.input !== undefined)
192
+ target.input = source.input;
193
+ if (target.output === undefined && source.output !== undefined)
194
+ target.output = source.output;
195
+ if (target.cacheRead === undefined && source.cacheRead !== undefined)
196
+ target.cacheRead = source.cacheRead;
197
+ if (target.cacheCreation === undefined && source.cacheCreation !== undefined)
198
+ target.cacheCreation = source.cacheCreation;
199
+ }
200
+ //# sourceMappingURL=token-extractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-extractor.js","sourceRoot":"","sources":["../../src/telemetry/token-extractor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * TurnAnalyzer — computes per-turn token breakdowns from normalized spans.
3
+ *
4
+ * Takes a list of NormalizedSpan records and produces TurnAnalysis[], where
5
+ * each entry represents a root-level span (an agent "turn") with:
6
+ * - Chronological ordering (by startTime)
7
+ * - Sequential turnNumber assignment (1-N)
8
+ * - freshTokens, cacheHitRate, contextSize, contextDelta metrics
9
+ * - childSpans drill-down (tool calls within the turn)
10
+ * - isContextSpike detection (inputTokens > 2× average)
11
+ *
12
+ * Architecture constraints:
13
+ * - Constructor injection: accepts ILogger via constructor (defaults to console)
14
+ * - No external dependencies beyond types from this module
15
+ * - Zero LLM calls — pure statistical computation
16
+ *
17
+ * Migrated to @substrate-ai/core in story 41-6b.
18
+ */
19
+ import type { ILogger } from '../dispatch/types.js';
20
+ import type { NormalizedSpan, TurnAnalysis } from './types.js';
21
+ import type { ITurnAnalyzer } from './telemetry-pipeline.js';
22
+ export declare class TurnAnalyzer implements ITurnAnalyzer {
23
+ private readonly _logger;
24
+ constructor(logger?: ILogger);
25
+ /**
26
+ * Analyze a list of NormalizedSpan records and produce TurnAnalysis[].
27
+ *
28
+ * Returns an empty array immediately when spans is empty.
29
+ *
30
+ * @param spans - All spans for a story (root and child spans mixed)
31
+ */
32
+ analyze(spans: NormalizedSpan[]): TurnAnalysis[];
33
+ }
34
+ //# sourceMappingURL=turn-analyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turn-analyzer.d.ts","sourceRoot":"","sources":["../../src/telemetry/turn-analyzer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAoB,MAAM,YAAY,CAAA;AAChF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAM5D,qBAAa,YAAa,YAAW,aAAa;IAChD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,MAAM,CAAC,EAAE,OAAO;IAQ5B;;;;;;OAMG;IACH,OAAO,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,YAAY,EAAE;CA4EjD"}
@@ -0,0 +1,101 @@
1
+ /**
2
+ * TurnAnalyzer — computes per-turn token breakdowns from normalized spans.
3
+ *
4
+ * Takes a list of NormalizedSpan records and produces TurnAnalysis[], where
5
+ * each entry represents a root-level span (an agent "turn") with:
6
+ * - Chronological ordering (by startTime)
7
+ * - Sequential turnNumber assignment (1-N)
8
+ * - freshTokens, cacheHitRate, contextSize, contextDelta metrics
9
+ * - childSpans drill-down (tool calls within the turn)
10
+ * - isContextSpike detection (inputTokens > 2× average)
11
+ *
12
+ * Architecture constraints:
13
+ * - Constructor injection: accepts ILogger via constructor (defaults to console)
14
+ * - No external dependencies beyond types from this module
15
+ * - Zero LLM calls — pure statistical computation
16
+ *
17
+ * Migrated to @substrate-ai/core in story 41-6b.
18
+ */
19
+ // ---------------------------------------------------------------------------
20
+ // TurnAnalyzer
21
+ // ---------------------------------------------------------------------------
22
+ export class TurnAnalyzer {
23
+ _logger;
24
+ constructor(logger) {
25
+ this._logger = logger ?? console;
26
+ }
27
+ // ---------------------------------------------------------------------------
28
+ // Public API
29
+ // ---------------------------------------------------------------------------
30
+ /**
31
+ * Analyze a list of NormalizedSpan records and produce TurnAnalysis[].
32
+ *
33
+ * Returns an empty array immediately when spans is empty.
34
+ *
35
+ * @param spans - All spans for a story (root and child spans mixed)
36
+ */
37
+ analyze(spans) {
38
+ if (spans.length === 0) {
39
+ return [];
40
+ }
41
+ // Build set of all spanIds for root-span identification
42
+ const allSpanIds = new Set(spans.map((s) => s.spanId));
43
+ // Separate root spans from child spans
44
+ const rootSpans = spans.filter((s) => !s.parentSpanId || !allSpanIds.has(s.parentSpanId));
45
+ // Sort root spans chronologically
46
+ const ordered = [...rootSpans].sort((a, b) => a.startTime - b.startTime);
47
+ // Build child span index: parentSpanId → child spans
48
+ const childIndex = new Map();
49
+ for (const span of spans) {
50
+ if (span.parentSpanId && allSpanIds.has(span.parentSpanId)) {
51
+ const children = childIndex.get(span.parentSpanId) ?? [];
52
+ children.push(span);
53
+ childIndex.set(span.parentSpanId, children);
54
+ }
55
+ }
56
+ // First pass: build turns with metrics (context accumulation)
57
+ let runningContext = 0;
58
+ const turns = ordered.map((span, idx) => {
59
+ const prevContext = runningContext;
60
+ runningContext += span.inputTokens;
61
+ const freshTokens = span.inputTokens - span.cacheReadTokens;
62
+ const cacheHitRate = span.inputTokens > 0 ? span.cacheReadTokens / span.inputTokens : 0;
63
+ const childSpanSummaries = (childIndex.get(span.spanId) ?? []).map((child) => ({
64
+ spanId: child.spanId,
65
+ name: child.name,
66
+ toolName: child.attributes?.['tool.name'],
67
+ inputTokens: child.inputTokens,
68
+ outputTokens: child.outputTokens,
69
+ durationMs: child.durationMs,
70
+ }));
71
+ return {
72
+ spanId: span.spanId,
73
+ turnNumber: idx + 1,
74
+ name: span.name,
75
+ timestamp: span.startTime,
76
+ source: span.source,
77
+ model: span.model,
78
+ inputTokens: span.inputTokens,
79
+ outputTokens: span.outputTokens,
80
+ cacheReadTokens: span.cacheReadTokens,
81
+ freshTokens,
82
+ cacheHitRate,
83
+ costUsd: span.costUsd,
84
+ durationMs: span.durationMs,
85
+ contextSize: runningContext,
86
+ contextDelta: runningContext - prevContext,
87
+ toolName: span.attributes?.['tool.name'],
88
+ isContextSpike: false, // will be set in second pass
89
+ childSpans: childSpanSummaries,
90
+ };
91
+ });
92
+ // Second pass: spike detection
93
+ const avg = turns.reduce((sum, t) => sum + t.inputTokens, 0) / turns.length;
94
+ for (const turn of turns) {
95
+ turn.isContextSpike = avg > 0 && turn.inputTokens > 2 * avg;
96
+ }
97
+ this._logger.debug({ turnCount: turns.length, avg }, 'TurnAnalyzer.analyze complete');
98
+ return turns;
99
+ }
100
+ }
101
+ //# sourceMappingURL=turn-analyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turn-analyzer.js","sourceRoot":"","sources":["../../src/telemetry/turn-analyzer.ts"],"names":[],"mappings":"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"}