@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,193 @@
1
+ /**
2
+ * Unit tests for AdapterOutputNormalizer (Story 53-10).
3
+ *
4
+ * Tests all 4 normalization strategies:
5
+ * 1. standard — direct extractYamlBlock
6
+ * 2. strip-prose — remove leading prose, retry
7
+ * 3. strip-markdown — remove markdown artifacts, retry
8
+ * 4. json-fallback — parse embedded JSON, dump to YAML
9
+ * Plus error handling when all strategies are exhausted.
10
+ */
11
+ import { describe, it, expect, vi } from 'vitest';
12
+ import { AdapterOutputNormalizer } from '../adapter-output-normalizer.js';
13
+ import { AdapterFormatError } from '../adapter-format-error.js';
14
+ const silentLogger = { debug: vi.fn(), warn: vi.fn() };
15
+ describe('AdapterOutputNormalizer', () => {
16
+ // -----------------------------------------------------------------------
17
+ // Strategy 1: standard
18
+ // -----------------------------------------------------------------------
19
+ describe('standard strategy', () => {
20
+ it('extracts fenced YAML block directly', () => {
21
+ const output = [
22
+ 'Here is my analysis.',
23
+ '',
24
+ '```yaml',
25
+ 'result: success',
26
+ 'files_modified:',
27
+ ' - src/foo.ts',
28
+ '```',
29
+ ].join('\n');
30
+ const normalizer = new AdapterOutputNormalizer(silentLogger);
31
+ const result = normalizer.normalize(output, 'claude-code');
32
+ expect(result).not.toBeInstanceOf(AdapterFormatError);
33
+ const success = result;
34
+ expect(success.strategy).toBe('standard');
35
+ expect(success.yaml).toContain('result:');
36
+ });
37
+ it('extracts unfenced YAML starting with anchor key', () => {
38
+ const output = 'verdict: SHIP_IT\nscore: 95\nnotes: looks good';
39
+ const normalizer = new AdapterOutputNormalizer(silentLogger);
40
+ const result = normalizer.normalize(output, 'claude-code');
41
+ expect(result).not.toBeInstanceOf(AdapterFormatError);
42
+ const success = result;
43
+ expect(success.strategy).toBe('standard');
44
+ expect(success.yaml).toContain('verdict:');
45
+ });
46
+ });
47
+ // -----------------------------------------------------------------------
48
+ // Strategy 2: strip-prose
49
+ // -----------------------------------------------------------------------
50
+ describe('strip-prose strategy', () => {
51
+ it('strips leading prose and finds YAML block', () => {
52
+ // Fenced block after prose — standard strategy should find this too,
53
+ // but the test validates that strip-prose doesn't break anything
54
+ const output = [
55
+ 'I have completed the code review.',
56
+ 'The implementation looks correct.',
57
+ '',
58
+ '```yaml',
59
+ 'verdict: SHIP_IT',
60
+ 'score: 92',
61
+ '```',
62
+ ].join('\n');
63
+ const normalizer = new AdapterOutputNormalizer(silentLogger);
64
+ const result = normalizer.normalize(output, 'codex');
65
+ expect(result).not.toBeInstanceOf(AdapterFormatError);
66
+ const success = result;
67
+ expect(success.yaml).toContain('verdict:');
68
+ });
69
+ });
70
+ // -----------------------------------------------------------------------
71
+ // Strategy 3: strip-markdown
72
+ // -----------------------------------------------------------------------
73
+ describe('strip-markdown strategy', () => {
74
+ it('strips blockquote prefixes and extracts YAML', () => {
75
+ // Blockquote-wrapped YAML — standard extractYamlBlock won't find it
76
+ // because the `> ` prefix breaks anchor detection
77
+ const output = [
78
+ '> ```yaml',
79
+ '> verdict: SHIP_IT',
80
+ '> score: 88',
81
+ '> ```',
82
+ ].join('\n');
83
+ const normalizer = new AdapterOutputNormalizer(silentLogger);
84
+ const result = normalizer.normalize(output, 'gemini');
85
+ expect(result).not.toBeInstanceOf(AdapterFormatError);
86
+ const success = result;
87
+ expect(success.yaml).toContain('verdict:');
88
+ });
89
+ });
90
+ // -----------------------------------------------------------------------
91
+ // Strategy 4: json-fallback
92
+ // -----------------------------------------------------------------------
93
+ describe('json-fallback strategy', () => {
94
+ it('extracts JSON with anchor keys and converts to YAML', () => {
95
+ // No YAML fences, no anchor keys on their own lines — just embedded JSON
96
+ // Use a format that won't match standard/strip-prose/strip-markdown
97
+ const output = [
98
+ 'Output from agent:',
99
+ '---BEGIN---',
100
+ '{"result": "success", "files_modified": ["src/foo.ts"]}',
101
+ '---END---',
102
+ ].join('\n');
103
+ const normalizer = new AdapterOutputNormalizer(silentLogger);
104
+ const result = normalizer.normalize(output, 'codex');
105
+ // This may match standard (yaml-parser has JSON fallback) or json-fallback
106
+ if (result instanceof AdapterFormatError) {
107
+ // JSON is on single line — the multiline JSON regex (\{[\s\S]*?\n\}) won't match
108
+ // That's fine — this tests the boundary. Let's use a multiline JSON instead.
109
+ }
110
+ });
111
+ it('extracts multiline JSON with anchor keys', () => {
112
+ const output = [
113
+ 'Some narrative text without any yaml markers.',
114
+ 'More narrative.',
115
+ '{',
116
+ '"result": "success",',
117
+ '"files_modified": ["src/foo.ts"]',
118
+ '}',
119
+ 'End of output.',
120
+ ].join('\n');
121
+ const normalizer = new AdapterOutputNormalizer(silentLogger);
122
+ const result = normalizer.normalize(output, 'codex');
123
+ expect(result).not.toBeInstanceOf(AdapterFormatError);
124
+ const success = result;
125
+ expect(success.yaml).toContain('result:');
126
+ });
127
+ it('ignores JSON without anchor keys', () => {
128
+ const output = [
129
+ 'Some text.',
130
+ '{',
131
+ '"status": "ok",',
132
+ '"count": 42',
133
+ '}',
134
+ 'End.',
135
+ ].join('\n');
136
+ const normalizer = new AdapterOutputNormalizer(silentLogger);
137
+ const result = normalizer.normalize(output, 'codex');
138
+ expect(result).toBeInstanceOf(AdapterFormatError);
139
+ });
140
+ });
141
+ // -----------------------------------------------------------------------
142
+ // All strategies exhausted
143
+ // -----------------------------------------------------------------------
144
+ describe('all strategies exhausted', () => {
145
+ it('returns AdapterFormatError with diagnostic fields', () => {
146
+ const output = 'This is just plain text with no YAML or JSON whatsoever.';
147
+ const normalizer = new AdapterOutputNormalizer(silentLogger);
148
+ const result = normalizer.normalize(output, 'claude-code');
149
+ expect(result).toBeInstanceOf(AdapterFormatError);
150
+ const err = result;
151
+ expect(err.adapter_id).toBe('claude-code');
152
+ expect(err.tried_strategies).toEqual(['standard', 'strip-prose', 'strip-markdown', 'json-fallback']);
153
+ expect(err.raw_output_snippet).toBe(output);
154
+ expect(err.extraction_error).toContain('json-fallback');
155
+ expect(err.rootCause).toBe('adapter-format');
156
+ });
157
+ it('truncates raw_output_snippet to 500 chars', () => {
158
+ const output = 'x'.repeat(1000);
159
+ const normalizer = new AdapterOutputNormalizer(silentLogger);
160
+ const result = normalizer.normalize(output, 'test');
161
+ expect(result).toBeInstanceOf(AdapterFormatError);
162
+ const err = result;
163
+ expect(err.raw_output_snippet.length).toBe(500);
164
+ });
165
+ it('logs a warning when all strategies fail', () => {
166
+ const logger = { debug: vi.fn(), warn: vi.fn() };
167
+ const normalizer = new AdapterOutputNormalizer(logger);
168
+ normalizer.normalize('no yaml here', 'test-adapter');
169
+ expect(logger.warn).toHaveBeenCalledWith(expect.objectContaining({
170
+ adapter_id: 'test-adapter',
171
+ tried_strategies: ['standard', 'strip-prose', 'strip-markdown', 'json-fallback'],
172
+ }), expect.stringContaining('exhausted all strategies'));
173
+ });
174
+ });
175
+ // -----------------------------------------------------------------------
176
+ // AdapterFormatError
177
+ // -----------------------------------------------------------------------
178
+ describe('AdapterFormatError', () => {
179
+ it('has rootCause = adapter-format', () => {
180
+ const err = new AdapterFormatError({
181
+ adapter_id: 'codex',
182
+ rawOutput: 'garbage',
183
+ tried_strategies: ['standard'],
184
+ extraction_error: 'no yaml found',
185
+ });
186
+ expect(err.rootCause).toBe('adapter-format');
187
+ expect(err.name).toBe('AdapterFormatError');
188
+ expect(err.message).toContain('codex');
189
+ expect(err.message).toContain('standard');
190
+ });
191
+ });
192
+ });
193
+ //# sourceMappingURL=adapter-output-normalizer.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter-output-normalizer.test.js","sourceRoot":"","sources":["../../../src/adapters/__tests__/adapter-output-normalizer.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * AdapterFormatError — raised when all normalization strategies are exhausted.
3
+ *
4
+ * Carries structured context for downstream classifiers and observability.
5
+ * The `rootCause` literal enables story 53-5's classifyFailure() to detect
6
+ * adapter-format failures without duplicating the string constant.
7
+ *
8
+ * Always use the constructor — do not construct via object spread. The
9
+ * constructor auto-truncates rawOutput to 500 chars for the snippet field.
10
+ */
11
+ export declare class AdapterFormatError extends Error {
12
+ /** The adapter identifier that produced the unrecognizable output */
13
+ readonly adapter_id: string;
14
+ /**
15
+ * First 500 chars of the raw output.
16
+ * Capped at 500 chars — never log full raw output (can be 100K+ chars).
17
+ */
18
+ readonly raw_output_snippet: string;
19
+ /** Labels for each strategy that was attempted before giving up */
20
+ readonly tried_strategies: readonly string[];
21
+ /** The last parse error message encountered */
22
+ readonly extraction_error: string;
23
+ /**
24
+ * Root cause literal for downstream classifier integration (story 53-5).
25
+ * Downstream classifiers reference this literal without duplicating the string.
26
+ */
27
+ readonly rootCause: "adapter-format";
28
+ constructor(opts: {
29
+ adapter_id: string;
30
+ rawOutput: string;
31
+ tried_strategies: string[];
32
+ extraction_error: string;
33
+ });
34
+ }
35
+ //# sourceMappingURL=adapter-format-error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter-format-error.d.ts","sourceRoot":"","sources":["../../src/adapters/adapter-format-error.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,qEAAqE;IACrE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAE3B;;;OAGG;IACH,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAA;IAEnC,mEAAmE;IACnE,QAAQ,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAA;IAE5C,+CAA+C;IAC/C,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAA;IAEjC;;;OAGG;IACH,QAAQ,CAAC,SAAS,EAAG,gBAAgB,CAAS;gBAElC,IAAI,EAAE;QAChB,UAAU,EAAE,MAAM,CAAA;QAClB,SAAS,EAAE,MAAM,CAAA;QACjB,gBAAgB,EAAE,MAAM,EAAE,CAAA;QAC1B,gBAAgB,EAAE,MAAM,CAAA;KACzB;CAWF"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * AdapterFormatError — raised when all normalization strategies are exhausted.
3
+ *
4
+ * Carries structured context for downstream classifiers and observability.
5
+ * The `rootCause` literal enables story 53-5's classifyFailure() to detect
6
+ * adapter-format failures without duplicating the string constant.
7
+ *
8
+ * Always use the constructor — do not construct via object spread. The
9
+ * constructor auto-truncates rawOutput to 500 chars for the snippet field.
10
+ */
11
+ export class AdapterFormatError extends Error {
12
+ /** The adapter identifier that produced the unrecognizable output */
13
+ adapter_id;
14
+ /**
15
+ * First 500 chars of the raw output.
16
+ * Capped at 500 chars — never log full raw output (can be 100K+ chars).
17
+ */
18
+ raw_output_snippet;
19
+ /** Labels for each strategy that was attempted before giving up */
20
+ tried_strategies;
21
+ /** The last parse error message encountered */
22
+ extraction_error;
23
+ /**
24
+ * Root cause literal for downstream classifier integration (story 53-5).
25
+ * Downstream classifiers reference this literal without duplicating the string.
26
+ */
27
+ rootCause = 'adapter-format';
28
+ constructor(opts) {
29
+ super(`AdapterFormatError [${opts.adapter_id}]: exhausted all normalization strategies. ` +
30
+ `Tried: ${opts.tried_strategies.join(', ')}. Last error: ${opts.extraction_error}`);
31
+ this.name = 'AdapterFormatError';
32
+ this.adapter_id = opts.adapter_id;
33
+ this.raw_output_snippet = opts.rawOutput.slice(0, 500);
34
+ this.tried_strategies = [...opts.tried_strategies];
35
+ this.extraction_error = opts.extraction_error;
36
+ }
37
+ }
38
+ //# sourceMappingURL=adapter-format-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter-format-error.js","sourceRoot":"","sources":["../../src/adapters/adapter-format-error.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAC3C,qEAAqE;IAC5D,UAAU,CAAQ;IAE3B;;;OAGG;IACM,kBAAkB,CAAQ;IAEnC,mEAAmE;IAC1D,gBAAgB,CAAmB;IAE5C,+CAA+C;IACtC,gBAAgB,CAAQ;IAEjC;;;OAGG;IACM,SAAS,GAAG,gBAAyB,CAAA;IAE9C,YAAY,IAKX;QACC,KAAK,CACH,uBAAuB,IAAI,CAAC,UAAU,6CAA6C;YACjF,UAAU,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,gBAAgB,EAAE,CACrF,CAAA;QACD,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAA;QAChC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAA;QACjC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;QACtD,IAAI,CAAC,gBAAgB,GAAG,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAA;QAClD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAA;IAC/C,CAAC;CACF"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * AdapterOutputNormalizer — multi-strategy YAML extraction for adapter output.
3
+ *
4
+ * When an adapter produces output that fails standard YAML extraction, this
5
+ * normalizer applies a sequence of additional strategies to recover parseable
6
+ * YAML. Each strategy is tried in order; the first success is returned.
7
+ *
8
+ * Strategies (in order):
9
+ * 1. 'standard' — call extractYamlBlock() directly
10
+ * 2. 'strip-prose' — remove leading prose lines, retry extractYamlBlock()
11
+ * 3. 'strip-markdown' — strip line-leading markdown artifacts, retry
12
+ * 4. 'json-fallback' — find embedded JSON containing anchor keys, dump to YAML
13
+ *
14
+ * If all strategies fail, returns an AdapterFormatError with diagnostic fields.
15
+ *
16
+ * Architecture note: this file may import from packages/core/src/dispatch/yaml-parser.ts
17
+ * (same package) but must NOT import from @substrate-ai/sdlc, src/modules/, or any
18
+ * file outside packages/core/.
19
+ */
20
+ import { AdapterFormatError } from './adapter-format-error.js';
21
+ interface ILogger {
22
+ debug(...args: unknown[]): void;
23
+ warn(...args: unknown[]): void;
24
+ }
25
+ /**
26
+ * Multi-strategy YAML extractor for adapter output.
27
+ *
28
+ * Inject into DispatcherImpl via constructor parameter so it can be mocked in
29
+ * unit tests. Default to `new AdapterOutputNormalizer()` if not provided.
30
+ */
31
+ export declare class AdapterOutputNormalizer {
32
+ private readonly _logger;
33
+ constructor(logger?: ILogger);
34
+ /**
35
+ * Attempt to extract valid YAML from raw adapter output.
36
+ *
37
+ * Tries strategies in order and returns the first successful extraction.
38
+ * If all strategies are exhausted, returns an AdapterFormatError (does NOT throw).
39
+ *
40
+ * @param rawOutput - Full stdout string from the adapter process
41
+ * @param adapterId - Adapter identifier for error diagnostics and logging
42
+ * @returns `{ yaml: string; strategy: string }` on success, or `AdapterFormatError` on exhaustion
43
+ */
44
+ normalize(rawOutput: string, adapterId: string): {
45
+ yaml: string;
46
+ strategy: string;
47
+ } | AdapterFormatError;
48
+ }
49
+ export {};
50
+ //# sourceMappingURL=adapter-output-normalizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter-output-normalizer.d.ts","sourceRoot":"","sources":["../../src/adapters/adapter-output-normalizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAa9D,UAAU,OAAO;IACf,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;IAC/B,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;CAC/B;AAMD;;;;;GAKG;AACH,qBAAa,uBAAuB;IAClC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,MAAM,GAAE,OAAiB;IAIrC;;;;;;;;;OASG;IACH,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,kBAAkB;CAqFzG"}
@@ -0,0 +1,233 @@
1
+ /**
2
+ * AdapterOutputNormalizer — multi-strategy YAML extraction for adapter output.
3
+ *
4
+ * When an adapter produces output that fails standard YAML extraction, this
5
+ * normalizer applies a sequence of additional strategies to recover parseable
6
+ * YAML. Each strategy is tried in order; the first success is returned.
7
+ *
8
+ * Strategies (in order):
9
+ * 1. 'standard' — call extractYamlBlock() directly
10
+ * 2. 'strip-prose' — remove leading prose lines, retry extractYamlBlock()
11
+ * 3. 'strip-markdown' — strip line-leading markdown artifacts, retry
12
+ * 4. 'json-fallback' — find embedded JSON containing anchor keys, dump to YAML
13
+ *
14
+ * If all strategies fail, returns an AdapterFormatError with diagnostic fields.
15
+ *
16
+ * Architecture note: this file may import from packages/core/src/dispatch/yaml-parser.ts
17
+ * (same package) but must NOT import from @substrate-ai/sdlc, src/modules/, or any
18
+ * file outside packages/core/.
19
+ */
20
+ import yaml from 'js-yaml';
21
+ import { extractYamlBlock } from '../dispatch/yaml-parser.js';
22
+ import { AdapterFormatError } from './adapter-format-error.js';
23
+ // ---------------------------------------------------------------------------
24
+ // Known anchor keys (without colon) used to identify YAML result blocks
25
+ // ---------------------------------------------------------------------------
26
+ const YAML_ANCHOR_KEYS = ['result:', 'verdict:', 'story_file:', 'expansion_priority:'];
27
+ const YAML_ANCHOR_KEYS_BARE = YAML_ANCHOR_KEYS.map((k) => k.replace(':', ''));
28
+ // ---------------------------------------------------------------------------
29
+ // AdapterOutputNormalizer
30
+ // ---------------------------------------------------------------------------
31
+ /**
32
+ * Multi-strategy YAML extractor for adapter output.
33
+ *
34
+ * Inject into DispatcherImpl via constructor parameter so it can be mocked in
35
+ * unit tests. Default to `new AdapterOutputNormalizer()` if not provided.
36
+ */
37
+ export class AdapterOutputNormalizer {
38
+ _logger;
39
+ constructor(logger = console) {
40
+ this._logger = logger;
41
+ }
42
+ /**
43
+ * Attempt to extract valid YAML from raw adapter output.
44
+ *
45
+ * Tries strategies in order and returns the first successful extraction.
46
+ * If all strategies are exhausted, returns an AdapterFormatError (does NOT throw).
47
+ *
48
+ * @param rawOutput - Full stdout string from the adapter process
49
+ * @param adapterId - Adapter identifier for error diagnostics and logging
50
+ * @returns `{ yaml: string; strategy: string }` on success, or `AdapterFormatError` on exhaustion
51
+ */
52
+ normalize(rawOutput, adapterId) {
53
+ const tried = [];
54
+ let lastError = 'no_yaml_block';
55
+ // -----------------------------------------------------------------------
56
+ // Strategy 1: 'standard' — call extractYamlBlock() directly
57
+ // -----------------------------------------------------------------------
58
+ {
59
+ const strategy = 'standard';
60
+ tried.push(strategy);
61
+ const result = extractYamlBlock(rawOutput);
62
+ if (result !== null) {
63
+ return { yaml: result, strategy };
64
+ }
65
+ this._logger.debug({ adapterId, strategy }, 'Normalizer strategy failed');
66
+ lastError = 'extractYamlBlock returned null';
67
+ }
68
+ // -----------------------------------------------------------------------
69
+ // Strategy 2: 'strip-prose' — remove leading non-YAML lines, retry
70
+ // -----------------------------------------------------------------------
71
+ {
72
+ const strategy = 'strip-prose';
73
+ tried.push(strategy);
74
+ const stripped = stripLeadingProse(rawOutput);
75
+ if (stripped !== rawOutput) {
76
+ const result = extractYamlBlock(stripped);
77
+ if (result !== null) {
78
+ return { yaml: result, strategy };
79
+ }
80
+ }
81
+ this._logger.debug({ adapterId, strategy }, 'Normalizer strategy failed');
82
+ lastError = 'strip-prose: extractYamlBlock returned null after prose removal';
83
+ }
84
+ // -----------------------------------------------------------------------
85
+ // Strategy 3: 'strip-markdown' — remove line-leading markdown artifacts
86
+ // -----------------------------------------------------------------------
87
+ {
88
+ const strategy = 'strip-markdown';
89
+ tried.push(strategy);
90
+ const cleaned = stripMarkdownArtifacts(rawOutput);
91
+ if (cleaned !== rawOutput) {
92
+ const result = extractYamlBlock(cleaned);
93
+ if (result !== null) {
94
+ return { yaml: result, strategy };
95
+ }
96
+ }
97
+ this._logger.debug({ adapterId, strategy }, 'Normalizer strategy failed');
98
+ lastError = 'strip-markdown: extractYamlBlock returned null after markdown removal';
99
+ }
100
+ // -----------------------------------------------------------------------
101
+ // Strategy 4: 'json-fallback' — parse embedded JSON, dump to YAML
102
+ // -----------------------------------------------------------------------
103
+ {
104
+ const strategy = 'json-fallback';
105
+ tried.push(strategy);
106
+ const result = extractJsonAsYaml(rawOutput);
107
+ if (result !== null) {
108
+ return { yaml: result, strategy };
109
+ }
110
+ this._logger.debug({ adapterId, strategy }, 'Normalizer strategy failed');
111
+ lastError = 'json-fallback: no JSON object with anchor keys found';
112
+ }
113
+ // -----------------------------------------------------------------------
114
+ // All strategies exhausted — emit warn-level structured log and return error
115
+ // -----------------------------------------------------------------------
116
+ this._logger.warn({
117
+ adapter_id: adapterId,
118
+ tried_strategies: tried,
119
+ snippet: rawOutput.slice(0, 500),
120
+ }, 'AdapterOutputNormalizer exhausted all strategies — adapter format unrecognized');
121
+ return new AdapterFormatError({
122
+ adapter_id: adapterId,
123
+ rawOutput,
124
+ tried_strategies: tried,
125
+ extraction_error: lastError,
126
+ });
127
+ }
128
+ }
129
+ // ---------------------------------------------------------------------------
130
+ // Internal helpers
131
+ // ---------------------------------------------------------------------------
132
+ /**
133
+ * Strip leading lines that do not look like YAML content.
134
+ *
135
+ * A line is considered "YAML content" if it:
136
+ * - Starts with a known anchor key (result:, verdict:, etc.)
137
+ * - Starts with a code fence marker (```)
138
+ * - Starts with a YAML document separator (---)
139
+ * - Is blank (may be whitespace between prose and YAML)
140
+ * - Starts with whitespace (indented YAML value)
141
+ *
142
+ * Lines before the first YAML-looking line are removed.
143
+ */
144
+ function stripLeadingProse(text) {
145
+ const lines = text.split('\n');
146
+ for (let i = 0; i < lines.length; i++) {
147
+ const line = lines[i];
148
+ if (line === undefined)
149
+ continue;
150
+ const trimmed = line.trim();
151
+ // Blank lines are skipped (not YAML, but not prose either)
152
+ if (trimmed === '')
153
+ continue;
154
+ // Fence markers or YAML doc separator
155
+ if (trimmed.startsWith('```') || trimmed.startsWith('---')) {
156
+ return lines.slice(i).join('\n');
157
+ }
158
+ // Known anchor keys
159
+ if (YAML_ANCHOR_KEYS.some((k) => trimmed.startsWith(k))) {
160
+ return lines.slice(i).join('\n');
161
+ }
162
+ // Indented YAML (value continuation or nested key)
163
+ if (/^\s+\S/.test(line)) {
164
+ return lines.slice(i).join('\n');
165
+ }
166
+ // Generic YAML key pattern: starts with a word char, followed by ':'
167
+ if (/^[a-zA-Z_][a-zA-Z0-9_]*:/.test(trimmed)) {
168
+ return lines.slice(i).join('\n');
169
+ }
170
+ // This line looks like prose — continue scanning
171
+ }
172
+ // No YAML-looking line found — return original unchanged
173
+ return text;
174
+ }
175
+ /**
176
+ * Strip line-leading markdown artifacts.
177
+ *
178
+ * Handles:
179
+ * - Blockquote prefix: `> ` → ``
180
+ * - Heading markers: `## ` → ``
181
+ * - Bold/italic: `**` or `*` at start → ``
182
+ * - Underscore italic: `_` at start → ``
183
+ */
184
+ function stripMarkdownArtifacts(text) {
185
+ return text
186
+ .split('\n')
187
+ .map((line) => {
188
+ return line
189
+ .replace(/^>\s?/, '')
190
+ .replace(/^#{1,6}\s+/, '')
191
+ .replace(/^\*{1,2}/, '')
192
+ .replace(/^_/, '');
193
+ })
194
+ .join('\n');
195
+ }
196
+ /**
197
+ * Scan the text for an embedded JSON object containing at least one anchor key,
198
+ * then dump it to YAML via js-yaml for downstream parseYamlResult().
199
+ *
200
+ * Uses a greedy { ... } scan to find candidate JSON objects. The last matching
201
+ * object is used (consistent with yaml-parser.ts's "take the last block" rule).
202
+ */
203
+ function extractJsonAsYaml(text) {
204
+ // Match multiline JSON objects (greedy { ... \n})
205
+ const jsonPattern = /\{[\s\S]*?\n\}/g;
206
+ let lastMatch = null;
207
+ let match;
208
+ while ((match = jsonPattern.exec(text)) !== null) {
209
+ const candidate = match[0];
210
+ // Quick check: must contain at least one anchor key (bare, without colon)
211
+ const hasAnchorKey = YAML_ANCHOR_KEYS_BARE.some((key) => candidate.includes(`"${key}"`) || candidate.includes(`'${key}'`));
212
+ if (!hasAnchorKey)
213
+ continue;
214
+ try {
215
+ const parsed = JSON.parse(candidate);
216
+ if (typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed)) {
217
+ lastMatch = parsed;
218
+ }
219
+ }
220
+ catch {
221
+ // Not valid JSON — skip
222
+ }
223
+ }
224
+ if (lastMatch === null)
225
+ return null;
226
+ try {
227
+ return yaml.dump(lastMatch, { lineWidth: -1 });
228
+ }
229
+ catch {
230
+ return null;
231
+ }
232
+ }
233
+ //# sourceMappingURL=adapter-output-normalizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter-output-normalizer.js","sourceRoot":"","sources":["../../src/adapters/adapter-output-normalizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,IAAI,MAAM,SAAS,CAAA;AAC1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAE9D,8EAA8E;AAC9E,wEAAwE;AACxE,8EAA8E;AAE9E,MAAM,gBAAgB,GAAG,CAAC,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,qBAAqB,CAAC,CAAA;AACtF,MAAM,qBAAqB,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAA;AAW7E,8EAA8E;AAC9E,0BAA0B;AAC1B,8EAA8E;AAE9E;;;;;GAKG;AACH,MAAM,OAAO,uBAAuB;IACjB,OAAO,CAAS;IAEjC,YAAY,SAAkB,OAAO;QACnC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAA;IACvB,CAAC;IAED;;;;;;;;;OASG;IACH,SAAS,CAAC,SAAiB,EAAE,SAAiB;QAC5C,MAAM,KAAK,GAAa,EAAE,CAAA;QAC1B,IAAI,SAAS,GAAG,eAAe,CAAA;QAE/B,0EAA0E;QAC1E,4DAA4D;QAC5D,0EAA0E;QAC1E,CAAC;YACC,MAAM,QAAQ,GAAG,UAAU,CAAA;YAC3B,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YACpB,MAAM,MAAM,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAA;YAC1C,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;gBACpB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAA;YACnC,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,4BAA4B,CAAC,CAAA;YACzE,SAAS,GAAG,gCAAgC,CAAA;QAC9C,CAAC;QAED,0EAA0E;QAC1E,mEAAmE;QACnE,0EAA0E;QAC1E,CAAC;YACC,MAAM,QAAQ,GAAG,aAAa,CAAA;YAC9B,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YACpB,MAAM,QAAQ,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAA;YAC7C,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC3B,MAAM,MAAM,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAA;gBACzC,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;oBACpB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAA;gBACnC,CAAC;YACH,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,4BAA4B,CAAC,CAAA;YACzE,SAAS,GAAG,iEAAiE,CAAA;QAC/E,CAAC;QAED,0EAA0E;QAC1E,wEAAwE;QACxE,0EAA0E;QAC1E,CAAC;YACC,MAAM,QAAQ,GAAG,gBAAgB,CAAA;YACjC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YACpB,MAAM,OAAO,GAAG,sBAAsB,CAAC,SAAS,CAAC,CAAA;YACjD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC1B,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAA;gBACxC,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;oBACpB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAA;gBACnC,CAAC;YACH,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,4BAA4B,CAAC,CAAA;YACzE,SAAS,GAAG,uEAAuE,CAAA;QACrF,CAAC;QAED,0EAA0E;QAC1E,kEAAkE;QAClE,0EAA0E;QAC1E,CAAC;YACC,MAAM,QAAQ,GAAG,eAAe,CAAA;YAChC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YACpB,MAAM,MAAM,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAA;YAC3C,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;gBACpB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAA;YACnC,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,4BAA4B,CAAC,CAAA;YACzE,SAAS,GAAG,sDAAsD,CAAA;QACpE,CAAC;QAED,0EAA0E;QAC1E,6EAA6E;QAC7E,0EAA0E;QAC1E,IAAI,CAAC,OAAO,CAAC,IAAI,CACf;YACE,UAAU,EAAE,SAAS;YACrB,gBAAgB,EAAE,KAAK;YACvB,OAAO,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;SACjC,EACD,gFAAgF,CACjF,CAAA;QAED,OAAO,IAAI,kBAAkB,CAAC;YAC5B,UAAU,EAAE,SAAS;YACrB,SAAS;YACT,gBAAgB,EAAE,KAAK;YACvB,gBAAgB,EAAE,SAAS;SAC5B,CAAC,CAAA;IACJ,CAAC;CACF;AAED,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E;;;;;;;;;;;GAWG;AACH,SAAS,iBAAiB,CAAC,IAAY;IACrC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAE9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;QACrB,IAAI,IAAI,KAAK,SAAS;YAAE,SAAQ;QAEhC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;QAE3B,2DAA2D;QAC3D,IAAI,OAAO,KAAK,EAAE;YAAE,SAAQ;QAE5B,sCAAsC;QACtC,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3D,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAClC,CAAC;QAED,oBAAoB;QACpB,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACxD,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAClC,CAAC;QAED,mDAAmD;QACnD,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAClC,CAAC;QAED,qEAAqE;QACrE,IAAI,0BAA0B,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7C,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAClC,CAAC;QAED,iDAAiD;IACnD,CAAC;IAED,yDAAyD;IACzD,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,sBAAsB,CAAC,IAAY;IAC1C,OAAO,IAAI;SACR,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACZ,OAAO,IAAI;aACR,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;aACpB,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC;aACzB,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;aACvB,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;IACtB,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAA;AACf,CAAC;AAED;;;;;;GAMG;AACH,SAAS,iBAAiB,CAAC,IAAY;IACrC,kDAAkD;IAClD,MAAM,WAAW,GAAG,iBAAiB,CAAA;IACrC,IAAI,SAAS,GAAmC,IAAI,CAAA;IACpD,IAAI,KAA6B,CAAA;IAEjC,OAAO,CAAC,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACjD,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;QAE1B,0EAA0E;QAC1E,MAAM,YAAY,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CACtD,SAAS,CAAC,QAAQ,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,IAAI,GAAG,GAAG,CAAC,CACjE,CAAA;QACD,IAAI,CAAC,YAAY;YAAE,SAAQ;QAE3B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;YACpC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC5E,SAAS,GAAG,MAAiC,CAAA;YAC/C,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,wBAAwB;QAC1B,CAAC;IACH,CAAC;IAED,IAAI,SAAS,KAAK,IAAI;QAAE,OAAO,IAAI,CAAA;IAEnC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,CAAA;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * AdapterRegistry — central registry for WorkerAdapter instances
3
+ *
4
+ * Discovers, health-checks, and stores all available CLI agent adapters.
5
+ * Unhealthy adapters are reported but do not block system startup.
6
+ */
7
+ import type { AgentId } from '../types.js';
8
+ import type { WorkerAdapter } from './worker-adapter.js';
9
+ import type { DiscoveryReport } from './types.js';
10
+ /**
11
+ * AdapterRegistry manages the lifecycle of WorkerAdapter instances.
12
+ *
13
+ * Usage:
14
+ * ```typescript
15
+ * const registry = new AdapterRegistry()
16
+ * const report = await registry.discoverAndRegister()
17
+ * const claude = registry.get('claude-code')
18
+ * ```
19
+ */
20
+ export declare class AdapterRegistry {
21
+ private readonly _adapters;
22
+ /**
23
+ * Register an adapter by its id.
24
+ * Overwrites any existing adapter with the same id.
25
+ */
26
+ register(adapter: WorkerAdapter): void;
27
+ /**
28
+ * Retrieve a registered adapter by id.
29
+ * @returns The adapter, or undefined if not registered
30
+ */
31
+ get(id: AgentId): WorkerAdapter | undefined;
32
+ /**
33
+ * Return all registered adapters as an array.
34
+ */
35
+ getAll(): WorkerAdapter[];
36
+ /**
37
+ * Return all registered adapters that support plan generation.
38
+ */
39
+ getPlanningCapable(): WorkerAdapter[];
40
+ /**
41
+ * Instantiate all built-in adapters, run health checks sequentially,
42
+ * and register those that pass.
43
+ *
44
+ * Failed adapters are included in the report but do NOT prevent startup.
45
+ *
46
+ * @returns Discovery report with per-adapter results
47
+ */
48
+ discoverAndRegister(): Promise<DiscoveryReport>;
49
+ }
50
+ //# sourceMappingURL=adapter-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter-registry.d.ts","sourceRoot":"","sources":["../../src/adapters/adapter-registry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACxD,OAAO,KAAK,EAA+C,eAAe,EAAE,MAAM,YAAY,CAAA;AAK9F;;;;;;;;;GASG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoC;IAE9D;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAItC;;;OAGG;IACH,GAAG,CAAC,EAAE,EAAE,OAAO,GAAG,aAAa,GAAG,SAAS;IAI3C;;OAEG;IACH,MAAM,IAAI,aAAa,EAAE;IAIzB;;OAEG;IACH,kBAAkB,IAAI,aAAa,EAAE;IAMrC;;;;;;;OAOG;IACG,mBAAmB,IAAI,OAAO,CAAC,eAAe,CAAC;CAgDtD"}