@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,182 @@
1
+ /**
2
+ * ConsumerAnalyzer — groups telemetry spans by consumer key and ranks by token
3
+ * consumption, producing ConsumerStats for each unique operation+tool combination.
4
+ *
5
+ * A "consumer key" is `operationName|toolName`, stable across runs and safe to
6
+ * store as a VARCHAR(300) primary-key component in Dolt.
7
+ *
8
+ * Architecture constraints:
9
+ * - Constructor injection: accepts Categorizer and ILogger (logger defaults to console)
10
+ * - Delegates classification to the injected Categorizer
11
+ * - Zero external dependencies beyond types and Categorizer from this module
12
+ *
13
+ * Migrated to @substrate-ai/core in story 41-6b.
14
+ */
15
+ // ---------------------------------------------------------------------------
16
+ // ConsumerAnalyzer
17
+ // ---------------------------------------------------------------------------
18
+ export class ConsumerAnalyzer {
19
+ _categorizer;
20
+ _logger;
21
+ constructor(categorizer, logger) {
22
+ this._categorizer = categorizer;
23
+ this._logger = logger ?? console;
24
+ }
25
+ // ---------------------------------------------------------------------------
26
+ // analyze
27
+ // ---------------------------------------------------------------------------
28
+ /**
29
+ * Group spans by consumer key, rank by totalTokens descending, and return
30
+ * ConsumerStats for each non-zero-token group.
31
+ *
32
+ * @param spans - All NormalizedSpans for the story
33
+ */
34
+ analyze(spans) {
35
+ if (spans.length === 0)
36
+ return [];
37
+ const grandTotal = spans.reduce((sum, s) => sum + s.inputTokens + s.outputTokens, 0);
38
+ // Group spans by consumerKey
39
+ const groups = new Map();
40
+ for (const span of spans) {
41
+ const key = this._buildConsumerKey(span);
42
+ const existing = groups.get(key);
43
+ if (existing !== undefined) {
44
+ existing.push(span);
45
+ }
46
+ else {
47
+ groups.set(key, [span]);
48
+ }
49
+ }
50
+ const results = [];
51
+ for (const [consumerKey, groupSpans] of groups) {
52
+ const totalTokens = groupSpans.reduce((sum, s) => sum + s.inputTokens + s.outputTokens, 0);
53
+ // Exclude zero-token groups
54
+ if (totalTokens === 0)
55
+ continue;
56
+ const percentage = grandTotal > 0 ? Math.round((totalTokens / grandTotal) * 100 * 1000) / 1000 : 0;
57
+ const eventCount = groupSpans.length;
58
+ // Determine category using the first span's operation + tool name
59
+ const firstSpan = groupSpans[0];
60
+ const toolName = this._extractToolName(firstSpan);
61
+ const operationName = firstSpan.operationName ?? firstSpan.name ?? 'unknown';
62
+ const category = this._categorizer.classify(operationName, toolName);
63
+ // Top 20 invocations sorted by totalTokens descending
64
+ const sorted = groupSpans
65
+ .slice()
66
+ .sort((a, b) => b.inputTokens + b.outputTokens - (a.inputTokens + a.outputTokens));
67
+ const topInvocations = sorted.slice(0, 20).map((s) => ({
68
+ spanId: s.spanId,
69
+ name: s.name,
70
+ toolName: this._extractToolName(s),
71
+ totalTokens: s.inputTokens + s.outputTokens,
72
+ inputTokens: s.inputTokens,
73
+ outputTokens: s.outputTokens,
74
+ }));
75
+ results.push({
76
+ consumerKey,
77
+ category,
78
+ totalTokens,
79
+ percentage,
80
+ eventCount,
81
+ topInvocations,
82
+ });
83
+ }
84
+ this._logger.debug({ consumers: results.length, grandTotal }, 'Computed consumer stats');
85
+ return results.sort((a, b) => b.totalTokens - a.totalTokens);
86
+ }
87
+ // ---------------------------------------------------------------------------
88
+ // analyzeFromTurns
89
+ // ---------------------------------------------------------------------------
90
+ /**
91
+ * Group turns by consumer key (model|toolName), rank by totalTokens descending,
92
+ * and return ConsumerStats for each non-zero-token group.
93
+ *
94
+ * @param turns - All TurnAnalysis records for the story
95
+ */
96
+ analyzeFromTurns(turns) {
97
+ if (turns.length === 0)
98
+ return [];
99
+ const grandTotal = turns.reduce((sum, t) => sum + t.inputTokens + t.outputTokens, 0);
100
+ // Group turns by consumerKey (model|toolName)
101
+ const groups = new Map();
102
+ for (const turn of turns) {
103
+ const key = this._buildConsumerKeyFromTurn(turn);
104
+ const existing = groups.get(key);
105
+ if (existing !== undefined) {
106
+ existing.push(turn);
107
+ }
108
+ else {
109
+ groups.set(key, [turn]);
110
+ }
111
+ }
112
+ const results = [];
113
+ for (const [consumerKey, groupTurns] of groups) {
114
+ const totalTokens = groupTurns.reduce((sum, t) => sum + t.inputTokens + t.outputTokens, 0);
115
+ // Exclude zero-token groups
116
+ if (totalTokens === 0)
117
+ continue;
118
+ const percentage = grandTotal > 0 ? Math.round((totalTokens / grandTotal) * 100 * 1000) / 1000 : 0;
119
+ const eventCount = groupTurns.length;
120
+ // Determine category using the first turn's name + toolName
121
+ const firstTurn = groupTurns[0];
122
+ const category = this._categorizer.classify(firstTurn.name, firstTurn.toolName);
123
+ // Top 20 invocations sorted by totalTokens descending
124
+ const sorted = groupTurns
125
+ .slice()
126
+ .sort((a, b) => b.inputTokens + b.outputTokens - (a.inputTokens + a.outputTokens));
127
+ const topInvocations = sorted.slice(0, 20).map((t) => ({
128
+ spanId: t.spanId,
129
+ name: t.name,
130
+ toolName: t.toolName,
131
+ totalTokens: t.inputTokens + t.outputTokens,
132
+ inputTokens: t.inputTokens,
133
+ outputTokens: t.outputTokens,
134
+ }));
135
+ results.push({
136
+ consumerKey,
137
+ category,
138
+ totalTokens,
139
+ percentage,
140
+ eventCount,
141
+ topInvocations,
142
+ });
143
+ }
144
+ this._logger.debug({ consumers: results.length, grandTotal }, 'Computed consumer stats from turns');
145
+ return results.sort((a, b) => b.totalTokens - a.totalTokens);
146
+ }
147
+ // ---------------------------------------------------------------------------
148
+ // Private helpers
149
+ // ---------------------------------------------------------------------------
150
+ /**
151
+ * Build a stable, collision-resistant consumer key from a span.
152
+ * Format: `operationName|toolName` (tool part is empty string if absent).
153
+ */
154
+ _buildConsumerKey(span) {
155
+ const operationPart = (span.operationName ?? span.name ?? 'unknown').slice(0, 200);
156
+ const toolPart = (this._extractToolName(span) ?? '').slice(0, 100);
157
+ return `${operationPart}|${toolPart}`;
158
+ }
159
+ /**
160
+ * Build a stable consumer key from a turn.
161
+ * Format: `model|toolName` (tool part is empty string if absent).
162
+ */
163
+ _buildConsumerKeyFromTurn(turn) {
164
+ const modelPart = (turn.model ?? 'unknown').slice(0, 200);
165
+ const toolPart = (turn.toolName ?? '').slice(0, 100);
166
+ return `${modelPart}|${toolPart}`;
167
+ }
168
+ /**
169
+ * Extract a tool name from span attributes, checking three known attribute keys
170
+ * in priority order.
171
+ */
172
+ _extractToolName(span) {
173
+ if (!span.attributes)
174
+ return undefined;
175
+ const attrs = span.attributes;
176
+ const name = attrs['tool.name'] ||
177
+ attrs['llm.tool.name'] ||
178
+ attrs['claude.tool_name'];
179
+ return name || undefined;
180
+ }
181
+ }
182
+ //# sourceMappingURL=consumer-analyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consumer-analyzer.js","sourceRoot":"","sources":["../../src/telemetry/consumer-analyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Cost table for LLM model pricing.
3
+ *
4
+ * Provides per-million-token rates for known models and an `estimateCost()`
5
+ * function that computes cost from a TokenCounts object.
6
+ *
7
+ * Cache reads use the explicit `cacheReadPerMToken` from the table (already
8
+ * pre-discounted to 10% of input rate for Anthropic models).
9
+ *
10
+ * Returns 0 for unknown models without throwing.
11
+ */
12
+ import type { TokenCounts, ModelPricing } from './types.js';
13
+ /**
14
+ * Per-million-token pricing for known LLM models.
15
+ * All prices are in USD.
16
+ */
17
+ export declare const COST_TABLE: Record<string, ModelPricing>;
18
+ /**
19
+ * Resolve a model string to a key in COST_TABLE.
20
+ * Returns the matched key, or undefined if not found.
21
+ *
22
+ * Performs exact match first, then case-insensitive substring match.
23
+ */
24
+ export declare function resolveModel(model: string): string | undefined;
25
+ /**
26
+ * Estimate the cost in USD for a set of token counts and a model identifier.
27
+ *
28
+ * - Uses `cacheReadPerMToken` from the table directly (already discounted).
29
+ * - Returns 0 for unknown models without throwing.
30
+ *
31
+ * @param model - Model identifier string (exact or fuzzy match against COST_TABLE)
32
+ * @param tokens - Token counts object
33
+ * @returns Estimated cost in USD
34
+ */
35
+ export declare function estimateCost(model: string, tokens: TokenCounts): number;
36
+ //# sourceMappingURL=cost-table.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost-table.d.ts","sourceRoot":"","sources":["../../src/telemetry/cost-table.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAM3D;;;GAGG;AACH,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAiDnD,CAAA;AAMD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAsB9D;AAMD;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,MAAM,CAkBvE"}
@@ -0,0 +1,127 @@
1
+ /**
2
+ * Cost table for LLM model pricing.
3
+ *
4
+ * Provides per-million-token rates for known models and an `estimateCost()`
5
+ * function that computes cost from a TokenCounts object.
6
+ *
7
+ * Cache reads use the explicit `cacheReadPerMToken` from the table (already
8
+ * pre-discounted to 10% of input rate for Anthropic models).
9
+ *
10
+ * Returns 0 for unknown models without throwing.
11
+ */
12
+ // ---------------------------------------------------------------------------
13
+ // COST_TABLE
14
+ // ---------------------------------------------------------------------------
15
+ /**
16
+ * Per-million-token pricing for known LLM models.
17
+ * All prices are in USD.
18
+ */
19
+ export const COST_TABLE = {
20
+ 'claude-3-opus-20240229': {
21
+ inputPerMToken: 15.0,
22
+ outputPerMToken: 75.0,
23
+ cacheReadPerMToken: 1.5,
24
+ cacheCreationPerMToken: 18.75,
25
+ },
26
+ 'claude-3-5-sonnet-20241022': {
27
+ inputPerMToken: 3.0,
28
+ outputPerMToken: 15.0,
29
+ cacheReadPerMToken: 0.3,
30
+ cacheCreationPerMToken: 3.75,
31
+ },
32
+ 'claude-3-5-haiku-20241022': {
33
+ inputPerMToken: 0.8,
34
+ outputPerMToken: 4.0,
35
+ cacheReadPerMToken: 0.08,
36
+ cacheCreationPerMToken: 1.0,
37
+ },
38
+ 'claude-3-haiku-20240307': {
39
+ inputPerMToken: 0.25,
40
+ outputPerMToken: 1.25,
41
+ cacheReadPerMToken: 0.03,
42
+ cacheCreationPerMToken: 0.3,
43
+ },
44
+ 'claude-3-sonnet-20240229': {
45
+ inputPerMToken: 3.0,
46
+ outputPerMToken: 15.0,
47
+ cacheReadPerMToken: 0.3,
48
+ cacheCreationPerMToken: 3.75,
49
+ },
50
+ 'gpt-4': {
51
+ inputPerMToken: 30.0,
52
+ outputPerMToken: 60.0,
53
+ cacheReadPerMToken: 3.0,
54
+ cacheCreationPerMToken: 30.0,
55
+ },
56
+ 'gpt-4-turbo': {
57
+ inputPerMToken: 10.0,
58
+ outputPerMToken: 30.0,
59
+ cacheReadPerMToken: 1.0,
60
+ cacheCreationPerMToken: 10.0,
61
+ },
62
+ 'gpt-3.5-turbo': {
63
+ inputPerMToken: 0.5,
64
+ outputPerMToken: 1.5,
65
+ cacheReadPerMToken: 0.05,
66
+ cacheCreationPerMToken: 0.5,
67
+ },
68
+ };
69
+ // ---------------------------------------------------------------------------
70
+ // resolveModel
71
+ // ---------------------------------------------------------------------------
72
+ /**
73
+ * Resolve a model string to a key in COST_TABLE.
74
+ * Returns the matched key, or undefined if not found.
75
+ *
76
+ * Performs exact match first, then case-insensitive substring match.
77
+ */
78
+ export function resolveModel(model) {
79
+ // Exact match
80
+ if (model in COST_TABLE) {
81
+ return model;
82
+ }
83
+ // Case-insensitive exact match
84
+ const lower = model.toLowerCase();
85
+ for (const key of Object.keys(COST_TABLE)) {
86
+ if (key.toLowerCase() === lower) {
87
+ return key;
88
+ }
89
+ }
90
+ // Substring match (model string contains the key or key contains the model string)
91
+ for (const key of Object.keys(COST_TABLE)) {
92
+ if (lower.includes(key.toLowerCase()) || key.toLowerCase().includes(lower)) {
93
+ return key;
94
+ }
95
+ }
96
+ return undefined;
97
+ }
98
+ // ---------------------------------------------------------------------------
99
+ // estimateCost
100
+ // ---------------------------------------------------------------------------
101
+ /**
102
+ * Estimate the cost in USD for a set of token counts and a model identifier.
103
+ *
104
+ * - Uses `cacheReadPerMToken` from the table directly (already discounted).
105
+ * - Returns 0 for unknown models without throwing.
106
+ *
107
+ * @param model - Model identifier string (exact or fuzzy match against COST_TABLE)
108
+ * @param tokens - Token counts object
109
+ * @returns Estimated cost in USD
110
+ */
111
+ export function estimateCost(model, tokens) {
112
+ const resolvedKey = resolveModel(model);
113
+ if (resolvedKey === undefined) {
114
+ return 0;
115
+ }
116
+ const pricing = COST_TABLE[resolvedKey];
117
+ if (pricing === undefined) {
118
+ return 0;
119
+ }
120
+ const perM = 1_000_000;
121
+ const inputCost = (tokens.input / perM) * pricing.inputPerMToken;
122
+ const outputCost = (tokens.output / perM) * pricing.outputPerMToken;
123
+ const cacheReadCost = (tokens.cacheRead / perM) * pricing.cacheReadPerMToken;
124
+ const cacheCreationCost = (tokens.cacheCreation / perM) * pricing.cacheCreationPerMToken;
125
+ return inputCost + outputCost + cacheReadCost + cacheCreationCost;
126
+ }
127
+ //# sourceMappingURL=cost-table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost-table.js","sourceRoot":"","sources":["../../src/telemetry/cost-table.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * EfficiencyScorer — computes composite 0-100 efficiency scores for story runs.
3
+ *
4
+ * The composite score combines four sub-scores (Epic 35 — Telemetry Scoring v2):
5
+ * - cacheHitSubScore (weight 25%): how well the story leverages prompt caching
6
+ * - ioRatioSubScore (weight 25%): logarithmic output/freshInput productivity curve
7
+ * - contextManagement (weight 25%): frequency of context spikes
8
+ * - tokenDensitySubScore (weight 25%): output tokens per turn vs task-type baseline
9
+ *
10
+ * Cold-start turns (first turn per dispatch) are excluded from sub-score
11
+ * computation but included in totalTurns for observability (Story 35-3).
12
+ *
13
+ * Architecture constraints:
14
+ * - Constructor injection: accepts ILogger via constructor (defaults to console)
15
+ * - Zero LLM calls — pure statistical computation
16
+ * - No external dependencies beyond types from this module
17
+ *
18
+ * Migrated to @substrate-ai/core in story 41-6b.
19
+ */
20
+ import type { ILogger } from '../dispatch/types.js';
21
+ import type { TurnAnalysis, EfficiencyScore } from './types.js';
22
+ import type { IEfficiencyScorer } from './telemetry-pipeline.js';
23
+ export declare class EfficiencyScorer implements IEfficiencyScorer {
24
+ private readonly _logger;
25
+ constructor(logger?: ILogger);
26
+ /**
27
+ * Compute an efficiency score for a story given its turn analyses.
28
+ *
29
+ * Returns a zeroed `EfficiencyScore` immediately when `turns` is empty.
30
+ *
31
+ * @param storyKey - The story identifier (e.g. "27-6")
32
+ * @param turns - Turn analysis records from `TurnAnalyzer.analyze()`
33
+ */
34
+ score(storyKey: string, turns: TurnAnalysis[]): EfficiencyScore;
35
+ /**
36
+ * Identify cold-start turns: the first turn per dispatchId.
37
+ * Returns a set of spanIds that should be excluded from scoring.
38
+ * Only considers turns with a non-empty dispatchId.
39
+ */
40
+ private _identifyColdStartTurns;
41
+ /**
42
+ * Infer the task type from turns. Returns the task type only when all turns
43
+ * with a taskType agree (unanimous). For mixed task types (story-level
44
+ * scoring across dispatches), returns undefined → default baseline.
45
+ */
46
+ private _inferTaskType;
47
+ /**
48
+ * Average cache hit rate across all turns, clamped to [0, 100].
49
+ * Formula: clamp(avgCacheHitRate × 100, 0, 100)
50
+ */
51
+ private _computeCacheHitSubScore;
52
+ /**
53
+ * I/O ratio sub-score: logarithmic output/freshInput productivity curve (Story 35-1).
54
+ *
55
+ * Replaces the old binary threshold (>=1 → 100) with a logarithmic curve
56
+ * that provides gradient across the observed range:
57
+ * - score = clamp(log10(ratio) / log10(targetRatio) * 100, 0, 100)
58
+ * - ratio = avg(outputTokens / max(freshInputTokens, 1)) across turns
59
+ * - targetRatio is calibrated per task type (Story 35-2)
60
+ *
61
+ * Examples (TARGET=100): ratio 1→0, 10→50, 50→85, 100→100, 200→100(clamped)
62
+ */
63
+ private _computeIoRatioSubScore;
64
+ /**
65
+ * Context management sub-score: penalizes context spike frequency.
66
+ * Formula: clamp(100 - spikeRatio × 100, 0, 100)
67
+ * where spikeRatio = contextSpikeCount / max(totalTurns, 1)
68
+ */
69
+ private _computeContextManagementSubScore;
70
+ /**
71
+ * Token density sub-score: output tokens per turn vs task-type baseline (Story 35-4).
72
+ *
73
+ * Measures whether the agent is producing useful output or spinning:
74
+ * - score = clamp(avgOutputPerTurn / expectedOutputPerTurn * 100, 0, 100)
75
+ * - expectedOutputPerTurn is calibrated per task type (Story 35-2)
76
+ *
77
+ * Below-baseline dispatches get proportionally lower scores.
78
+ * At-or-above-baseline dispatches score 100.
79
+ */
80
+ private _computeTokenDensitySubScore;
81
+ private _computeAvgCacheHitRate;
82
+ /**
83
+ * Average I/O ratio: totalInput / max(outputTokens, 1) per turn.
84
+ * Total input = inputTokens (fresh) + cacheReadTokens (cached).
85
+ */
86
+ private _computeAvgIoRatio;
87
+ /**
88
+ * Group turns by model, computing per-group efficiency metrics.
89
+ * Turns with null/undefined model are grouped under "unknown".
90
+ */
91
+ private _buildPerModelBreakdown;
92
+ /**
93
+ * Group turns by source, computing a per-group composite score using the
94
+ * same formula as the overall score. Sources with zero turns are excluded.
95
+ */
96
+ private _buildPerSourceBreakdown;
97
+ private _clamp;
98
+ }
99
+ /**
100
+ * Create an EfficiencyScorer with the given logger.
101
+ */
102
+ export declare function createEfficiencyScorer(logger?: ILogger): EfficiencyScorer;
103
+ //# sourceMappingURL=efficiency-scorer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"efficiency-scorer.d.ts","sourceRoot":"","sources":["../../src/telemetry/efficiency-scorer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAqC,MAAM,YAAY,CAAA;AAClG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAahE,qBAAa,gBAAiB,YAAW,iBAAiB;IACxD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,MAAM,CAAC,EAAE,OAAO;IAQ5B;;;;;;;OAOG;IACH,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,eAAe;IAoF/D;;;;OAIG;IACH,OAAO,CAAC,uBAAuB;IAmB/B;;;;OAIG;IACH,OAAO,CAAC,cAAc;IActB;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IAKhC;;;;;;;;;;OAUG;IACH,OAAO,CAAC,uBAAuB;IAa/B;;;;OAIG;IACH,OAAO,CAAC,iCAAiC;IAOzC;;;;;;;;;OASG;IACH,OAAO,CAAC,4BAA4B;IAWpC,OAAO,CAAC,uBAAuB;IAM/B;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAa1B;;;OAGG;IACH,OAAO,CAAC,uBAAuB;IAwC/B;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IA4ChC,OAAO,CAAC,MAAM;CAGf;AAMD;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,gBAAgB,CAEzE"}