@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,30 @@
1
+ /**
2
+ * Per-task-type baseline profiles for efficiency scoring (Story 35-2).
3
+ *
4
+ * Calibrated from ynab cross-project validation run data (Epics 5-6, v0.5.8-v0.5.10).
5
+ * Used by EfficiencyScorer for task-type-aware io_ratio and token density scoring.
6
+ *
7
+ * Baseline data (ynab Epics 5-6):
8
+ * dev-story: 400 turns, avg 544 output/turn, io mean 398 (totalIn/out)
9
+ * create-story: 83 turns, avg 1522 output/turn, io mean 149
10
+ * code-review: 59 turns, avg 3937 output/turn, io mean 79
11
+ * minor-fixes: 48 turns, avg 714 output/turn, io mean 169
12
+ * test-plan: 15 turns, avg 1608 output/turn, io mean 28
13
+ * test-expansion: 7 turns, avg 1953 output/turn, io mean 12
14
+ *
15
+ * Migrated to @substrate-ai/core in story 41-6b.
16
+ */
17
+ export interface TaskBaseline {
18
+ /** Expected avg output tokens per turn (for token density sub-score) */
19
+ expectedOutputPerTurn: number;
20
+ /** Target output/freshInput ratio for io_ratio sub-score logarithmic curve */
21
+ targetIoRatio: number;
22
+ }
23
+ export declare const TASK_BASELINES: Readonly<Record<string, TaskBaseline>>;
24
+ export declare const DEFAULT_BASELINE: Readonly<TaskBaseline>;
25
+ /**
26
+ * Get the baseline for a task type, falling back to DEFAULT_BASELINE
27
+ * when taskType is undefined, empty, or unknown.
28
+ */
29
+ export declare function getBaseline(taskType?: string): TaskBaseline;
30
+ //# sourceMappingURL=task-baselines.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-baselines.d.ts","sourceRoot":"","sources":["../../src/telemetry/task-baselines.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAMH,MAAM,WAAW,YAAY;IAC3B,wEAAwE;IACxE,qBAAqB,EAAE,MAAM,CAAA;IAC7B,8EAA8E;IAC9E,aAAa,EAAE,MAAM,CAAA;CACtB;AAMD,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAOjE,CAAA;AAED,eAAO,MAAM,gBAAgB,EAAE,QAAQ,CAAC,YAAY,CAGnD,CAAA;AAMD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,YAAY,CAG3D"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Per-task-type baseline profiles for efficiency scoring (Story 35-2).
3
+ *
4
+ * Calibrated from ynab cross-project validation run data (Epics 5-6, v0.5.8-v0.5.10).
5
+ * Used by EfficiencyScorer for task-type-aware io_ratio and token density scoring.
6
+ *
7
+ * Baseline data (ynab Epics 5-6):
8
+ * dev-story: 400 turns, avg 544 output/turn, io mean 398 (totalIn/out)
9
+ * create-story: 83 turns, avg 1522 output/turn, io mean 149
10
+ * code-review: 59 turns, avg 3937 output/turn, io mean 79
11
+ * minor-fixes: 48 turns, avg 714 output/turn, io mean 169
12
+ * test-plan: 15 turns, avg 1608 output/turn, io mean 28
13
+ * test-expansion: 7 turns, avg 1953 output/turn, io mean 12
14
+ *
15
+ * Migrated to @substrate-ai/core in story 41-6b.
16
+ */
17
+ // ---------------------------------------------------------------------------
18
+ // Baselines
19
+ // ---------------------------------------------------------------------------
20
+ export const TASK_BASELINES = {
21
+ 'dev-story': { expectedOutputPerTurn: 550, targetIoRatio: 100 },
22
+ 'create-story': { expectedOutputPerTurn: 1500, targetIoRatio: 100 },
23
+ 'code-review': { expectedOutputPerTurn: 3900, targetIoRatio: 50 },
24
+ 'minor-fixes': { expectedOutputPerTurn: 700, targetIoRatio: 100 },
25
+ 'test-plan': { expectedOutputPerTurn: 1600, targetIoRatio: 30 },
26
+ 'test-expansion': { expectedOutputPerTurn: 1950, targetIoRatio: 15 },
27
+ };
28
+ export const DEFAULT_BASELINE = {
29
+ expectedOutputPerTurn: 800,
30
+ targetIoRatio: 100,
31
+ };
32
+ // ---------------------------------------------------------------------------
33
+ // Lookup
34
+ // ---------------------------------------------------------------------------
35
+ /**
36
+ * Get the baseline for a task type, falling back to DEFAULT_BASELINE
37
+ * when taskType is undefined, empty, or unknown.
38
+ */
39
+ export function getBaseline(taskType) {
40
+ if (taskType === undefined || taskType === '')
41
+ return DEFAULT_BASELINE;
42
+ return TASK_BASELINES[taskType] ?? DEFAULT_BASELINE;
43
+ }
44
+ //# sourceMappingURL=task-baselines.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-baselines.js","sourceRoot":"","sources":["../../src/telemetry/task-baselines.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAaH,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,MAAM,CAAC,MAAM,cAAc,GAA2C;IACpE,WAAW,EAAE,EAAE,qBAAqB,EAAE,GAAG,EAAE,aAAa,EAAE,GAAG,EAAE;IAC/D,cAAc,EAAE,EAAE,qBAAqB,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE;IACnE,aAAa,EAAE,EAAE,qBAAqB,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,EAAE;IACjE,aAAa,EAAE,EAAE,qBAAqB,EAAE,GAAG,EAAE,aAAa,EAAE,GAAG,EAAE;IACjE,WAAW,EAAE,EAAE,qBAAqB,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,EAAE;IAC/D,gBAAgB,EAAE,EAAE,qBAAqB,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,EAAE;CACrE,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAA2B;IACtD,qBAAqB,EAAE,GAAG;IAC1B,aAAa,EAAE,GAAG;CACnB,CAAA;AAED,8EAA8E;AAC9E,SAAS;AACT,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,QAAiB;IAC3C,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,EAAE;QAAE,OAAO,gBAAgB,CAAA;IACtE,OAAO,cAAc,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAA;AACrD,CAAC"}
@@ -0,0 +1,122 @@
1
+ /**
2
+ * TelemetryPipeline — orchestrates the full telemetry analysis pipeline.
3
+ *
4
+ * Processing flow for each batch of raw OTLP payloads:
5
+ * 1. Normalize raw OTLP → NormalizedSpan[] / NormalizedLog[] (TelemetryNormalizer)
6
+ * 2. Analyze turns via dual-track:
7
+ * a. Span-based: ITurnAnalyzer.analyze(spans) → TurnAnalysis[]
8
+ * b. Log-based: ILogTurnAnalyzer.analyze(logs) → TurnAnalysis[]
9
+ * c. Merge & deduplicate by spanId (prefer span-derived)
10
+ * 3. Compute category stats → CategoryStats[] (ICategorizer)
11
+ * 4. Compute consumer stats → ConsumerStats[] (IConsumerAnalyzer)
12
+ * 5. Score efficiency → EfficiencyScore (IEfficiencyScorer) — from merged turns
13
+ * 6. Generate recommendations → Recommendation[] (IRecommender) — from merged turns
14
+ * 7. Persist all results (ITelemetryPersistence)
15
+ *
16
+ * Design invariants:
17
+ * - Constructor injection for all dependencies
18
+ * - Never throws from processBatch() — errors are caught per-item and logged
19
+ * - Grouping by storyKey; payloads without a storyKey are skipped at the
20
+ * analysis stage (normalised data is still stored)
21
+ * - Log-only path: when no spans are present, ILogTurnAnalyzer produces turns.
22
+ *
23
+ * Duck-typed interfaces for scoring deps (implementations migrate in 41-6b).
24
+ * This allows the core package to be self-contained without importing from
25
+ * the monolith's scoring modules.
26
+ */
27
+ import type { ILogger } from '../dispatch/types.js';
28
+ import type { TelemetryNormalizer } from './normalizer.js';
29
+ import type { NormalizedSpan, NormalizedLog, TurnAnalysis, CategoryStats, ConsumerStats, EfficiencyScore, RawOtlpPayload, ITelemetryPersistence, IRecommender } from './types.js';
30
+ export interface ITurnAnalyzer {
31
+ analyze(spans: NormalizedSpan[]): TurnAnalysis[];
32
+ }
33
+ export interface ILogTurnAnalyzer {
34
+ analyze(logs: NormalizedLog[]): TurnAnalysis[];
35
+ }
36
+ export interface ICategorizer {
37
+ computeCategoryStats(spans: NormalizedSpan[], turns: TurnAnalysis[]): CategoryStats[];
38
+ computeCategoryStatsFromTurns(turns: TurnAnalysis[]): CategoryStats[];
39
+ }
40
+ export interface IConsumerAnalyzer {
41
+ analyze(spans: NormalizedSpan[]): ConsumerStats[];
42
+ analyzeFromTurns(turns: TurnAnalysis[]): ConsumerStats[];
43
+ }
44
+ export interface IEfficiencyScorer {
45
+ score(storyKey: string, turns: TurnAnalysis[]): EfficiencyScore;
46
+ }
47
+ /**
48
+ * All injected dependencies for the TelemetryPipeline.
49
+ * Concrete implementations satisfy these duck-typed interfaces structurally.
50
+ */
51
+ export interface TelemetryPipelineDeps {
52
+ normalizer: TelemetryNormalizer;
53
+ turnAnalyzer: ITurnAnalyzer;
54
+ logTurnAnalyzer: ILogTurnAnalyzer;
55
+ categorizer: ICategorizer;
56
+ consumerAnalyzer: IConsumerAnalyzer;
57
+ efficiencyScorer: IEfficiencyScorer;
58
+ recommender: IRecommender;
59
+ persistence: ITelemetryPersistence;
60
+ logger?: ILogger;
61
+ }
62
+ /**
63
+ * Wires together the full OTLP analysis and persistence pipeline.
64
+ *
65
+ * Usage:
66
+ * const pipeline = new TelemetryPipeline(deps)
67
+ * await pipeline.processBatch(items)
68
+ */
69
+ export declare class TelemetryPipeline {
70
+ private readonly _normalizer;
71
+ private readonly _turnAnalyzer;
72
+ private readonly _logTurnAnalyzer;
73
+ private readonly _categorizer;
74
+ private readonly _consumerAnalyzer;
75
+ private readonly _efficiencyScorer;
76
+ private readonly _recommender;
77
+ private readonly _persistence;
78
+ private readonly _logger;
79
+ /** Stories that have had stale telemetry purged this pipeline lifetime. */
80
+ private readonly _purgedStories;
81
+ constructor(deps: TelemetryPipelineDeps);
82
+ /**
83
+ * Process a batch of raw OTLP payloads through the full analysis pipeline.
84
+ *
85
+ * Each payload is normalized independently. Spans and logs are grouped by
86
+ * storyKey for per-story analysis. Items that fail normalization are skipped
87
+ * with a warning.
88
+ *
89
+ * Dual-track analysis:
90
+ * - Span-derived turns via ITurnAnalyzer
91
+ * - Log-derived turns via ILogTurnAnalyzer
92
+ * - Merged (deduplicated by spanId) before downstream analysis
93
+ */
94
+ processBatch(items: RawOtlpPayload[]): Promise<void>;
95
+ /**
96
+ * Group turns by dispatchId for per-dispatch scoring.
97
+ * Only turns with a non-empty dispatchId are included.
98
+ */
99
+ private _groupTurnsByDispatchId;
100
+ /**
101
+ * Merge span-derived and log-derived turns, deduplicating by spanId.
102
+ * When a span and a log share the same spanId, the span-derived turn is preferred
103
+ * (richer data). The merged result is sorted chronologically and renumbered.
104
+ */
105
+ private _mergeTurns;
106
+ /**
107
+ * Full span-based analysis path.
108
+ */
109
+ private _processStory;
110
+ /**
111
+ * Log-only analysis path: processes turns from ILogTurnAnalyzer through full
112
+ * analysis and persistence.
113
+ */
114
+ private _processStoryFromTurns;
115
+ /**
116
+ * Shared persistence helper — called by both _processStory and _processStoryFromTurns.
117
+ * All 5 persistence calls are made here with individual error guards so a single
118
+ * failure does not abort the others.
119
+ */
120
+ private _persistStoryData;
121
+ }
122
+ //# sourceMappingURL=telemetry-pipeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry-pipeline.d.ts","sourceRoot":"","sources":["../../src/telemetry/telemetry-pipeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AAC1D,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EACb,YAAY,EAEZ,aAAa,EACb,aAAa,EAEb,eAAe,EACf,cAAc,EACd,qBAAqB,EACrB,YAAY,EACb,MAAM,YAAY,CAAA;AAMnB,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,YAAY,EAAE,CAAA;CACjD;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,YAAY,EAAE,CAAA;CAC/C;AAED,MAAM,WAAW,YAAY;IAC3B,oBAAoB,CAAC,KAAK,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,aAAa,EAAE,CAAA;IACrF,6BAA6B,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,aAAa,EAAE,CAAA;CACtE;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,aAAa,EAAE,CAAA;IACjD,gBAAgB,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,aAAa,EAAE,CAAA;CACzD;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,eAAe,CAAA;CAChE;AAMD;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,mBAAmB,CAAA;IAC/B,YAAY,EAAE,aAAa,CAAA;IAC3B,eAAe,EAAE,gBAAgB,CAAA;IACjC,WAAW,EAAE,YAAY,CAAA;IACzB,gBAAgB,EAAE,iBAAiB,CAAA;IACnC,gBAAgB,EAAE,iBAAiB,CAAA;IACnC,WAAW,EAAE,YAAY,CAAA;IACzB,WAAW,EAAE,qBAAqB,CAAA;IAClC,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAsBD;;;;;;GAMG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;IACjD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAe;IAC7C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAkB;IACnD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAc;IAC3C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAmB;IACrD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAmB;IACrD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAc;IAC3C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAuB;IACpD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,2EAA2E;IAC3E,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAoB;gBAEvC,IAAI,EAAE,qBAAqB;IAgBvC;;;;;;;;;;;OAWG;IACG,YAAY,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA6G1D;;;OAGG;IACH,OAAO,CAAC,uBAAuB;IAc/B;;;;OAIG;IACH,OAAO,CAAC,WAAW;IAWnB;;OAEG;YACW,aAAa;IAuE3B;;;OAGG;YACW,sBAAsB;IAmEpC;;;;OAIG;YACW,iBAAiB;CAiDhC"}
@@ -0,0 +1,349 @@
1
+ /**
2
+ * TelemetryPipeline — orchestrates the full telemetry analysis pipeline.
3
+ *
4
+ * Processing flow for each batch of raw OTLP payloads:
5
+ * 1. Normalize raw OTLP → NormalizedSpan[] / NormalizedLog[] (TelemetryNormalizer)
6
+ * 2. Analyze turns via dual-track:
7
+ * a. Span-based: ITurnAnalyzer.analyze(spans) → TurnAnalysis[]
8
+ * b. Log-based: ILogTurnAnalyzer.analyze(logs) → TurnAnalysis[]
9
+ * c. Merge & deduplicate by spanId (prefer span-derived)
10
+ * 3. Compute category stats → CategoryStats[] (ICategorizer)
11
+ * 4. Compute consumer stats → ConsumerStats[] (IConsumerAnalyzer)
12
+ * 5. Score efficiency → EfficiencyScore (IEfficiencyScorer) — from merged turns
13
+ * 6. Generate recommendations → Recommendation[] (IRecommender) — from merged turns
14
+ * 7. Persist all results (ITelemetryPersistence)
15
+ *
16
+ * Design invariants:
17
+ * - Constructor injection for all dependencies
18
+ * - Never throws from processBatch() — errors are caught per-item and logged
19
+ * - Grouping by storyKey; payloads without a storyKey are skipped at the
20
+ * analysis stage (normalised data is still stored)
21
+ * - Log-only path: when no spans are present, ILogTurnAnalyzer produces turns.
22
+ *
23
+ * Duck-typed interfaces for scoring deps (implementations migrate in 41-6b).
24
+ * This allows the core package to be self-contained without importing from
25
+ * the monolith's scoring modules.
26
+ */
27
+ // ---------------------------------------------------------------------------
28
+ // TelemetryPipeline
29
+ // ---------------------------------------------------------------------------
30
+ /**
31
+ * Wires together the full OTLP analysis and persistence pipeline.
32
+ *
33
+ * Usage:
34
+ * const pipeline = new TelemetryPipeline(deps)
35
+ * await pipeline.processBatch(items)
36
+ */
37
+ export class TelemetryPipeline {
38
+ _normalizer;
39
+ _turnAnalyzer;
40
+ _logTurnAnalyzer;
41
+ _categorizer;
42
+ _consumerAnalyzer;
43
+ _efficiencyScorer;
44
+ _recommender;
45
+ _persistence;
46
+ _logger;
47
+ /** Stories that have had stale telemetry purged this pipeline lifetime. */
48
+ _purgedStories = new Set();
49
+ constructor(deps) {
50
+ this._normalizer = deps.normalizer;
51
+ this._turnAnalyzer = deps.turnAnalyzer;
52
+ this._logTurnAnalyzer = deps.logTurnAnalyzer;
53
+ this._categorizer = deps.categorizer;
54
+ this._consumerAnalyzer = deps.consumerAnalyzer;
55
+ this._efficiencyScorer = deps.efficiencyScorer;
56
+ this._recommender = deps.recommender;
57
+ this._persistence = deps.persistence;
58
+ this._logger = deps.logger ?? console;
59
+ }
60
+ // ---------------------------------------------------------------------------
61
+ // processBatch
62
+ // ---------------------------------------------------------------------------
63
+ /**
64
+ * Process a batch of raw OTLP payloads through the full analysis pipeline.
65
+ *
66
+ * Each payload is normalized independently. Spans and logs are grouped by
67
+ * storyKey for per-story analysis. Items that fail normalization are skipped
68
+ * with a warning.
69
+ *
70
+ * Dual-track analysis:
71
+ * - Span-derived turns via ITurnAnalyzer
72
+ * - Log-derived turns via ILogTurnAnalyzer
73
+ * - Merged (deduplicated by spanId) before downstream analysis
74
+ */
75
+ async processBatch(items) {
76
+ if (items.length === 0)
77
+ return;
78
+ this._logger.debug({ count: items.length }, 'TelemetryPipeline.processBatch start');
79
+ // -- Step 1: Normalize all payloads --
80
+ const allSpans = [];
81
+ const allLogs = [];
82
+ for (const item of items) {
83
+ try {
84
+ const spans = this._normalizer.normalizeSpan(item.body);
85
+ allSpans.push(...spans);
86
+ }
87
+ catch (err) {
88
+ this._logger.warn({ err }, 'TelemetryPipeline: normalizeSpan failed — skipping payload');
89
+ }
90
+ try {
91
+ const logs = this._normalizer.normalizeLog(item.body, item.dispatchContext);
92
+ allLogs.push(...logs);
93
+ }
94
+ catch (err) {
95
+ this._logger.warn({ err }, 'TelemetryPipeline: normalizeLog failed — skipping payload');
96
+ }
97
+ }
98
+ this._logger.debug({ spans: allSpans.length, logs: allLogs.length }, 'TelemetryPipeline: normalized batch');
99
+ // AC1: No early return on zero spans — only return if BOTH are empty
100
+ if (allSpans.length === 0 && allLogs.length === 0) {
101
+ this._logger.debug('TelemetryPipeline: no spans or logs normalized from batch');
102
+ return;
103
+ }
104
+ // -- Step 2: Group by storyKey --
105
+ const unknownStoryKey = '__unknown__';
106
+ const spansByStory = new Map();
107
+ for (const span of allSpans) {
108
+ const key = span.storyKey ?? unknownStoryKey;
109
+ const existing = spansByStory.get(key);
110
+ if (existing !== undefined) {
111
+ existing.push(span);
112
+ }
113
+ else {
114
+ spansByStory.set(key, [span]);
115
+ }
116
+ }
117
+ const logsByStory = new Map();
118
+ for (const log of allLogs) {
119
+ const key = log.storyKey ?? unknownStoryKey;
120
+ const existing = logsByStory.get(key);
121
+ if (existing !== undefined) {
122
+ existing.push(log);
123
+ }
124
+ else {
125
+ logsByStory.set(key, [log]);
126
+ }
127
+ }
128
+ // Collect all unique story keys from both sources
129
+ const allStoryKeys = new Set();
130
+ for (const key of spansByStory.keys())
131
+ allStoryKeys.add(key);
132
+ for (const key of logsByStory.keys())
133
+ allStoryKeys.add(key);
134
+ // -- Step 3: Per-story dual-track analysis and persistence --
135
+ for (const storyKey of allStoryKeys) {
136
+ // Skip data without a story key for the analysis stages
137
+ if (storyKey === unknownStoryKey) {
138
+ const spanCount = spansByStory.get(unknownStoryKey)?.length ?? 0;
139
+ const logCount = logsByStory.get(unknownStoryKey)?.length ?? 0;
140
+ this._logger.debug({ spanCount, logCount }, 'TelemetryPipeline: data without storyKey — skipping analysis');
141
+ continue;
142
+ }
143
+ try {
144
+ const spans = spansByStory.get(storyKey) ?? [];
145
+ const logs = logsByStory.get(storyKey) ?? [];
146
+ // Dual-track turn analysis
147
+ const spanTurns = spans.length > 0 ? this._turnAnalyzer.analyze(spans) : [];
148
+ const logTurns = logs.length > 0 ? this._logTurnAnalyzer.analyze(logs) : [];
149
+ const mergedTurns = this._mergeTurns(spanTurns, logTurns);
150
+ if (spans.length > 0) {
151
+ // Has spans: full analysis with span-based categorizer/consumer
152
+ await this._processStory(storyKey, spans, mergedTurns);
153
+ }
154
+ else {
155
+ // Log-only path: efficiency + persistence only
156
+ await this._processStoryFromTurns(storyKey, mergedTurns);
157
+ }
158
+ }
159
+ catch (err) {
160
+ this._logger.warn({ err, storyKey }, 'TelemetryPipeline: story processing failed — skipping');
161
+ }
162
+ }
163
+ this._logger.debug({ storyCount: allStoryKeys.size }, 'TelemetryPipeline.processBatch complete');
164
+ }
165
+ // ---------------------------------------------------------------------------
166
+ // Private helpers
167
+ // ---------------------------------------------------------------------------
168
+ /**
169
+ * Group turns by dispatchId for per-dispatch scoring.
170
+ * Only turns with a non-empty dispatchId are included.
171
+ */
172
+ _groupTurnsByDispatchId(turns) {
173
+ const groups = new Map();
174
+ for (const turn of turns) {
175
+ if (turn.dispatchId === undefined || turn.dispatchId === '')
176
+ continue;
177
+ const existing = groups.get(turn.dispatchId);
178
+ if (existing !== undefined) {
179
+ existing.push(turn);
180
+ }
181
+ else {
182
+ groups.set(turn.dispatchId, [turn]);
183
+ }
184
+ }
185
+ return groups;
186
+ }
187
+ /**
188
+ * Merge span-derived and log-derived turns, deduplicating by spanId.
189
+ * When a span and a log share the same spanId, the span-derived turn is preferred
190
+ * (richer data). The merged result is sorted chronologically and renumbered.
191
+ */
192
+ _mergeTurns(spanTurns, logTurns) {
193
+ if (logTurns.length === 0)
194
+ return spanTurns;
195
+ if (spanTurns.length === 0)
196
+ return logTurns;
197
+ const spanTurnIds = new Set(spanTurns.map((t) => t.spanId));
198
+ const uniqueLogTurns = logTurns.filter((t) => !spanTurnIds.has(t.spanId));
199
+ return [...spanTurns, ...uniqueLogTurns]
200
+ .sort((a, b) => a.timestamp - b.timestamp)
201
+ .map((t, i) => ({ ...t, turnNumber: i + 1 }));
202
+ }
203
+ /**
204
+ * Full span-based analysis path.
205
+ */
206
+ async _processStory(storyKey, spans, mergedTurns) {
207
+ // Step 2: Turn analysis — use pre-merged turns
208
+ const turns = mergedTurns;
209
+ // Step 3: Category stats (span-based)
210
+ const categories = this._categorizer.computeCategoryStats(spans, turns);
211
+ // Step 4: Consumer stats (span-based)
212
+ const consumers = this._consumerAnalyzer.analyze(spans);
213
+ // Step 5: Efficiency score (from merged turns)
214
+ const baseTimestamp = Date.now();
215
+ const storyScore = this._efficiencyScorer.score(storyKey, turns);
216
+ const efficiencyScore = { ...storyScore, timestamp: baseTimestamp };
217
+ // Per-dispatch scoring
218
+ const dispatchGroups = this._groupTurnsByDispatchId(turns);
219
+ const dispatchScores = Array.from(dispatchGroups.entries()).map(([dispatchId, dispatchTurns], idx) => {
220
+ const firstTurn = dispatchTurns[0];
221
+ const scored = this._efficiencyScorer.score(storyKey, dispatchTurns);
222
+ return {
223
+ ...scored,
224
+ timestamp: baseTimestamp + 1 + idx,
225
+ dispatchId,
226
+ taskType: firstTurn?.taskType,
227
+ phase: firstTurn?.phase,
228
+ };
229
+ });
230
+ // Step 6: Recommendations
231
+ const generatedAt = new Date().toISOString();
232
+ const context = {
233
+ storyKey,
234
+ generatedAt,
235
+ turns,
236
+ categories,
237
+ consumers,
238
+ efficiencyScore,
239
+ allSpans: spans,
240
+ dispatchScores,
241
+ };
242
+ const recommendations = this._recommender.analyze(context);
243
+ // Step 7: Persist (shared helper — mirrors log-only path)
244
+ await this._persistStoryData(storyKey, {
245
+ turns,
246
+ efficiencyScore,
247
+ categoryStats: categories,
248
+ consumerStats: consumers,
249
+ recommendations,
250
+ dispatchScores,
251
+ });
252
+ this._logger.info({
253
+ storyKey,
254
+ turns: turns.length,
255
+ compositeScore: efficiencyScore.compositeScore,
256
+ recommendations: recommendations.length,
257
+ dispatchScores: dispatchScores.length,
258
+ }, 'TelemetryPipeline: story analysis complete');
259
+ }
260
+ /**
261
+ * Log-only analysis path: processes turns from ILogTurnAnalyzer through full
262
+ * analysis and persistence.
263
+ */
264
+ async _processStoryFromTurns(storyKey, turns) {
265
+ if (turns.length === 0)
266
+ return;
267
+ // Efficiency score from log-derived turns
268
+ const baseTimestamp = Date.now();
269
+ const storyScore = this._efficiencyScorer.score(storyKey, turns);
270
+ const efficiencyScore = { ...storyScore, timestamp: baseTimestamp };
271
+ // Category stats from turns (no raw spans needed)
272
+ const categoryStats = this._categorizer.computeCategoryStatsFromTurns(turns);
273
+ // Consumer stats from turns
274
+ const consumerStats = this._consumerAnalyzer.analyzeFromTurns(turns);
275
+ // Per-dispatch scoring
276
+ const dispatchGroups = this._groupTurnsByDispatchId(turns);
277
+ const dispatchScores = Array.from(dispatchGroups.entries()).map(([dispatchId, dispatchTurns], idx) => {
278
+ const firstTurn = dispatchTurns[0];
279
+ const scored = this._efficiencyScorer.score(storyKey, dispatchTurns);
280
+ return {
281
+ ...scored,
282
+ timestamp: baseTimestamp + 1 + idx,
283
+ dispatchId,
284
+ taskType: firstTurn?.taskType,
285
+ phase: firstTurn?.phase,
286
+ };
287
+ });
288
+ // Recommendations via Recommender with allSpans: []
289
+ const generatedAt = new Date().toISOString();
290
+ const context = {
291
+ storyKey,
292
+ generatedAt,
293
+ turns,
294
+ categories: categoryStats,
295
+ consumers: consumerStats,
296
+ efficiencyScore,
297
+ allSpans: [],
298
+ dispatchScores,
299
+ };
300
+ const recommendations = this._recommender.analyze(context);
301
+ // Persist all 5 methods via shared helper
302
+ await this._persistStoryData(storyKey, {
303
+ turns,
304
+ efficiencyScore,
305
+ categoryStats,
306
+ consumerStats,
307
+ recommendations,
308
+ dispatchScores,
309
+ });
310
+ this._logger.info({
311
+ storyKey,
312
+ turns: turns.length,
313
+ compositeScore: efficiencyScore.compositeScore,
314
+ categories: categoryStats.length,
315
+ recommendations: recommendations.length,
316
+ dispatchScores: dispatchScores.length,
317
+ }, 'TelemetryPipeline: story analysis from turns complete');
318
+ }
319
+ /**
320
+ * Shared persistence helper — called by both _processStory and _processStoryFromTurns.
321
+ * All 5 persistence calls are made here with individual error guards so a single
322
+ * failure does not abort the others.
323
+ */
324
+ async _persistStoryData(storyKey, data) {
325
+ const { turns, efficiencyScore, categoryStats, consumerStats, recommendations, dispatchScores } = data;
326
+ // Purge stale telemetry from prior runs (once per story per pipeline lifetime)
327
+ if (!this._purgedStories.has(storyKey)) {
328
+ this._purgedStories.add(storyKey);
329
+ await this._persistence.purgeStoryTelemetry(storyKey).catch((err) => this._logger.warn({ err, storyKey }, 'Failed to purge stale telemetry — continuing with persist'));
330
+ }
331
+ await Promise.all([
332
+ turns.length > 0
333
+ ? this._persistence.storeTurnAnalysis(storyKey, turns).catch((err) => this._logger.warn({ err, storyKey }, 'Failed to store turn analysis'))
334
+ : Promise.resolve(),
335
+ this._persistence.storeEfficiencyScore(efficiencyScore).catch((err) => this._logger.warn({ err, storyKey }, 'Failed to store efficiency score')),
336
+ categoryStats.length > 0
337
+ ? this._persistence.storeCategoryStats(storyKey, categoryStats).catch((err) => this._logger.warn({ err, storyKey }, 'Failed to store category stats'))
338
+ : Promise.resolve(),
339
+ consumerStats.length > 0
340
+ ? this._persistence.storeConsumerStats(storyKey, consumerStats).catch((err) => this._logger.warn({ err, storyKey }, 'Failed to store consumer stats'))
341
+ : Promise.resolve(),
342
+ recommendations.length > 0
343
+ ? this._persistence.saveRecommendations(storyKey, recommendations).catch((err) => this._logger.warn({ err, storyKey }, 'Failed to save recommendations'))
344
+ : Promise.resolve(),
345
+ ...dispatchScores.map((ds) => this._persistence.storeEfficiencyScore(ds).catch((err) => this._logger.warn({ err, storyKey, dispatchId: ds.dispatchId }, 'Failed to store dispatch efficiency score'))),
346
+ ]);
347
+ }
348
+ }
349
+ //# sourceMappingURL=telemetry-pipeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry-pipeline.js","sourceRoot":"","sources":["../../src/telemetry/telemetry-pipeline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
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
+ * Normalize any timestamp value to Unix milliseconds.
18
+ *
19
+ * Handles:
20
+ * - ISO 8601 strings (e.g. "2024-03-08T12:00:00Z")
21
+ * - Nanosecond integers or numeric strings (>= 1e18)
22
+ * - Microsecond integers or numeric strings (>= 1e15)
23
+ * - Millisecond integers or numeric strings (>= 1e12)
24
+ * - Second integers or numeric strings (< 1e12)
25
+ * - BigInt string values from OTLP `startTimeUnixNano` (e.g. "1709900000000000000")
26
+ * - null / undefined / unparseable → falls back to Date.now()
27
+ *
28
+ * @param value - Raw timestamp value of unknown type
29
+ * @returns Unix millisecond timestamp
30
+ */
31
+ export declare function normalizeTimestamp(value: unknown): number;
32
+ //# sourceMappingURL=timestamp-normalizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timestamp-normalizer.d.ts","sourceRoot":"","sources":["../../src/telemetry/timestamp-normalizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAMH;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CA4CzD"}