@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,336 @@
1
+ /**
2
+ * GitWorktreeManagerImpl — concrete implementation of GitWorktreeManager.
3
+ *
4
+ * Subscribes to task:ready events to create worktrees and to
5
+ * task:complete / task:failed events to clean them up.
6
+ *
7
+ * Architecture constraints:
8
+ * - Uses child_process.spawn for all git operations (via git-utils)
9
+ * - Branch names: "substrate/task-{taskId}"
10
+ * - Worktree path: {projectRoot}/.substrate-worktrees/{taskId}
11
+ * - Implements IBaseService lifecycle (initialize / shutdown)
12
+ */
13
+ import * as path from 'node:path';
14
+ import { access } from 'node:fs/promises';
15
+ import * as gitUtils from './git-utils.js';
16
+ // Branch name prefix for substrate task branches
17
+ const BRANCH_PREFIX = 'substrate/task-';
18
+ // Default base directory for worktrees (relative to projectRoot)
19
+ const DEFAULT_WORKTREE_BASE = '.substrate-worktrees';
20
+ // ---------------------------------------------------------------------------
21
+ // GitWorktreeManagerImpl
22
+ // ---------------------------------------------------------------------------
23
+ export class GitWorktreeManagerImpl {
24
+ _eventBus;
25
+ _projectRoot;
26
+ _baseDirectory;
27
+ _db;
28
+ _logger;
29
+ /** Bound listener references for cleanup in shutdown() */
30
+ _onTaskReady;
31
+ _onTaskComplete;
32
+ _onTaskFailed;
33
+ constructor(eventBus, projectRoot, baseDirectory = DEFAULT_WORKTREE_BASE, db = null, logger) {
34
+ this._eventBus = eventBus;
35
+ this._projectRoot = projectRoot;
36
+ this._baseDirectory = baseDirectory;
37
+ this._db = db;
38
+ this._logger = logger ?? console;
39
+ // Bind listeners once so we can remove them in shutdown()
40
+ // Note: _handleTaskReady is async; it awaits worktree creation and emits
41
+ // worktree:created only after the worktree exists. The WorkerPoolManager
42
+ // subscribes to worktree:created (not task:ready) to avoid race conditions.
43
+ this._onTaskReady = ({ taskId }) => {
44
+ this._handleTaskReady(taskId).catch((err) => {
45
+ this._logger.error({ taskId, err }, 'Unhandled error in _handleTaskReady');
46
+ });
47
+ };
48
+ this._onTaskComplete = ({ taskId }) => {
49
+ void this._handleTaskDone(taskId);
50
+ };
51
+ this._onTaskFailed = ({ taskId }) => {
52
+ void this._handleTaskDone(taskId);
53
+ };
54
+ }
55
+ // ---------------------------------------------------------------------------
56
+ // IBaseService lifecycle
57
+ // ---------------------------------------------------------------------------
58
+ async initialize() {
59
+ this._logger.info({ projectRoot: this._projectRoot }, 'GitWorktreeManager.initialize()');
60
+ // Validate git version on startup
61
+ await this.verifyGitVersion();
62
+ // Clean up orphaned worktrees from previous crashes
63
+ const cleaned = await this.cleanupAllWorktrees();
64
+ if (cleaned > 0) {
65
+ this._logger.info({ cleaned }, 'Recovered orphaned worktrees on startup');
66
+ }
67
+ // Subscribe to task:ready to create worktrees
68
+ this._eventBus.on('task:ready', this._onTaskReady);
69
+ // Subscribe to completion events to trigger cleanup
70
+ this._eventBus.on('task:complete', this._onTaskComplete);
71
+ this._eventBus.on('task:failed', this._onTaskFailed);
72
+ this._logger.info('GitWorktreeManager initialized');
73
+ }
74
+ async shutdown() {
75
+ this._logger.info('GitWorktreeManager.shutdown()');
76
+ // Unsubscribe from event bus
77
+ this._eventBus.off('task:ready', this._onTaskReady);
78
+ this._eventBus.off('task:complete', this._onTaskComplete);
79
+ this._eventBus.off('task:failed', this._onTaskFailed);
80
+ // Clean up any remaining worktrees
81
+ await this.cleanupAllWorktrees();
82
+ this._logger.info('GitWorktreeManager shutdown complete');
83
+ }
84
+ // ---------------------------------------------------------------------------
85
+ // Event handlers
86
+ // ---------------------------------------------------------------------------
87
+ async _handleTaskReady(taskId) {
88
+ this._logger.debug({ taskId }, 'task:ready — creating worktree');
89
+ try {
90
+ await this.createWorktree(taskId);
91
+ }
92
+ catch (err) {
93
+ this._logger.error({ taskId, err }, 'Failed to create worktree for task');
94
+ }
95
+ }
96
+ async _handleTaskDone(taskId) {
97
+ this._logger.debug({ taskId }, 'task done — cleaning up worktree');
98
+ try {
99
+ await this.cleanupWorktree(taskId);
100
+ }
101
+ catch (err) {
102
+ // Log but don't rethrow — cleanup failure should not block task completion
103
+ this._logger.warn({ taskId, err }, 'Failed to cleanup worktree for task');
104
+ }
105
+ }
106
+ // ---------------------------------------------------------------------------
107
+ // GitWorktreeManager interface
108
+ // ---------------------------------------------------------------------------
109
+ async createWorktree(taskId, baseBranch = 'main') {
110
+ if (!taskId || taskId.trim().length === 0) {
111
+ throw new Error('createWorktree: taskId must be a non-empty string');
112
+ }
113
+ const branchName = BRANCH_PREFIX + taskId;
114
+ const worktreePath = this.getWorktreePath(taskId);
115
+ this._logger.debug({ taskId, branchName, worktreePath, baseBranch }, 'createWorktree');
116
+ // Create the worktree via git-utils
117
+ await gitUtils.createWorktree(this._projectRoot, taskId, branchName, baseBranch);
118
+ const createdAt = new Date();
119
+ // Emit worktree:created event
120
+ this._eventBus.emit('worktree:created', {
121
+ taskId,
122
+ branchName,
123
+ worktreePath,
124
+ createdAt,
125
+ });
126
+ const info = {
127
+ taskId,
128
+ branchName,
129
+ worktreePath,
130
+ createdAt,
131
+ };
132
+ this._logger.info({ taskId, branchName, worktreePath }, 'Worktree created');
133
+ return info;
134
+ }
135
+ async cleanupWorktree(taskId) {
136
+ const branchName = BRANCH_PREFIX + taskId;
137
+ const worktreePath = this.getWorktreePath(taskId);
138
+ this._logger.debug({ taskId, branchName, worktreePath }, 'cleanupWorktree');
139
+ // Guard: Check if worktree directory exists before attempting removal.
140
+ // This makes cleanupWorktree idempotent and prevents double-cleanup races.
141
+ let worktreeExists = false;
142
+ try {
143
+ await access(worktreePath);
144
+ worktreeExists = true;
145
+ }
146
+ catch {
147
+ // Worktree directory doesn't exist — already cleaned up or never created
148
+ this._logger.debug({ taskId, worktreePath }, 'cleanupWorktree: worktree does not exist, skipping removal');
149
+ }
150
+ // Remove worktree directory (only if it exists)
151
+ if (worktreeExists) {
152
+ try {
153
+ await gitUtils.removeWorktree(worktreePath, this._projectRoot);
154
+ }
155
+ catch (err) {
156
+ this._logger.warn({ taskId, worktreePath, err }, 'removeWorktree failed during cleanup');
157
+ }
158
+ }
159
+ // Delete the task branch
160
+ try {
161
+ await gitUtils.removeBranch(branchName, this._projectRoot);
162
+ }
163
+ catch (err) {
164
+ this._logger.warn({ taskId, branchName, err }, 'removeBranch failed during cleanup');
165
+ }
166
+ // Emit worktree:removed event
167
+ this._eventBus.emit('worktree:removed', {
168
+ taskId,
169
+ branchName,
170
+ });
171
+ this._logger.info({ taskId, branchName }, 'Worktree cleaned up');
172
+ }
173
+ async cleanupAllWorktrees() {
174
+ this._logger.debug({ projectRoot: this._projectRoot }, 'cleanupAllWorktrees');
175
+ const orphanedPaths = await gitUtils.getOrphanedWorktrees(this._projectRoot, this._baseDirectory);
176
+ let cleaned = 0;
177
+ for (const worktreePath of orphanedPaths) {
178
+ // Extract taskId from path (last segment of the path)
179
+ const taskId = path.basename(worktreePath);
180
+ // Remove orphaned worktree
181
+ let worktreeRemoved = false;
182
+ try {
183
+ await gitUtils.removeWorktree(worktreePath, this._projectRoot);
184
+ worktreeRemoved = true;
185
+ this._logger.debug({ taskId, worktreePath }, 'cleanupAllWorktrees: removed orphaned worktree');
186
+ }
187
+ catch (err) {
188
+ this._logger.warn({ taskId, worktreePath, err }, 'cleanupAllWorktrees: failed to remove worktree');
189
+ }
190
+ // Remove orphaned branch
191
+ const branchName = BRANCH_PREFIX + taskId;
192
+ try {
193
+ const branchRemoved = await gitUtils.removeBranch(branchName, this._projectRoot);
194
+ if (branchRemoved) {
195
+ this._logger.debug({ taskId, branchName }, 'cleanupAllWorktrees: removed orphaned branch');
196
+ }
197
+ }
198
+ catch (err) {
199
+ this._logger.warn({ taskId, branchName, err }, 'cleanupAllWorktrees: failed to remove branch');
200
+ }
201
+ // Only count as cleaned if worktree removal succeeded
202
+ if (worktreeRemoved) {
203
+ cleaned++;
204
+ }
205
+ }
206
+ if (cleaned > 0) {
207
+ this._logger.info({ cleaned }, 'cleanupAllWorktrees: recovered orphaned worktrees');
208
+ }
209
+ return cleaned;
210
+ }
211
+ async detectConflicts(taskId, targetBranch = 'main') {
212
+ if (!taskId || taskId.trim().length === 0) {
213
+ throw new Error('detectConflicts: taskId must be a non-empty string');
214
+ }
215
+ const branchName = BRANCH_PREFIX + taskId;
216
+ const worktreePath = this.getWorktreePath(taskId);
217
+ this._logger.debug({ taskId, branchName, targetBranch }, 'detectConflicts');
218
+ // Verify the worktree exists
219
+ try {
220
+ await access(worktreePath);
221
+ }
222
+ catch {
223
+ throw new Error(`detectConflicts: Worktree for task "${taskId}" not found at "${worktreePath}". ` +
224
+ `The worktree may have already been cleaned up.`);
225
+ }
226
+ // Run simulated merge on the project root (target branch working dir)
227
+ const mergeClean = await gitUtils.simulateMerge(branchName, this._projectRoot);
228
+ let conflictingFiles = [];
229
+ try {
230
+ if (!mergeClean) {
231
+ // Get the list of conflicting files
232
+ conflictingFiles = await gitUtils.getConflictingFiles(this._projectRoot);
233
+ }
234
+ }
235
+ finally {
236
+ // Always abort the simulated merge to clean up state
237
+ await gitUtils.abortMerge(this._projectRoot);
238
+ }
239
+ const report = {
240
+ hasConflicts: !mergeClean || conflictingFiles.length > 0,
241
+ conflictingFiles,
242
+ taskId,
243
+ targetBranch,
244
+ };
245
+ // Emit worktree:conflict event if conflicts exist
246
+ if (report.hasConflicts) {
247
+ this._eventBus.emit('worktree:conflict', {
248
+ taskId,
249
+ branch: branchName,
250
+ conflictingFiles: report.conflictingFiles,
251
+ });
252
+ }
253
+ this._logger.info({ taskId, hasConflicts: report.hasConflicts, conflictCount: conflictingFiles.length }, 'Conflict detection complete');
254
+ return report;
255
+ }
256
+ async mergeWorktree(taskId, targetBranch = 'main') {
257
+ if (!taskId || taskId.trim().length === 0) {
258
+ throw new Error('mergeWorktree: taskId must be a non-empty string');
259
+ }
260
+ const branchName = BRANCH_PREFIX + taskId;
261
+ this._logger.debug({ taskId, branchName, targetBranch }, 'mergeWorktree');
262
+ // Call detectConflicts() first to check for conflicts (also verifies worktree exists)
263
+ const conflictReport = await this.detectConflicts(taskId, targetBranch);
264
+ if (conflictReport.hasConflicts) {
265
+ // Return failure result without attempting merge
266
+ this._logger.info({ taskId, conflictCount: conflictReport.conflictingFiles.length }, 'Merge skipped due to conflicts');
267
+ return {
268
+ success: false,
269
+ mergedFiles: [],
270
+ conflicts: conflictReport,
271
+ };
272
+ }
273
+ // Perform actual merge
274
+ const mergeSuccess = await gitUtils.performMerge(branchName, this._projectRoot);
275
+ if (!mergeSuccess) {
276
+ throw new Error(`mergeWorktree: git merge --no-ff failed for task "${taskId}" branch "${branchName}"`);
277
+ }
278
+ // Get the list of merged files
279
+ const mergedFiles = await gitUtils.getMergedFiles(this._projectRoot);
280
+ // Emit worktree:merged event
281
+ this._eventBus.emit('worktree:merged', {
282
+ taskId,
283
+ branch: branchName,
284
+ mergedFiles,
285
+ });
286
+ const result = {
287
+ success: true,
288
+ mergedFiles,
289
+ };
290
+ this._logger.info({ taskId, branchName, mergedFileCount: mergedFiles.length }, 'Worktree merged successfully');
291
+ return result;
292
+ }
293
+ async listWorktrees() {
294
+ this._logger.debug({ projectRoot: this._projectRoot, baseDirectory: this._baseDirectory }, 'listWorktrees');
295
+ const worktreePaths = await gitUtils.getOrphanedWorktrees(this._projectRoot, this._baseDirectory);
296
+ const results = [];
297
+ for (const worktreePath of worktreePaths) {
298
+ const taskId = path.basename(worktreePath);
299
+ const branchName = BRANCH_PREFIX + taskId;
300
+ // Try to get the creation time from the worktree directory
301
+ let createdAt;
302
+ try {
303
+ const { stat } = await import('node:fs/promises');
304
+ const stats = await stat(worktreePath);
305
+ createdAt = stats.birthtime ?? stats.ctime;
306
+ }
307
+ catch {
308
+ // If we can't stat the directory, use current time as fallback
309
+ createdAt = new Date();
310
+ }
311
+ results.push({
312
+ taskId,
313
+ branchName,
314
+ worktreePath,
315
+ createdAt,
316
+ });
317
+ }
318
+ this._logger.debug({ count: results.length }, 'listWorktrees: found worktrees');
319
+ return results;
320
+ }
321
+ getWorktreePath(taskId) {
322
+ return path.join(this._projectRoot, this._baseDirectory, taskId);
323
+ }
324
+ async verifyGitVersion() {
325
+ try {
326
+ await gitUtils.verifyGitVersion();
327
+ }
328
+ catch (err) {
329
+ throw new Error(`GitWorktreeManager: git version check failed: ${String(err)}`);
330
+ }
331
+ }
332
+ }
333
+ export function createGitWorktreeManager(options) {
334
+ return new GitWorktreeManagerImpl(options.eventBus, options.projectRoot, options.baseDirectory, options.db ?? null, options.logger);
335
+ }
336
+ //# sourceMappingURL=git-worktree-manager-impl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-worktree-manager-impl.js","sourceRoot":"","sources":["../../src/git/git-worktree-manager-impl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,122 @@
1
+ /**
2
+ * GitWorktreeManager — interface and types for git worktree lifecycle management.
3
+ *
4
+ * Responsible for:
5
+ * - Creating per-task git worktrees (AC1)
6
+ * - Providing worktree paths to WorkerPoolManager (AC2, AC6)
7
+ * - Cleaning up worktrees on task completion (AC3)
8
+ * - Recovering orphaned worktrees on startup (AC4)
9
+ * - Validating git version on startup (AC5)
10
+ *
11
+ * Implementation: GitWorktreeManagerImpl (git-worktree-manager-impl.ts)
12
+ */
13
+ import type { IBaseService } from '../types.js';
14
+ /**
15
+ * Describes a created worktree associated with a task.
16
+ */
17
+ export interface WorktreeInfo {
18
+ /** Task this worktree belongs to */
19
+ taskId: string;
20
+ /** Branch name in the form "substrate/task-{taskId}" */
21
+ branchName: string;
22
+ /** Absolute path to the worktree directory */
23
+ worktreePath: string;
24
+ /** When the worktree was created */
25
+ createdAt: Date;
26
+ }
27
+ /**
28
+ * Result of a conflict detection check for a task's worktree branch.
29
+ * Returned by detectConflicts() after simulating a merge.
30
+ */
31
+ export interface ConflictReport {
32
+ /** Whether conflicts were found */
33
+ hasConflicts: boolean;
34
+ /** List of files with conflicts (empty if no conflicts) */
35
+ conflictingFiles: string[];
36
+ /** Task ID being checked */
37
+ taskId: string;
38
+ /** Target branch that was used for conflict detection */
39
+ targetBranch: string;
40
+ }
41
+ /**
42
+ * Result of a merge operation for a task's worktree branch.
43
+ * Returned by mergeWorktree().
44
+ */
45
+ export interface MergeResult {
46
+ /** Whether the merge succeeded */
47
+ success: boolean;
48
+ /** List of files that were merged (only populated on success) */
49
+ mergedFiles: string[];
50
+ /** Conflict report if merge failed due to conflicts */
51
+ conflicts?: ConflictReport;
52
+ }
53
+ /**
54
+ * Manages the lifecycle of git worktrees for parallel task execution.
55
+ *
56
+ * Each task gets an isolated git worktree to prevent file conflicts between
57
+ * concurrently running agents (FR16, FR17, NFR10).
58
+ */
59
+ export interface GitWorktreeManager extends IBaseService {
60
+ /**
61
+ * Create a git worktree and branch for the given task.
62
+ *
63
+ * @param taskId - The task identifier
64
+ * @param baseBranch - Branch to base the worktree on (defaults to 'main')
65
+ * @returns - WorktreeInfo with path and branch details
66
+ * @throws - Error if git command fails
67
+ */
68
+ createWorktree(taskId: string, baseBranch?: string): Promise<WorktreeInfo>;
69
+ /**
70
+ * Remove the worktree and branch associated with a task.
71
+ *
72
+ * @param taskId - The task identifier
73
+ * @throws - Error if git removal command fails
74
+ */
75
+ cleanupWorktree(taskId: string): Promise<void>;
76
+ /**
77
+ * Scan for orphaned worktrees and clean them up.
78
+ *
79
+ * Used during initialization to recover from crashes.
80
+ *
81
+ * @returns - Count of worktrees that were cleaned up
82
+ */
83
+ cleanupAllWorktrees(): Promise<number>;
84
+ /**
85
+ * Get the consistent worktree path for a given task.
86
+ *
87
+ * @param taskId - The task identifier
88
+ * @returns - Absolute path: {projectRoot}/.substrate-worktrees/{taskId}
89
+ */
90
+ getWorktreePath(taskId: string): string;
91
+ /**
92
+ * Verify that git is installed and version >= 2.20.
93
+ *
94
+ * @throws - Error with clear message if git is missing or too old
95
+ */
96
+ verifyGitVersion(): Promise<void>;
97
+ /**
98
+ * Detect merge conflicts between a task's worktree branch and a target branch.
99
+ *
100
+ * @param taskId - The task identifier
101
+ * @param targetBranch - The branch to merge into (defaults to 'main')
102
+ * @returns - ConflictReport with hasConflicts and conflictingFiles
103
+ * @throws - Error if the worktree for this task does not exist
104
+ */
105
+ detectConflicts(taskId: string, targetBranch?: string): Promise<ConflictReport>;
106
+ /**
107
+ * Merge a task's worktree branch into a target branch.
108
+ *
109
+ * @param taskId - The task identifier
110
+ * @param targetBranch - The branch to merge into (defaults to 'main')
111
+ * @returns - MergeResult with success status and merged files
112
+ * @throws - Error if merge command fails unexpectedly
113
+ */
114
+ mergeWorktree(taskId: string, targetBranch?: string): Promise<MergeResult>;
115
+ /**
116
+ * List all currently tracked worktrees.
117
+ *
118
+ * @returns - Array of WorktreeInfo for all tracked worktrees
119
+ */
120
+ listWorktrees(): Promise<WorktreeInfo[]>;
121
+ }
122
+ //# sourceMappingURL=git-worktree-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-worktree-manager.d.ts","sourceRoot":"","sources":["../../src/git/git-worktree-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAM/C;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,oCAAoC;IACpC,MAAM,EAAE,MAAM,CAAA;IACd,wDAAwD;IACxD,UAAU,EAAE,MAAM,CAAA;IAClB,8CAA8C;IAC9C,YAAY,EAAE,MAAM,CAAA;IACpB,oCAAoC;IACpC,SAAS,EAAE,IAAI,CAAA;CAChB;AAMD;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,mCAAmC;IACnC,YAAY,EAAE,OAAO,CAAA;IACrB,2DAA2D;IAC3D,gBAAgB,EAAE,MAAM,EAAE,CAAA;IAC1B,4BAA4B;IAC5B,MAAM,EAAE,MAAM,CAAA;IACd,yDAAyD;IACzD,YAAY,EAAE,MAAM,CAAA;CACrB;AAMD;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,kCAAkC;IAClC,OAAO,EAAE,OAAO,CAAA;IAChB,iEAAiE;IACjE,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,uDAAuD;IACvD,SAAS,CAAC,EAAE,cAAc,CAAA;CAC3B;AAMD;;;;;GAKG;AACH,MAAM,WAAW,kBAAmB,SAAQ,YAAY;IACtD;;;;;;;OAOG;IACH,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;IAE1E;;;;;OAKG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAE9C;;;;;;OAMG;IACH,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC,CAAA;IAEtC;;;;;OAKG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAA;IAEvC;;;;OAIG;IACH,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IAEjC;;;;;;;OAOG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAAA;IAE/E;;;;;;;OAOG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAA;IAE1E;;;;OAIG;IACH,aAAa,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAAA;CACzC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * GitWorktreeManager — interface and types for git worktree lifecycle management.
3
+ *
4
+ * Responsible for:
5
+ * - Creating per-task git worktrees (AC1)
6
+ * - Providing worktree paths to WorkerPoolManager (AC2, AC6)
7
+ * - Cleaning up worktrees on task completion (AC3)
8
+ * - Recovering orphaned worktrees on startup (AC4)
9
+ * - Validating git version on startup (AC5)
10
+ *
11
+ * Implementation: GitWorktreeManagerImpl (git-worktree-manager-impl.ts)
12
+ */
13
+ export {};
14
+ //# sourceMappingURL=git-worktree-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-worktree-manager.js","sourceRoot":"","sources":["../../src/git/git-worktree-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @substrate-ai/core git barrel export.
3
+ * Re-exports all git-related utilities, interfaces, and implementations.
4
+ */
5
+ export * from './git-utils.js';
6
+ export type { GitWorktreeManager, WorktreeInfo, ConflictReport, MergeResult } from './git-worktree-manager.js';
7
+ export { GitWorktreeManagerImpl, createGitWorktreeManager, } from './git-worktree-manager-impl.js';
8
+ export type { GitWorktreeManagerOptions, LegacyDbLike } from './git-worktree-manager-impl.js';
9
+ export type { GitManager, GitManagerOptions } from './git-manager.js';
10
+ export { GitManagerImpl, createGitManager } from './git-manager.js';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/git/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,gBAAgB,CAAA;AAC9B,YAAY,EAAE,kBAAkB,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAC9G,OAAO,EACL,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,gCAAgC,CAAA;AACvC,YAAY,EAAE,yBAAyB,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAA;AAC7F,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACrE,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @substrate-ai/core git barrel export.
3
+ * Re-exports all git-related utilities, interfaces, and implementations.
4
+ */
5
+ export * from './git-utils.js';
6
+ export { GitWorktreeManagerImpl, createGitWorktreeManager, } from './git-worktree-manager-impl.js';
7
+ export { GitManagerImpl, createGitManager } from './git-manager.js';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/git/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,gBAAgB,CAAA;AAE9B,OAAO,EACL,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,gCAAgC,CAAA;AAGvC,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA"}
@@ -0,0 +1,33 @@
1
+ export * from './types.js';
2
+ export type { EventMap, EventHandler } from './events/index.js';
3
+ export type { TypedEventBus } from './events/index.js';
4
+ export { TypedEventBusImpl, createEventBus } from './events/index.js';
5
+ export type { CoreEvents, EventTaskResult, EventTaskError } from './events/index.js';
6
+ export * from './dispatch/index.js';
7
+ export * from './persistence/index.js';
8
+ export * from './routing/index.js';
9
+ export * from './config/index.js';
10
+ export type { ITelemetryPersistence } from './telemetry/index.js';
11
+ export { estimateCost } from './telemetry/index.js';
12
+ export type { Recommendation } from './telemetry/index.js';
13
+ export * from './telemetry/index.js';
14
+ export * from './adapters/index.js';
15
+ export * from './context/index.js';
16
+ export * from './quality-gates/index.js';
17
+ export * from './git/index.js';
18
+ export * from './version-manager/index.js';
19
+ export * from './supervisor/index.js';
20
+ export * from './budget/index.js';
21
+ export { estimateCost as estimateCostForProvider } from './cost-tracker/token-rates.js';
22
+ export type { CostTracker, CostTrackerOptions } from './cost-tracker/index.js';
23
+ export { CostTrackerImpl, createCostTracker } from './cost-tracker/index.js';
24
+ export { CostTrackerSubscriber, createCostTrackerSubscriber } from './cost-tracker/index.js';
25
+ export type { CostTrackerSubscriberOptions } from './cost-tracker/index.js';
26
+ export type { CostEntry, TaskCostSummary, SessionCostSummary, AgentCostBreakdown, } from './cost-tracker/index.js';
27
+ export type { TokenRates, ModelRates } from './cost-tracker/index.js';
28
+ export { TOKEN_RATES, PROVIDER_ALIASES, getTokenRate, estimateCostSafe } from './cost-tracker/index.js';
29
+ export type { Recommendation as MonitorRecommendation } from './monitor/recommendation-types.js';
30
+ export * from './monitor/index.js';
31
+ export { callLLM } from './llm/client.js';
32
+ export type { LLMCallParams, LLMCallResult } from './llm/client.js';
33
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,cAAc,YAAY,CAAA;AAI1B,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAC/D,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACrE,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAGpF,cAAc,qBAAqB,CAAA;AAGnC,cAAc,wBAAwB,CAAA;AAGtC,cAAc,oBAAoB,CAAA;AAGlC,cAAc,mBAAmB,CAAA;AAOjC,YAAY,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAC1D,cAAc,sBAAsB,CAAA;AAGpC,cAAc,qBAAqB,CAAA;AAGnC,cAAc,oBAAoB,CAAA;AAGlC,cAAc,0BAA0B,CAAA;AAGxC,cAAc,gBAAgB,CAAA;AAG9B,cAAc,4BAA4B,CAAA;AAG1C,cAAc,uBAAuB,CAAA;AAGrC,cAAc,mBAAmB,CAAA;AAWjC,OAAO,EAAE,YAAY,IAAI,uBAAuB,EAAE,MAAM,+BAA+B,CAAA;AACvF,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAC9E,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAC5E,OAAO,EAAE,qBAAqB,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAA;AAC5F,YAAY,EAAE,4BAA4B,EAAE,MAAM,yBAAyB,CAAA;AAC3E,YAAY,EACV,SAAS,EACT,eAAe,EACf,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,yBAAyB,CAAA;AAChC,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AACrE,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAKvG,YAAY,EAAE,cAAc,IAAI,qBAAqB,EAAE,MAAM,mCAAmC,CAAA;AAChG,cAAc,oBAAoB,CAAA;AAGlC,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AACzC,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,47 @@
1
+ // @substrate-ai/core public API — exports added per story (40-3+)
2
+ // Core primitive types (TaskId, WorkerId, AgentId, TaskStatus, etc.)
3
+ // TaskId and WorkerId are defined here; the events subsystem also defines them
4
+ // but we use this module as the canonical source to avoid TS2308 ambiguity.
5
+ export * from './types.js';
6
+ export { TypedEventBusImpl, createEventBus } from './events/index.js';
7
+ // Dispatch: Dispatcher, DispatchRequest, DispatchHandle, DispatchResult, DispatchConfig
8
+ export * from './dispatch/index.js';
9
+ // Persistence: DatabaseAdapter, DatabaseAdapterConfig, SyncAdapter, isSyncAdapter, InitSchemaFn
10
+ export * from './persistence/index.js';
11
+ // Routing: RoutingDecision, RoutingPolicy, IRoutingResolver, ModelResolution
12
+ export * from './routing/index.js';
13
+ // Config: SubstrateConfig and related types
14
+ export * from './config/index.js';
15
+ export { estimateCost } from './telemetry/index.js';
16
+ export * from './telemetry/index.js';
17
+ // Adapter subsystem (WorkerAdapter, AdapterRegistry, SpawnCommand, AdapterOptions, etc.)
18
+ export * from './adapters/index.js';
19
+ // Context compiler subsystem (ContextCompiler, TaskDescriptor, CompileResult, *Schema, etc.)
20
+ export * from './context/index.js';
21
+ // Quality gates subsystem (QualityGate, GatePipeline, GateResult, etc.)
22
+ export * from './quality-gates/index.js';
23
+ // Git utilities, worktree management, and git manager
24
+ export * from './git/index.js';
25
+ // Version manager (VersionManager, VersionManagerImpl, UpdateChecker, VersionCache, etc.)
26
+ export * from './version-manager/index.js';
27
+ // Supervisor: analysis engine, experimenter framework
28
+ export * from './supervisor/index.js';
29
+ // Budget: BudgetTracker interface and stub implementation
30
+ export * from './budget/index.js';
31
+ // CostTracker: token rates, cost tracking, and subscriber
32
+ // estimateCost: telemetry's (model, tokens) version is the canonical @substrate-ai/core export (exported above).
33
+ // estimateCostForProvider: cost-tracker variant (provider, model, inputTokens, outputTokens, rateTable?)
34
+ // CostEntry/TaskCostSummary/SessionCostSummary/AgentCostBreakdown re-exported here from
35
+ // cost-tracker/types.js which points to the same declarations as persistence/cost-types.js,
36
+ // so TypeScript treats them as non-ambiguous identical declarations.
37
+ // estimateCost is intentionally excluded from the root re-export to prevent a runtime
38
+ // collision with telemetry's estimateCost; the cost-tracker variant is accessible as
39
+ // estimateCostForProvider from the root barrel, and as estimateCost from cost-tracker/index.ts.
40
+ export { estimateCost as estimateCostForProvider } from './cost-tracker/token-rates.js';
41
+ export { CostTrackerImpl, createCostTracker } from './cost-tracker/index.js';
42
+ export { CostTrackerSubscriber, createCostTrackerSubscriber } from './cost-tracker/index.js';
43
+ export { TOKEN_RATES, PROVIDER_ALIASES, getTokenRate, estimateCostSafe } from './cost-tracker/index.js';
44
+ export * from './monitor/index.js';
45
+ // LLM client: callLLM, LLMCallParams, LLMCallResult (story 42-10)
46
+ export { callLLM } from './llm/client.js';
47
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAElE,qEAAqE;AACrE,+EAA+E;AAC/E,4EAA4E;AAC5E,cAAc,YAAY,CAAA;AAM1B,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAGrE,wFAAwF;AACxF,cAAc,qBAAqB,CAAA;AAEnC,gGAAgG;AAChG,cAAc,wBAAwB,CAAA;AAEtC,6EAA6E;AAC7E,cAAc,oBAAoB,CAAA;AAElC,4CAA4C;AAC5C,cAAc,mBAAmB,CAAA;AAQjC,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAEnD,cAAc,sBAAsB,CAAA;AAEpC,yFAAyF;AACzF,cAAc,qBAAqB,CAAA;AAEnC,6FAA6F;AAC7F,cAAc,oBAAoB,CAAA;AAElC,wEAAwE;AACxE,cAAc,0BAA0B,CAAA;AAExC,sDAAsD;AACtD,cAAc,gBAAgB,CAAA;AAE9B,0FAA0F;AAC1F,cAAc,4BAA4B,CAAA;AAE1C,sDAAsD;AACtD,cAAc,uBAAuB,CAAA;AAErC,0DAA0D;AAC1D,cAAc,mBAAmB,CAAA;AAEjC,0DAA0D;AAC1D,iHAAiH;AACjH,yGAAyG;AACzG,wFAAwF;AACxF,4FAA4F;AAC5F,qEAAqE;AACrE,sFAAsF;AACtF,qFAAqF;AACrF,gGAAgG;AAChG,OAAO,EAAE,YAAY,IAAI,uBAAuB,EAAE,MAAM,+BAA+B,CAAA;AAEvF,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAC5E,OAAO,EAAE,qBAAqB,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAA;AAS5F,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAMvG,cAAc,oBAAoB,CAAA;AAElC,kEAAkE;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA"}