@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,364 @@
1
+ /**
2
+ * ConfigSystem implementation — loads configuration in hierarchy order and
3
+ * exposes get/set/getMasked operations.
4
+ *
5
+ * Hierarchy (lowest → highest priority):
6
+ * built-in defaults
7
+ * → global user config (~/.substrate/config.yaml)
8
+ * → project config (./.substrate/config.yaml)
9
+ * → environment vars (ADT_* prefixed)
10
+ * → CLI flag overrides (passed via ConfigSystemOptions.cliOverrides)
11
+ *
12
+ * No imports from src/ (monolith) — zero monolith dependencies.
13
+ */
14
+ import { readFile, writeFile, mkdir, access } from 'fs/promises';
15
+ import { join, resolve } from 'path';
16
+ import { homedir } from 'os';
17
+ import yaml from 'js-yaml';
18
+ import { ConfigError, ConfigIncompatibleFormatError } from './errors.js';
19
+ import { SubstrateConfigSchema, PartialSubstrateConfigSchema, CURRENT_CONFIG_FORMAT_VERSION, SUPPORTED_CONFIG_FORMAT_VERSIONS, } from './types.js';
20
+ import { isVersionSupported, formatUnsupportedVersionError } from './version-utils.js';
21
+ import { defaultConfigMigrator } from './config-migrator.js';
22
+ import { DEFAULT_CONFIG } from './defaults.js';
23
+ // ---------------------------------------------------------------------------
24
+ // Credential masking (inlined from src/cli/utils/masking.ts to avoid monolith import)
25
+ // ---------------------------------------------------------------------------
26
+ const MASKED_VALUE = '***';
27
+ const CREDENTIAL_FIELDS = new Set([
28
+ 'api_key',
29
+ 'apiKey',
30
+ 'api_key_env',
31
+ 'api_key_value',
32
+ 'token',
33
+ 'secret',
34
+ 'password',
35
+ ]);
36
+ function deepMask(value) {
37
+ if (value === null || value === undefined)
38
+ return value;
39
+ if (Array.isArray(value))
40
+ return value.map(deepMask);
41
+ if (typeof value === 'object') {
42
+ const obj = value;
43
+ const masked = {};
44
+ for (const [k, v] of Object.entries(obj)) {
45
+ if (CREDENTIAL_FIELDS.has(k)) {
46
+ masked[k] = MASKED_VALUE;
47
+ }
48
+ else {
49
+ masked[k] = deepMask(v);
50
+ }
51
+ }
52
+ return masked;
53
+ }
54
+ return value;
55
+ }
56
+ export function deepMerge(base, override) {
57
+ const result = { ...base };
58
+ for (const [key, val] of Object.entries(override)) {
59
+ if (val !== null &&
60
+ val !== undefined &&
61
+ typeof val === 'object' &&
62
+ !Array.isArray(val) &&
63
+ typeof result[key] === 'object' &&
64
+ result[key] !== null &&
65
+ !Array.isArray(result[key])) {
66
+ result[key] = deepMerge(result[key], val);
67
+ }
68
+ else if (val !== undefined) {
69
+ result[key] = val;
70
+ }
71
+ }
72
+ return result;
73
+ }
74
+ // ---------------------------------------------------------------------------
75
+ // Environment variable resolution
76
+ // ---------------------------------------------------------------------------
77
+ /**
78
+ * Map of ADT_ environment variable names to config paths.
79
+ * Only overrides scalar values; does not support nested structures via env.
80
+ */
81
+ const ENV_VAR_MAP = {
82
+ ADT_LOG_LEVEL: 'global.log_level',
83
+ ADT_MAX_CONCURRENT_TASKS: 'global.max_concurrent_tasks',
84
+ ADT_BUDGET_CAP_TOKENS: 'global.budget_cap_tokens',
85
+ ADT_BUDGET_CAP_USD: 'global.budget_cap_usd',
86
+ ADT_WORKSPACE_DIR: 'global.workspace_dir',
87
+ ADT_CLAUDE_ENABLED: 'providers.claude.enabled',
88
+ ADT_CODEX_ENABLED: 'providers.codex.enabled',
89
+ ADT_GEMINI_ENABLED: 'providers.gemini.enabled',
90
+ };
91
+ /**
92
+ * Read relevant environment variables and return a partial config overlay.
93
+ */
94
+ function readEnvOverrides(logger) {
95
+ const overrides = {};
96
+ for (const [envKey, configPath] of Object.entries(ENV_VAR_MAP)) {
97
+ const rawValue = process.env[envKey];
98
+ if (rawValue === undefined)
99
+ continue;
100
+ const parts = configPath.split('.');
101
+ let cursor = overrides;
102
+ for (let i = 0; i < parts.length - 1; i++) {
103
+ const part = parts[i] ?? '';
104
+ if (cursor[part] === undefined)
105
+ cursor[part] = {};
106
+ cursor = cursor[part];
107
+ }
108
+ const lastKey = parts[parts.length - 1] ?? '';
109
+ // Coerce to appropriate type
110
+ if (rawValue === 'true')
111
+ cursor[lastKey] = true;
112
+ else if (rawValue === 'false')
113
+ cursor[lastKey] = false;
114
+ else if (/^\d+$/.test(rawValue))
115
+ cursor[lastKey] = parseInt(rawValue, 10);
116
+ else if (/^\d*\.\d+$/.test(rawValue))
117
+ cursor[lastKey] = parseFloat(rawValue);
118
+ else
119
+ cursor[lastKey] = rawValue;
120
+ }
121
+ // Validate the env overrides as partial config
122
+ const parsed = PartialSubstrateConfigSchema.safeParse(overrides);
123
+ if (!parsed.success) {
124
+ logger.warn({ errors: parsed.error.issues }, 'Invalid environment variable overrides ignored');
125
+ return {};
126
+ }
127
+ return parsed.data;
128
+ }
129
+ // ---------------------------------------------------------------------------
130
+ // Dot-notation key accessor / setter
131
+ // ---------------------------------------------------------------------------
132
+ /**
133
+ * Get a value from a nested object using dot-notation key.
134
+ */
135
+ export function getByPath(obj, path) {
136
+ const parts = path.split('.');
137
+ let cursor = obj;
138
+ for (const part of parts) {
139
+ if (cursor === null || cursor === undefined || typeof cursor !== 'object')
140
+ return undefined;
141
+ cursor = cursor[part];
142
+ }
143
+ return cursor;
144
+ }
145
+ /**
146
+ * Return a deep clone of `obj` with `path` set to `value`.
147
+ * Creates intermediate objects as needed.
148
+ */
149
+ export function setByPath(obj, path, value) {
150
+ const parts = path.split('.');
151
+ const result = { ...obj };
152
+ let cursor = result;
153
+ for (let i = 0; i < parts.length - 1; i++) {
154
+ const part = parts[i] ?? '';
155
+ const existing = cursor[part];
156
+ if (existing === null || existing === undefined || typeof existing !== 'object') {
157
+ cursor[part] = {};
158
+ }
159
+ else {
160
+ cursor[part] = { ...existing };
161
+ }
162
+ cursor = cursor[part];
163
+ }
164
+ const lastKey = parts[parts.length - 1] ?? '';
165
+ cursor[lastKey] = value;
166
+ return result;
167
+ }
168
+ // ---------------------------------------------------------------------------
169
+ // getVersionCompatibility — utility exported from core
170
+ // ---------------------------------------------------------------------------
171
+ /**
172
+ * Check whether a config format version is compatible with this toolkit.
173
+ *
174
+ * @param version - Version string to check
175
+ * @returns true if the version is in SUPPORTED_CONFIG_FORMAT_VERSIONS
176
+ */
177
+ export function getVersionCompatibility(version) {
178
+ return isVersionSupported(version, SUPPORTED_CONFIG_FORMAT_VERSIONS);
179
+ }
180
+ // ---------------------------------------------------------------------------
181
+ // ConfigSystemImpl
182
+ // ---------------------------------------------------------------------------
183
+ export class ConfigSystemImpl {
184
+ _config = null;
185
+ _projectConfigDir;
186
+ _globalConfigDir;
187
+ _cliOverrides;
188
+ _logger;
189
+ constructor(options = {}) {
190
+ this._projectConfigDir = options.projectConfigDir
191
+ ? resolve(options.projectConfigDir)
192
+ : resolve(process.cwd(), '.substrate');
193
+ this._globalConfigDir = options.globalConfigDir
194
+ ? resolve(options.globalConfigDir)
195
+ : resolve(homedir(), '.substrate');
196
+ this._cliOverrides = options.cliOverrides ?? {};
197
+ this._logger = options.logger ?? console;
198
+ }
199
+ get isLoaded() {
200
+ return this._config !== null;
201
+ }
202
+ async load() {
203
+ // 1. Start with built-in defaults
204
+ let merged = structuredClone(DEFAULT_CONFIG);
205
+ // 2. Apply global user config if present
206
+ const globalConfig = await this._loadYamlFile(join(this._globalConfigDir, 'config.yaml'));
207
+ if (globalConfig !== null) {
208
+ merged = deepMerge(merged, globalConfig);
209
+ }
210
+ // 3. Apply project config if present
211
+ const projectConfig = await this._loadYamlFile(join(this._projectConfigDir, 'config.yaml'));
212
+ if (projectConfig !== null) {
213
+ merged = deepMerge(merged, projectConfig);
214
+ }
215
+ // 4. Apply environment variable overrides
216
+ const envOverrides = readEnvOverrides(this._logger);
217
+ if (Object.keys(envOverrides).length > 0) {
218
+ merged = deepMerge(merged, envOverrides);
219
+ }
220
+ // 5. Apply CLI flag overrides
221
+ if (Object.keys(this._cliOverrides).length > 0) {
222
+ merged = deepMerge(merged, this._cliOverrides);
223
+ }
224
+ // 6. Validate the merged config
225
+ const result = SubstrateConfigSchema.safeParse(merged);
226
+ if (!result.success) {
227
+ const issues = result.error.issues
228
+ .map((issue) => ` • ${issue.path.join('.')}: ${issue.message}`)
229
+ .join('\n');
230
+ throw new ConfigError(`Configuration validation failed:\n${issues}`, { issues: result.error.issues });
231
+ }
232
+ this._config = result.data;
233
+ this._logger.debug('Configuration loaded successfully');
234
+ }
235
+ getConfig() {
236
+ if (this._config === null) {
237
+ throw new ConfigError('Configuration has not been loaded. Call load() before getConfig().', {});
238
+ }
239
+ return this._config;
240
+ }
241
+ get(key) {
242
+ const config = this.getConfig();
243
+ return getByPath(config, key);
244
+ }
245
+ async set(key, value) {
246
+ // Validate key exists in schema by checking current merged config path
247
+ const current = this.getConfig();
248
+ const existing = getByPath(current, key);
249
+ // Reject unknown keys — the key must resolve to something in the merged config
250
+ if (existing === undefined) {
251
+ throw new ConfigError(`Unknown config key: ${key}`, { key });
252
+ }
253
+ // Key path must resolve to a non-object (scalar) — we don't allow replacing whole sections
254
+ if (typeof existing === 'object' &&
255
+ existing !== null) {
256
+ throw new ConfigError(`Cannot set object key "${key}" — use a more specific dot-notation path`, { key });
257
+ }
258
+ // Load the raw project config file (or start fresh)
259
+ let projectConfigRaw = {};
260
+ const projectConfigPath = join(this._projectConfigDir, 'config.yaml');
261
+ const existingYaml = await this._loadYamlFile(projectConfigPath);
262
+ if (existingYaml !== null) {
263
+ projectConfigRaw = existingYaml;
264
+ }
265
+ // Apply the change
266
+ const updated = setByPath(projectConfigRaw, key, value);
267
+ // Validate the partial update
268
+ const partial = PartialSubstrateConfigSchema.safeParse(updated);
269
+ if (!partial.success) {
270
+ const issues = partial.error.issues
271
+ .map((i) => ` • ${i.path.join('.')}: ${i.message}`)
272
+ .join('\n');
273
+ throw new ConfigError(`Invalid value for "${key}":\n${issues}`, { key, value, issues: partial.error.issues });
274
+ }
275
+ // Write back and reload
276
+ await mkdir(this._projectConfigDir, { recursive: true });
277
+ const yamlStr = yaml.dump(updated);
278
+ await writeFile(projectConfigPath, yamlStr, 'utf-8');
279
+ // Reload to get the updated merged config
280
+ await this.load();
281
+ }
282
+ getMasked() {
283
+ const config = this.getConfig();
284
+ return deepMask(config);
285
+ }
286
+ getConfigFormatVersion() {
287
+ return CURRENT_CONFIG_FORMAT_VERSION;
288
+ }
289
+ isCompatible(version) {
290
+ return SUPPORTED_CONFIG_FORMAT_VERSIONS.includes(version);
291
+ }
292
+ // ---------------------------------------------------------------------------
293
+ // Private helpers
294
+ // ---------------------------------------------------------------------------
295
+ async _fileExists(filePath) {
296
+ try {
297
+ await access(filePath);
298
+ return true;
299
+ }
300
+ catch {
301
+ return false;
302
+ }
303
+ }
304
+ async _loadYamlFile(filePath) {
305
+ if (!(await this._fileExists(filePath)))
306
+ return null;
307
+ try {
308
+ const raw = await readFile(filePath, 'utf-8');
309
+ let parsed = yaml.load(raw);
310
+ // Pre-check config_format_version and attempt auto-migration before Zod runs (AC4, AC5)
311
+ if (parsed !== null && typeof parsed === 'object' && !Array.isArray(parsed)) {
312
+ const rawObj = parsed;
313
+ const version = rawObj['config_format_version'];
314
+ if (version !== undefined && typeof version === 'string' && !isVersionSupported(version, SUPPORTED_CONFIG_FORMAT_VERSIONS)) {
315
+ // Attempt auto-migration if a migration path exists (FR63)
316
+ if (defaultConfigMigrator.canMigrate(version, CURRENT_CONFIG_FORMAT_VERSION)) {
317
+ const migrationOutput = defaultConfigMigrator.migrate(rawObj, version, CURRENT_CONFIG_FORMAT_VERSION, filePath);
318
+ if (migrationOutput.result.success) {
319
+ this._logger.info({ from: version, to: CURRENT_CONFIG_FORMAT_VERSION, backup: migrationOutput.result.backupPath }, 'Config auto-migrated successfully');
320
+ parsed = migrationOutput.config;
321
+ }
322
+ else {
323
+ throw new ConfigIncompatibleFormatError(`Config migration failed: ${migrationOutput.result.manualStepsRequired.join('; ')}`, { filePath, version });
324
+ }
325
+ }
326
+ else {
327
+ throw new ConfigIncompatibleFormatError(formatUnsupportedVersionError('config', version, SUPPORTED_CONFIG_FORMAT_VERSIONS), { filePath });
328
+ }
329
+ }
330
+ }
331
+ const result = PartialSubstrateConfigSchema.safeParse(parsed);
332
+ if (!result.success) {
333
+ const issues = result.error.issues
334
+ .map((i) => ` • ${i.path.join('.')}: ${i.message}`)
335
+ .join('\n');
336
+ throw new ConfigError(`Invalid config file at ${filePath}:\n${issues}`, { filePath, issues: result.error.issues });
337
+ }
338
+ return result.data;
339
+ }
340
+ catch (err) {
341
+ if (err instanceof ConfigError)
342
+ throw err;
343
+ if (err instanceof ConfigIncompatibleFormatError)
344
+ throw err;
345
+ const message = err instanceof Error ? err.message : String(err);
346
+ throw new ConfigError(`Failed to read config file at ${filePath}: ${message}`, { filePath });
347
+ }
348
+ }
349
+ }
350
+ // ---------------------------------------------------------------------------
351
+ // Factory function
352
+ // ---------------------------------------------------------------------------
353
+ /**
354
+ * Create a new ConfigSystem instance.
355
+ *
356
+ * @example
357
+ * const config = createConfigSystem()
358
+ * await config.load()
359
+ * const cfg = config.getConfig()
360
+ */
361
+ export function createConfigSystem(options = {}) {
362
+ return new ConfigSystemImpl(options);
363
+ }
364
+ //# sourceMappingURL=config-system-impl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-system-impl.js","sourceRoot":"","sources":["../../src/config/config-system-impl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * ConfigWatcher — file watcher for hot-reloading substrate.config.yaml.
3
+ *
4
+ * Responsibilities (Story 5.6):
5
+ * - Watch the config file using Node.js fs.watch
6
+ * - Debounce rapid file change events (default 300ms)
7
+ * - Validate the new config using the Zod schema
8
+ * - Call onReload with the parsed config on success
9
+ * - Call onError with validation/parse errors on failure
10
+ * - Clean up file handles on stop()
11
+ *
12
+ * Architecture constraints:
13
+ * - No imports from src/ (monolith) — zero monolith dependencies
14
+ * - ESM imports: ALL imports use .js extension
15
+ */
16
+ import type { ILogger } from '../dispatch/types.js';
17
+ import { type SubstrateConfig } from './types.js';
18
+ export interface ConfigWatcherOptions {
19
+ /** Absolute path to the config file to watch */
20
+ configPath: string;
21
+ /** Called with the new validated config when the file changes successfully */
22
+ onReload: (newConfig: SubstrateConfig) => void;
23
+ /** Called when validation or parsing fails */
24
+ onError: (err: Error) => void;
25
+ /** Debounce delay in milliseconds (default: 300) */
26
+ debounceMs?: number;
27
+ /**
28
+ * Logger instance. Defaults to console if not provided.
29
+ */
30
+ logger?: ILogger;
31
+ }
32
+ export interface ConfigWatcher {
33
+ /** Start watching the config file */
34
+ start(): void;
35
+ /** Stop watching and clean up resources */
36
+ stop(): void;
37
+ }
38
+ /**
39
+ * Recursively flatten a nested object into dot-notation key/value pairs.
40
+ * Arrays are treated as leaf values (not recursed into).
41
+ */
42
+ export declare function flattenObject(obj: Record<string, unknown>, prefix?: string): Record<string, unknown>;
43
+ /**
44
+ * Compute the set of dot-notation keys that differ between two configs.
45
+ *
46
+ * @param prev - Previous config
47
+ * @param next - New config
48
+ * @returns Array of dot-notation paths that changed (e.g., 'global.max_concurrent_tasks')
49
+ */
50
+ export declare function computeChangedKeys(prev: SubstrateConfig, next: SubstrateConfig): string[];
51
+ /**
52
+ * Create a config file watcher that detects changes and reloads the config.
53
+ *
54
+ * AC1: Registers file watcher on configPath with persistent=false
55
+ * AC2: Debounces events, reads+parses+validates on change
56
+ * AC3: Calls onError for invalid config without calling onReload
57
+ */
58
+ export declare function createConfigWatcher(options: ConfigWatcherOptions): ConfigWatcher;
59
+ //# sourceMappingURL=config-watcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-watcher.d.ts","sourceRoot":"","sources":["../../src/config/config-watcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAKH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EAAyB,KAAK,eAAe,EAAE,MAAM,YAAY,CAAA;AAMxE,MAAM,WAAW,oBAAoB;IACnC,gDAAgD;IAChD,UAAU,EAAE,MAAM,CAAA;IAClB,8EAA8E;IAC9E,QAAQ,EAAE,CAAC,SAAS,EAAE,eAAe,KAAK,IAAI,CAAA;IAC9C,8CAA8C;IAC9C,OAAO,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAA;IAC7B,oDAAoD;IACpD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB;;OAEG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,qCAAqC;IACrC,KAAK,IAAI,IAAI,CAAA;IACb,2CAA2C;IAC3C,IAAI,IAAI,IAAI,CAAA;CACb;AAMD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,SAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAUhG;AAMD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,eAAe,GAAG,MAAM,EAAE,CAKzF;AAMD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa,CAkFhF"}
@@ -0,0 +1,137 @@
1
+ /**
2
+ * ConfigWatcher — file watcher for hot-reloading substrate.config.yaml.
3
+ *
4
+ * Responsibilities (Story 5.6):
5
+ * - Watch the config file using Node.js fs.watch
6
+ * - Debounce rapid file change events (default 300ms)
7
+ * - Validate the new config using the Zod schema
8
+ * - Call onReload with the parsed config on success
9
+ * - Call onError with validation/parse errors on failure
10
+ * - Clean up file handles on stop()
11
+ *
12
+ * Architecture constraints:
13
+ * - No imports from src/ (monolith) — zero monolith dependencies
14
+ * - ESM imports: ALL imports use .js extension
15
+ */
16
+ import { watch, readFile, existsSync } from 'node:fs';
17
+ import yaml from 'js-yaml';
18
+ import { SubstrateConfigSchema } from './types.js';
19
+ // ---------------------------------------------------------------------------
20
+ // flattenObject — deep-flatten for changed-keys computation
21
+ // ---------------------------------------------------------------------------
22
+ /**
23
+ * Recursively flatten a nested object into dot-notation key/value pairs.
24
+ * Arrays are treated as leaf values (not recursed into).
25
+ */
26
+ export function flattenObject(obj, prefix = '') {
27
+ return Object.entries(obj).reduce((acc, [key, val]) => {
28
+ const fullKey = prefix ? `${prefix}.${key}` : key;
29
+ if (val !== null && typeof val === 'object' && !Array.isArray(val)) {
30
+ Object.assign(acc, flattenObject(val, fullKey));
31
+ }
32
+ else {
33
+ acc[fullKey] = val;
34
+ }
35
+ return acc;
36
+ }, {});
37
+ }
38
+ // ---------------------------------------------------------------------------
39
+ // computeChangedKeys
40
+ // ---------------------------------------------------------------------------
41
+ /**
42
+ * Compute the set of dot-notation keys that differ between two configs.
43
+ *
44
+ * @param prev - Previous config
45
+ * @param next - New config
46
+ * @returns Array of dot-notation paths that changed (e.g., 'global.max_concurrent_tasks')
47
+ */
48
+ export function computeChangedKeys(prev, next) {
49
+ const prevFlat = flattenObject(prev);
50
+ const nextFlat = flattenObject(next);
51
+ const allKeys = new Set([...Object.keys(prevFlat), ...Object.keys(nextFlat)]);
52
+ return [...allKeys].filter((k) => prevFlat[k] !== nextFlat[k]);
53
+ }
54
+ // ---------------------------------------------------------------------------
55
+ // createConfigWatcher
56
+ // ---------------------------------------------------------------------------
57
+ /**
58
+ * Create a config file watcher that detects changes and reloads the config.
59
+ *
60
+ * AC1: Registers file watcher on configPath with persistent=false
61
+ * AC2: Debounces events, reads+parses+validates on change
62
+ * AC3: Calls onError for invalid config without calling onReload
63
+ */
64
+ export function createConfigWatcher(options) {
65
+ const { configPath, onReload, onError, debounceMs = 300 } = options;
66
+ const logger = options.logger ?? console;
67
+ let watcher = null;
68
+ let debounceTimer = null;
69
+ const handleChange = () => {
70
+ // Debounce: cancel any pending reload
71
+ if (debounceTimer !== null) {
72
+ clearTimeout(debounceTimer);
73
+ debounceTimer = null;
74
+ }
75
+ debounceTimer = setTimeout(() => {
76
+ debounceTimer = null;
77
+ readFile(configPath, 'utf-8', (readErr, raw) => {
78
+ if (readErr !== null) {
79
+ logger.error({ err: readErr, configPath }, 'Config reload failed: could not read file');
80
+ onError(readErr);
81
+ return;
82
+ }
83
+ try {
84
+ const parsed = yaml.load(raw);
85
+ const result = SubstrateConfigSchema.safeParse(parsed);
86
+ if (!result.success) {
87
+ const message = result.error.issues
88
+ .map((e) => `${e.path.join('.')}: ${e.message}`)
89
+ .join('; ');
90
+ const err = new Error(`Config validation failed: ${message}. Continuing with previous config.`);
91
+ logger.error({ configPath, details: message }, 'Config reload failed: schema validation error. Continuing with previous config.');
92
+ onError(err);
93
+ return;
94
+ }
95
+ onReload(result.data);
96
+ }
97
+ catch (err) {
98
+ const error = err instanceof Error ? err : new Error(String(err));
99
+ logger.error({ err: error, configPath }, 'Config reload failed: YAML parse error. Continuing with previous config.');
100
+ onError(error);
101
+ }
102
+ });
103
+ }, debounceMs);
104
+ };
105
+ return {
106
+ start() {
107
+ if (watcher !== null) {
108
+ logger.warn({ configPath }, 'ConfigWatcher.start() called but watcher already running');
109
+ return;
110
+ }
111
+ if (!existsSync(configPath)) {
112
+ logger.info({ configPath }, 'Config file not found, hot-reload disabled');
113
+ return;
114
+ }
115
+ logger.info({ configPath }, 'Config watcher active: watching substrate.config.yaml');
116
+ watcher = watch(configPath, { persistent: false }, (_eventType, _filename) => {
117
+ handleChange();
118
+ });
119
+ watcher.on('error', (err) => {
120
+ logger.error({ err, configPath }, 'Config watcher error');
121
+ onError(err);
122
+ });
123
+ },
124
+ stop() {
125
+ if (debounceTimer !== null) {
126
+ clearTimeout(debounceTimer);
127
+ debounceTimer = null;
128
+ }
129
+ if (watcher !== null) {
130
+ watcher.close();
131
+ watcher = null;
132
+ logger.info({ configPath }, 'Config watcher stopped');
133
+ }
134
+ },
135
+ };
136
+ }
137
+ //# sourceMappingURL=config-watcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-watcher.js","sourceRoot":"","sources":["../../src/config/config-watcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Built-in default values for the Substrate configuration system.
3
+ *
4
+ * These are the lowest-priority defaults; they are overridden by:
5
+ * global config → project config → environment variables → CLI flags
6
+ */
7
+ import type { SubstrateConfig, ProviderConfig, GlobalSettings } from './types.js';
8
+ export declare const DEFAULT_CLAUDE_PROVIDER: ProviderConfig;
9
+ export declare const DEFAULT_CODEX_PROVIDER: ProviderConfig;
10
+ export declare const DEFAULT_GEMINI_PROVIDER: ProviderConfig;
11
+ export declare const DEFAULT_GLOBAL_SETTINGS: GlobalSettings;
12
+ export declare const DEFAULT_CONFIG: SubstrateConfig;
13
+ //# sourceMappingURL=defaults.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,cAAc,EACf,MAAM,YAAY,CAAA;AAMnB,eAAO,MAAM,uBAAuB,EAAE,cAWrC,CAAA;AAED,eAAO,MAAM,sBAAsB,EAAE,cAMpC,CAAA;AAED,eAAO,MAAM,uBAAuB,EAAE,cAMrC,CAAA;AAMD,eAAO,MAAM,uBAAuB,EAAE,cAKrC,CAAA;AAMD,eAAO,MAAM,cAAc,EAAE,eAa5B,CAAA"}