@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,87 @@
1
+ /**
2
+ * Canonical cost-tracker types — shared interfaces for the cost tracking module.
3
+ *
4
+ * Defines types for:
5
+ * - CostEntry: a single recorded cost event tied to a task
6
+ * - TaskCostSummary: aggregated cost for a single task
7
+ * - SessionCostSummary: aggregated cost and savings for a full session
8
+ * - AgentCostBreakdown: per-agent cost within a session
9
+ *
10
+ * These are the canonical definitions. The monolith's src/modules/cost-tracker/types.ts
11
+ * re-exports from here to avoid dual source-of-truth drift.
12
+ */
13
+ /**
14
+ * A single cost record tied to one task execution.
15
+ */
16
+ export interface CostEntry {
17
+ /** Auto-assigned by the database (INTEGER PRIMARY KEY AUTOINCREMENT) */
18
+ id: number;
19
+ session_id: string;
20
+ /** Nullable — matches the DB schema: task_id TEXT REFERENCES tasks(id) (nullable) */
21
+ task_id: string | null;
22
+ agent: string;
23
+ provider: string;
24
+ model: string;
25
+ billing_mode: 'subscription' | 'api';
26
+ tokens_input: number;
27
+ tokens_output: number;
28
+ cost_usd: number;
29
+ savings_usd: number;
30
+ created_at: string;
31
+ }
32
+ /**
33
+ * Aggregated cost data for a single task.
34
+ */
35
+ export interface TaskCostSummary {
36
+ task_id: string;
37
+ cost_usd: number;
38
+ tokens: {
39
+ input: number;
40
+ output: number;
41
+ total: number;
42
+ };
43
+ billing_mode: 'subscription' | 'api' | 'mixed';
44
+ savings_usd: number;
45
+ }
46
+ /**
47
+ * Cost breakdown per agent within a session.
48
+ */
49
+ export interface AgentCostBreakdown {
50
+ agent: string;
51
+ task_count: number;
52
+ cost_usd: number;
53
+ savings_usd: number;
54
+ subscription_tasks: number;
55
+ api_tasks: number;
56
+ }
57
+ /**
58
+ * Aggregated cost summary for an entire orchestration session.
59
+ *
60
+ * Includes breakdown between subscription-covered (zero marginal cost) and
61
+ * API-billed usage, plus savings from subscription routing.
62
+ *
63
+ * Also includes budget status fields for display in CLI/dashboard.
64
+ */
65
+ export interface SessionCostSummary {
66
+ session_id: string;
67
+ total_cost_usd: number;
68
+ subscription_cost_usd: number;
69
+ api_cost_usd: number;
70
+ savings_usd: number;
71
+ /** Human-readable savings summary */
72
+ savingsSummary: string;
73
+ per_agent_breakdown: AgentCostBreakdown[];
74
+ task_count: number;
75
+ subscription_task_count: number;
76
+ api_task_count: number;
77
+ created_at: string;
78
+ /** Budget cap for the session in USD (undefined if no cap set) */
79
+ budget_usd?: number;
80
+ /** Remaining budget after total costs */
81
+ remaining_budget_usd?: number;
82
+ /** Percentage of budget used (0–100+) */
83
+ percentage_used?: number;
84
+ /** Budget status category */
85
+ budget_status?: 'ok' | 'warning' | 'exceeded' | 'unlimited';
86
+ }
87
+ //# sourceMappingURL=cost-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost-types.d.ts","sourceRoot":"","sources":["../../src/persistence/cost-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,wEAAwE;IACxE,EAAE,EAAE,MAAM,CAAA;IACV,UAAU,EAAE,MAAM,CAAA;IAClB,qFAAqF;IACrF,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,YAAY,EAAE,cAAc,GAAG,KAAK,CAAA;IACpC,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;IACrB,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;CACnB;AAMD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE;QACN,KAAK,EAAE,MAAM,CAAA;QACb,MAAM,EAAE,MAAM,CAAA;QACd,KAAK,EAAE,MAAM,CAAA;KACd,CAAA;IACD,YAAY,EAAE,cAAc,GAAG,KAAK,GAAG,OAAO,CAAA;IAC9C,WAAW,EAAE,MAAM,CAAA;CACpB;AAMD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,kBAAkB,EAAE,MAAM,CAAA;IAC1B,SAAS,EAAE,MAAM,CAAA;CAClB;AAMD;;;;;;;GAOG;AACH,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAA;IAClB,cAAc,EAAE,MAAM,CAAA;IACtB,qBAAqB,EAAE,MAAM,CAAA;IAC7B,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,EAAE,MAAM,CAAA;IACnB,qCAAqC;IACrC,cAAc,EAAE,MAAM,CAAA;IACtB,mBAAmB,EAAE,kBAAkB,EAAE,CAAA;IACzC,UAAU,EAAE,MAAM,CAAA;IAClB,uBAAuB,EAAE,MAAM,CAAA;IAC/B,cAAc,EAAE,MAAM,CAAA;IACtB,UAAU,EAAE,MAAM,CAAA;IAClB,kEAAkE;IAClE,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,yCAAyC;IACzC,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,yCAAyC;IACzC,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,6BAA6B;IAC7B,aAAa,CAAC,EAAE,IAAI,GAAG,SAAS,GAAG,UAAU,GAAG,WAAW,CAAA;CAC5D"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Canonical cost-tracker types — shared interfaces for the cost tracking module.
3
+ *
4
+ * Defines types for:
5
+ * - CostEntry: a single recorded cost event tied to a task
6
+ * - TaskCostSummary: aggregated cost for a single task
7
+ * - SessionCostSummary: aggregated cost and savings for a full session
8
+ * - AgentCostBreakdown: per-agent cost within a session
9
+ *
10
+ * These are the canonical definitions. The monolith's src/modules/cost-tracker/types.ts
11
+ * re-exports from here to avoid dual source-of-truth drift.
12
+ */
13
+ export {};
14
+ //# sourceMappingURL=cost-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost-types.js","sourceRoot":"","sources":["../../src/persistence/cost-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Unit tests for DoltDatabaseAdapter transaction() + DoltClient.transact()
3
+ *
4
+ * Story 53-14 acceptance criteria:
5
+ * AC1: Pool-mode transactions use a dedicated connection (no query scatter)
6
+ * AC2: CLI-mode transactions use a single batched dolt sql invocation
7
+ * AC4: Existing DoltDatabaseAdapter.transaction() call sites unchanged
8
+ */
9
+ export {};
10
+ //# sourceMappingURL=dolt-adapter-transaction.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dolt-adapter-transaction.test.d.ts","sourceRoot":"","sources":["../../src/persistence/dolt-adapter-transaction.test.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
@@ -0,0 +1,359 @@
1
+ /**
2
+ * Unit tests for DoltDatabaseAdapter transaction() + DoltClient.transact()
3
+ *
4
+ * Story 53-14 acceptance criteria:
5
+ * AC1: Pool-mode transactions use a dedicated connection (no query scatter)
6
+ * AC2: CLI-mode transactions use a single batched dolt sql invocation
7
+ * AC4: Existing DoltDatabaseAdapter.transaction() call sites unchanged
8
+ */
9
+ import { describe, it, expect, vi } from 'vitest';
10
+ import { DoltDatabaseAdapter } from './dolt-adapter.js';
11
+ import { DoltClient } from './dolt-client.js';
12
+ // ---------------------------------------------------------------------------
13
+ // Helpers
14
+ // ---------------------------------------------------------------------------
15
+ /** Build a minimal mock DoltClientLike that includes both query() and transact(). */
16
+ function makeMockClient(overrides = {}) {
17
+ return {
18
+ query: vi.fn().mockResolvedValue([]),
19
+ transact: vi.fn().mockImplementation(async (fn) => {
20
+ const txQuery = (_sql, _params) => Promise.resolve([]);
21
+ return fn(txQuery);
22
+ }),
23
+ close: vi.fn().mockResolvedValue(undefined),
24
+ ...overrides,
25
+ };
26
+ }
27
+ // ---------------------------------------------------------------------------
28
+ // AC1: Pool-mode — dedicated connection, BEGIN + COMMIT on same conn
29
+ // ---------------------------------------------------------------------------
30
+ describe('DoltClient.transact() — pool mode (AC1)', () => {
31
+ function makeClientWithMockPool() {
32
+ const mockConn = {
33
+ execute: vi.fn().mockResolvedValue([[], []]),
34
+ release: vi.fn(),
35
+ };
36
+ const mockPool = {
37
+ getConnection: vi.fn().mockResolvedValue(mockConn),
38
+ };
39
+ const client = new DoltClient({ repoPath: '/tmp/fake-repo' });
40
+ // @ts-expect-error - private field injection for test
41
+ client._pool = mockPool;
42
+ // @ts-expect-error - private field injection for test
43
+ client._useCliMode = false;
44
+ // @ts-expect-error - private field injection for test
45
+ client._connected = true;
46
+ return { client, mockConn, mockPool };
47
+ }
48
+ it('executes BEGIN, user queries, and COMMIT on the same connection', async () => {
49
+ const { client, mockConn, mockPool } = makeClientWithMockPool();
50
+ const executedSql = [];
51
+ mockConn.execute.mockImplementation(async (sql) => {
52
+ executedSql.push(sql);
53
+ return [[], []];
54
+ });
55
+ await client.transact(async (txQuery) => {
56
+ await txQuery('INSERT INTO foo VALUES (1)');
57
+ await txQuery('INSERT INTO foo VALUES (2)');
58
+ });
59
+ // All calls go through the same connection object
60
+ expect(executedSql).toEqual([
61
+ 'BEGIN',
62
+ 'INSERT INTO foo VALUES (1)',
63
+ 'INSERT INTO foo VALUES (2)',
64
+ 'COMMIT',
65
+ ]);
66
+ // Exactly one connection was acquired
67
+ expect(mockPool.getConnection).toHaveBeenCalledOnce();
68
+ // Connection is released in finally
69
+ expect(mockConn.release).toHaveBeenCalledOnce();
70
+ });
71
+ it('issues ROLLBACK and releases connection when fn() throws', async () => {
72
+ const { client, mockConn } = makeClientWithMockPool();
73
+ const executedSql = [];
74
+ mockConn.execute.mockImplementation(async (sql) => {
75
+ executedSql.push(sql);
76
+ return [[], []];
77
+ });
78
+ await expect(client.transact(async () => {
79
+ throw new Error('forced failure');
80
+ })).rejects.toThrow('forced failure');
81
+ expect(executedSql).toContain('ROLLBACK');
82
+ expect(executedSql).not.toContain('COMMIT');
83
+ // Connection must be released even on error
84
+ expect(mockConn.release).toHaveBeenCalledOnce();
85
+ });
86
+ it('two concurrent transactions acquire separate connections (no query interleaving)', async () => {
87
+ const connA = {
88
+ execute: vi.fn().mockResolvedValue([[], []]),
89
+ release: vi.fn(),
90
+ };
91
+ const connB = {
92
+ execute: vi.fn().mockResolvedValue([[], []]),
93
+ release: vi.fn(),
94
+ };
95
+ let acquireCount = 0;
96
+ const mockPool = {
97
+ getConnection: vi.fn().mockImplementation(() => {
98
+ acquireCount++;
99
+ return Promise.resolve(acquireCount === 1 ? connA : connB);
100
+ }),
101
+ };
102
+ const client = new DoltClient({ repoPath: '/tmp/fake-repo' });
103
+ // @ts-expect-error - private field injection for test
104
+ client._pool = mockPool;
105
+ // @ts-expect-error - private field injection for test
106
+ client._useCliMode = false;
107
+ // @ts-expect-error - private field injection for test
108
+ client._connected = true;
109
+ // Run both transactions concurrently
110
+ await Promise.all([
111
+ client.transact(async (txQuery) => {
112
+ await txQuery('INSERT INTO t1 VALUES (1)');
113
+ }),
114
+ client.transact(async (txQuery) => {
115
+ await txQuery('INSERT INTO t2 VALUES (2)');
116
+ }),
117
+ ]);
118
+ // Two separate connections were acquired
119
+ expect(mockPool.getConnection).toHaveBeenCalledTimes(2);
120
+ // connA contains only t1 SQL; connB contains only t2 SQL
121
+ const sqlA = connA.execute.mock.calls.map((c) => c[0]);
122
+ const sqlB = connB.execute.mock.calls.map((c) => c[0]);
123
+ expect(sqlA).toContain('INSERT INTO t1 VALUES (1)');
124
+ expect(sqlA).not.toContain('INSERT INTO t2 VALUES (2)');
125
+ expect(sqlB).toContain('INSERT INTO t2 VALUES (2)');
126
+ expect(sqlB).not.toContain('INSERT INTO t1 VALUES (1)');
127
+ });
128
+ });
129
+ // ---------------------------------------------------------------------------
130
+ // AC2: CLI mode — batch statement collection + single dolt invocation
131
+ // ---------------------------------------------------------------------------
132
+ describe('DoltClient.transact() — CLI mode (AC2)', () => {
133
+ function makeCliClient() {
134
+ const client = new DoltClient({ repoPath: '/tmp/dolt-repo' });
135
+ // @ts-expect-error - private field injection for test
136
+ client._useCliMode = true;
137
+ // @ts-expect-error - private field injection for test
138
+ client._connected = true;
139
+ return client;
140
+ }
141
+ it('does NOT call query() for statements within transact() — they are collected', async () => {
142
+ const client = makeCliClient();
143
+ const querySpy = vi.spyOn(client, 'query');
144
+ // Stub _withCliLock to avoid actual dolt binary invocation by assigning a no-op
145
+ const lockStub = vi.fn().mockResolvedValue(undefined);
146
+ // @ts-expect-error - override private method for test
147
+ client._withCliLock = lockStub;
148
+ await client.transact(async (txQuery) => {
149
+ await txQuery('INSERT INTO foo VALUES (1)');
150
+ await txQuery('INSERT INTO foo VALUES (2)');
151
+ });
152
+ // query() must NOT be called — statements are batched, not individually dispatched
153
+ expect(querySpy).not.toHaveBeenCalled();
154
+ // _withCliLock WAS called once (the single batch invocation)
155
+ expect(lockStub).toHaveBeenCalledOnce();
156
+ });
157
+ it('assembles BEGIN/.../COMMIT batch and invokes _withCliLock exactly once', async () => {
158
+ const client = makeCliClient();
159
+ let capturedBatchSql;
160
+ // Execute the inner fn so we can inspect the batch SQL.
161
+ // runExecFile will throw (no real dolt binary), but DoltQueryError
162
+ // exposes the batch SQL via its .sql property — capture it and swallow
163
+ // the error so that transact() can return normally.
164
+ const lockStub = vi.fn().mockImplementation(async (fn) => {
165
+ try {
166
+ await fn();
167
+ }
168
+ catch (err) {
169
+ if (err instanceof Error && 'sql' in err) {
170
+ capturedBatchSql = err.sql;
171
+ }
172
+ // Swallow error to allow transact() to complete normally
173
+ }
174
+ });
175
+ // @ts-expect-error - override private method for test
176
+ client._withCliLock = lockStub;
177
+ await client.transact(async (txQuery) => {
178
+ await txQuery("INSERT INTO foo (id) VALUES (1)");
179
+ await txQuery("INSERT INTO foo (id) VALUES (2)");
180
+ });
181
+ // Single batch invocation regardless of statement count
182
+ expect(lockStub).toHaveBeenCalledOnce();
183
+ // The batch SQL must wrap all statements with BEGIN and COMMIT in order
184
+ expect(capturedBatchSql).toBe("BEGIN; INSERT INTO foo (id) VALUES (1); INSERT INTO foo (id) VALUES (2); COMMIT");
185
+ });
186
+ it('does NOT call _withCliLock when fn() issues zero statements', async () => {
187
+ const client = makeCliClient();
188
+ const lockStub = vi.fn().mockResolvedValue(undefined);
189
+ // @ts-expect-error - override private method for test
190
+ client._withCliLock = lockStub;
191
+ const result = await client.transact(async () => {
192
+ // No SQL statements
193
+ return 'empty';
194
+ });
195
+ expect(lockStub).not.toHaveBeenCalled();
196
+ expect(result).toBe('empty');
197
+ });
198
+ it('CLI-mode transact() rejects when the batch dolt invocation fails', async () => {
199
+ const client = makeCliClient();
200
+ // _withCliLock stub that executes the inner fn (which calls runExecFile — will fail)
201
+ const lockStub = vi.fn().mockImplementation(async (fn) => fn());
202
+ // @ts-expect-error - override private method for test
203
+ client._withCliLock = lockStub;
204
+ // Should reject (no real dolt binary available)
205
+ await expect(client.transact(async (txQuery) => {
206
+ await txQuery("INSERT INTO foo VALUES (1)");
207
+ })).rejects.toBeDefined();
208
+ });
209
+ });
210
+ // ---------------------------------------------------------------------------
211
+ // _resolveParams unit tests (AC2 — correct param interpolation in batch SQL)
212
+ // ---------------------------------------------------------------------------
213
+ describe('DoltClient._resolveParams() — parameter interpolation (AC2)', () => {
214
+ function resolveParams(sql, params) {
215
+ const client = new DoltClient({ repoPath: '/tmp/repo' });
216
+ // @ts-expect-error - accessing private method for test
217
+ return client._resolveParams(sql, params);
218
+ }
219
+ it('substitutes numeric params without quoting', () => {
220
+ expect(resolveParams('SELECT * FROM t WHERE id = ?', [42])).toBe('SELECT * FROM t WHERE id = 42');
221
+ });
222
+ it('substitutes string params with single-quote escaping', () => {
223
+ expect(resolveParams("INSERT INTO t VALUES (?)", ['hello'])).toBe("INSERT INTO t VALUES ('hello')");
224
+ });
225
+ it('escapes single quotes inside string values', () => {
226
+ expect(resolveParams("INSERT INTO t VALUES (?)", ["it's fine"])).toBe("INSERT INTO t VALUES ('it''s fine')");
227
+ });
228
+ it('substitutes null/undefined as NULL', () => {
229
+ expect(resolveParams("INSERT INTO t VALUES (?, ?)", [null, undefined])).toBe("INSERT INTO t VALUES (NULL, NULL)");
230
+ });
231
+ it('handles multiple params in order', () => {
232
+ expect(resolveParams("INSERT INTO t (a, b) VALUES (?, ?)", ['hello', null])).toBe("INSERT INTO t (a, b) VALUES ('hello', NULL)");
233
+ });
234
+ it('returns SQL unchanged when no params', () => {
235
+ expect(resolveParams('SELECT 1', undefined)).toBe('SELECT 1');
236
+ expect(resolveParams('SELECT 1', [])).toBe('SELECT 1');
237
+ });
238
+ });
239
+ // ---------------------------------------------------------------------------
240
+ // DoltDatabaseAdapter.transaction() — delegates to client.transact() (AC4)
241
+ // ---------------------------------------------------------------------------
242
+ describe('DoltDatabaseAdapter.transaction() — delegates to client.transact()', () => {
243
+ it('calls client.transact() — does NOT issue BEGIN/COMMIT via query()', async () => {
244
+ const transactMock = vi.fn().mockImplementation(async (fn) => {
245
+ const txQuery = (_sql, _params) => Promise.resolve([]);
246
+ return fn(txQuery);
247
+ });
248
+ const client = makeMockClient({ transact: transactMock });
249
+ const adapter = new DoltDatabaseAdapter(client);
250
+ const result = await adapter.transaction(async (tx) => {
251
+ await tx.exec("INSERT INTO t VALUES (1)");
252
+ return 'done';
253
+ });
254
+ expect(result).toBe('done');
255
+ expect(transactMock).toHaveBeenCalledOnce();
256
+ // Critically: BEGIN and COMMIT must NOT be issued via query()
257
+ expect(vi.mocked(client.query)).not.toHaveBeenCalledWith('BEGIN', undefined);
258
+ expect(vi.mocked(client.query)).not.toHaveBeenCalledWith('COMMIT', undefined);
259
+ });
260
+ it('txAdapter has backendType = "dolt"', async () => {
261
+ let capturedBackendType;
262
+ const client = makeMockClient();
263
+ const adapter = new DoltDatabaseAdapter(client);
264
+ await adapter.transaction(async (tx) => {
265
+ capturedBackendType = tx.backendType;
266
+ });
267
+ expect(capturedBackendType).toBe('dolt');
268
+ });
269
+ it('nested transaction() on txAdapter is a pass-through — no second transact() call', async () => {
270
+ let innerCallCount = 0;
271
+ const transactMock = vi.fn().mockImplementation(async (fn) => {
272
+ const txQuery = (_sql, _params) => Promise.resolve([]);
273
+ return fn(txQuery);
274
+ });
275
+ const client = makeMockClient({ transact: transactMock });
276
+ const adapter = new DoltDatabaseAdapter(client);
277
+ await adapter.transaction(async (outerTx) => {
278
+ await outerTx.transaction(async (innerTx) => {
279
+ innerCallCount++;
280
+ await innerTx.exec('INSERT INTO t VALUES (99)');
281
+ });
282
+ });
283
+ // transact() was called exactly once (the outer call — nested is pass-through)
284
+ expect(transactMock).toHaveBeenCalledOnce();
285
+ expect(innerCallCount).toBe(1);
286
+ });
287
+ it('propagates rejection from fn() through transact()', async () => {
288
+ const client = makeMockClient();
289
+ const adapter = new DoltDatabaseAdapter(client);
290
+ await expect(adapter.transaction(async () => {
291
+ throw new Error('tx failed');
292
+ })).rejects.toThrow('tx failed');
293
+ });
294
+ it('txAdapter.exec() passes SQL to txQuery with undefined params', async () => {
295
+ let capturedSql;
296
+ let capturedParams;
297
+ const transactMock = vi.fn().mockImplementation(async (fn) => {
298
+ const txQuery = (sql, params) => {
299
+ capturedSql = sql;
300
+ capturedParams = params;
301
+ return Promise.resolve([]);
302
+ };
303
+ return fn(txQuery);
304
+ });
305
+ const client = makeMockClient({ transact: transactMock });
306
+ const adapter = new DoltDatabaseAdapter(client);
307
+ await adapter.transaction(async (tx) => {
308
+ await tx.exec('DELETE FROM foo WHERE id = 1');
309
+ });
310
+ expect(capturedSql).toBe('DELETE FROM foo WHERE id = 1');
311
+ expect(capturedParams).toBeUndefined();
312
+ });
313
+ });
314
+ // ---------------------------------------------------------------------------
315
+ // AC3: Integration test — data survives process exit (gated on real Dolt repo)
316
+ // ---------------------------------------------------------------------------
317
+ /**
318
+ * Integration test (AC3): verifies that rows committed via adapter.transaction()
319
+ * are visible to a fresh process querying via Dolt CLI.
320
+ *
321
+ * SKIPPED unless DOLT_INTEGRATION_TEST=1 is set in the environment.
322
+ * Requires: Dolt CLI on PATH + a git repo initialized with `dolt init`.
323
+ */
324
+ describe('DoltClient.transact() — integration (AC3, skipped by default)', () => {
325
+ const runIntegration = process.env['DOLT_INTEGRATION_TEST'] === '1';
326
+ it.skipIf(!runIntegration)('rows written in a transaction are visible to a fresh CLI process after close()', async () => {
327
+ const { execFile } = await import('node:child_process');
328
+ const { promisify } = await import('node:util');
329
+ const { mkdtemp, rm } = await import('node:fs/promises');
330
+ const execFileAsync = promisify(execFile);
331
+ // Create a temp dir and initialize a Dolt repo
332
+ const tmpDir = await mkdtemp('/tmp/dolt-test-');
333
+ try {
334
+ await execFileAsync('dolt', ['init'], { cwd: tmpDir });
335
+ // Create a test table via Dolt CLI
336
+ await execFileAsync('dolt', ['sql', '-q', 'CREATE TABLE tx_test (id INT PRIMARY KEY, val TEXT)'], {
337
+ cwd: tmpDir,
338
+ });
339
+ // Import the real DoltClient
340
+ const { DoltClient: DoltClientReal } = await import('./dolt-client.js');
341
+ const client = new DoltClientReal({ repoPath: tmpDir });
342
+ // Write two rows in a single transaction
343
+ await client.transact(async (txQuery) => {
344
+ await txQuery("INSERT INTO tx_test (id, val) VALUES (1, 'alpha')");
345
+ await txQuery("INSERT INTO tx_test (id, val) VALUES (2, 'beta')");
346
+ });
347
+ // Close the client (release resources)
348
+ await client.close();
349
+ // Verify via a fresh Dolt CLI invocation (new process, new session)
350
+ const { stdout } = await execFileAsync('dolt', ['sql', '-q', 'SELECT COUNT(*) AS cnt FROM tx_test', '--result-format', 'json'], { cwd: tmpDir });
351
+ const parsed = JSON.parse(stdout);
352
+ expect(parsed.rows[0].cnt).toBe(2);
353
+ }
354
+ finally {
355
+ await rm(tmpDir, { recursive: true, force: true });
356
+ }
357
+ });
358
+ });
359
+ //# sourceMappingURL=dolt-adapter-transaction.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dolt-adapter-transaction.test.js","sourceRoot":"","sources":["../../src/persistence/dolt-adapter-transaction.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * DoltDatabaseAdapter — wraps a DoltClientLike and exposes it through the
3
+ * unified async DatabaseAdapter interface.
4
+ *
5
+ * Uses a duck-typed DoltClientLike interface to avoid cross-package imports.
6
+ * All SQL operations are delegated to the client, which connects via mysql2
7
+ * unix socket (primary) or dolt CLI (fallback).
8
+ * Transactions delegate atomicity enforcement to DoltClientLike.transact().
9
+ */
10
+ import type { DatabaseAdapter } from './types.js';
11
+ /**
12
+ * Duck-typed interface for the DoltClient dependency.
13
+ * Allows packages/core to use DoltDatabaseAdapter without importing DoltClient directly.
14
+ *
15
+ * `transact<T>()` enforces atomicity in both pool mode and CLI mode:
16
+ * - Pool mode: acquires a dedicated connection and issues BEGIN/COMMIT on it.
17
+ * - CLI mode: collects all statements and executes them as a single batch invocation.
18
+ */
19
+ export interface DoltClientLike {
20
+ query<T>(sql: string, params?: unknown[]): Promise<T[]>;
21
+ transact<T>(fn: (query: <R>(sql: string, params?: unknown[]) => Promise<R[]>) => Promise<T>): Promise<T>;
22
+ close(): Promise<void>;
23
+ }
24
+ export declare class DoltDatabaseAdapter implements DatabaseAdapter {
25
+ readonly backendType: "dolt";
26
+ private readonly _client;
27
+ /**
28
+ * Create a DoltDatabaseAdapter wrapping the supplied DoltClientLike.
29
+ * The caller should construct the client with the correct `repoPath`
30
+ * before passing it here; `connect()` is called lazily by DoltClient.
31
+ */
32
+ constructor(client: DoltClientLike);
33
+ /**
34
+ * Execute a SQL query and return all result rows as typed objects.
35
+ *
36
+ * Delegates to `DoltClientLike.query<T>()` which supports both mysql2
37
+ * pool mode and CLI fallback.
38
+ */
39
+ query<T = unknown>(sql: string, params?: unknown[]): Promise<T[]>;
40
+ /**
41
+ * Execute a SQL statement with no return value (DDL or DML).
42
+ *
43
+ * Delegates to `DoltClientLike.query()` and discards the result rows.
44
+ */
45
+ exec(sql: string): Promise<void>;
46
+ /**
47
+ * Execute a function within an explicit SQL transaction.
48
+ *
49
+ * Delegates atomicity enforcement to `DoltClientLike.transact()`:
50
+ * - Pool mode: acquires a dedicated connection, issues BEGIN/COMMIT on that
51
+ * connection, preventing query scatter across the pool.
52
+ * - CLI mode: collects all SQL statements and executes them as a single
53
+ * `dolt sql -q "BEGIN; ...; COMMIT"` invocation.
54
+ *
55
+ * The `fn` callback receives a transaction-scoped `DatabaseAdapter` whose
56
+ * `query()` and `exec()` are bound to the connection-bound query lambda.
57
+ * Nested `transaction()` calls on the scoped adapter are pass-through
58
+ * (no nested BEGIN).
59
+ */
60
+ transaction<T>(fn: (adapter: DatabaseAdapter) => Promise<T>): Promise<T>;
61
+ /**
62
+ * Close the underlying DoltClient connection pool.
63
+ */
64
+ close(): Promise<void>;
65
+ /**
66
+ * Query story keys from the `ready_stories` SQL view.
67
+ *
68
+ * Returns story keys whose status is `planned` or `ready` and whose
69
+ * hard dependencies are all `complete` in the work graph.
70
+ *
71
+ * On any SQL error (e.g., view not yet created by story 31-1 schema,
72
+ * or empty stories table), returns `[]` so the caller falls through to
73
+ * the legacy discovery chain.
74
+ */
75
+ queryReadyStories(): Promise<string[]>;
76
+ }
77
+ //# sourceMappingURL=dolt-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dolt-adapter.d.ts","sourceRoot":"","sources":["../../src/persistence/dolt-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEjD;;;;;;;GAOG;AACH,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAA;IACvD,QAAQ,CAAC,CAAC,EACR,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GAC9E,OAAO,CAAC,CAAC,CAAC,CAAA;IACb,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACvB;AAED,qBAAa,mBAAoB,YAAW,eAAe;IACzD,QAAQ,CAAC,WAAW,EAAG,MAAM,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgB;IAExC;;;;OAIG;gBACS,MAAM,EAAE,cAAc;IAIlC;;;;;OAKG;IACG,KAAK,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAIvE;;;;OAIG;IACG,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAItC;;;;;;;;;;;;;OAaG;IACG,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,eAAe,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAsB9E;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B;;;;;;;;;OASG;IACG,iBAAiB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;CAW7C"}