heor-agent-mcp 1.16.0 → 1.35.0

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 (396) hide show
  1. package/.well-known/mcp/server-card.json +2 -2
  2. package/README.md +10 -1
  3. package/dist/audit/builder.d.ts +2 -1
  4. package/dist/audit/builder.d.ts.map +1 -1
  5. package/dist/audit/builder.js +12 -0
  6. package/dist/audit/builder.js.map +1 -1
  7. package/dist/audit/decisionPersistence.d.ts +10 -0
  8. package/dist/audit/decisionPersistence.d.ts.map +1 -0
  9. package/dist/audit/decisionPersistence.js +39 -0
  10. package/dist/audit/decisionPersistence.js.map +1 -0
  11. package/dist/audit/decisionSchema.d.ts +89 -0
  12. package/dist/audit/decisionSchema.d.ts.map +1 -0
  13. package/dist/audit/decisionSchema.js +54 -0
  14. package/dist/audit/decisionSchema.js.map +1 -0
  15. package/dist/audit/types.d.ts +17 -0
  16. package/dist/audit/types.d.ts.map +1 -1
  17. package/dist/claims/consistency.d.ts +13 -0
  18. package/dist/claims/consistency.d.ts.map +1 -0
  19. package/dist/claims/consistency.js +159 -0
  20. package/dist/claims/consistency.js.map +1 -0
  21. package/dist/claims/extract.d.ts +21 -0
  22. package/dist/claims/extract.d.ts.map +1 -0
  23. package/dist/claims/extract.js +106 -0
  24. package/dist/claims/extract.js.map +1 -0
  25. package/dist/claims/publication.d.ts +31 -0
  26. package/dist/claims/publication.d.ts.map +1 -0
  27. package/dist/claims/publication.js +135 -0
  28. package/dist/claims/publication.js.map +1 -0
  29. package/dist/claims/types.d.ts +89 -0
  30. package/dist/claims/types.d.ts.map +1 -0
  31. package/dist/claims/types.js +14 -0
  32. package/dist/claims/types.js.map +1 -0
  33. package/dist/confounder/lexicon.d.ts +54 -0
  34. package/dist/confounder/lexicon.d.ts.map +1 -0
  35. package/dist/confounder/lexicon.js +121 -0
  36. package/dist/confounder/lexicon.js.map +1 -0
  37. package/dist/data/gbaPrecedents.d.ts +88 -0
  38. package/dist/data/gbaPrecedents.d.ts.map +1 -0
  39. package/dist/data/gbaPrecedents.js +494 -0
  40. package/dist/data/gbaPrecedents.js.map +1 -0
  41. package/dist/data/searchFilters/ageLimits.d.ts +26 -0
  42. package/dist/data/searchFilters/ageLimits.d.ts.map +1 -0
  43. package/dist/data/searchFilters/ageLimits.js +63 -0
  44. package/dist/data/searchFilters/ageLimits.js.map +1 -0
  45. package/dist/data/searchFilters/embaseOverrides.d.ts +13 -0
  46. package/dist/data/searchFilters/embaseOverrides.d.ts.map +1 -0
  47. package/dist/data/searchFilters/embaseOverrides.js +34 -0
  48. package/dist/data/searchFilters/embaseOverrides.js.map +1 -0
  49. package/dist/data/searchFilters/exclusions.d.ts +12 -0
  50. package/dist/data/searchFilters/exclusions.d.ts.map +1 -0
  51. package/dist/data/searchFilters/exclusions.js +53 -0
  52. package/dist/data/searchFilters/exclusions.js.map +1 -0
  53. package/dist/data/searchFilters/index.d.ts +24 -0
  54. package/dist/data/searchFilters/index.d.ts.map +1 -0
  55. package/dist/data/searchFilters/index.js +75 -0
  56. package/dist/data/searchFilters/index.js.map +1 -0
  57. package/dist/data/searchFilters/signCatalog.d.ts +28 -0
  58. package/dist/data/searchFilters/signCatalog.d.ts.map +1 -0
  59. package/dist/data/searchFilters/signCatalog.js +459 -0
  60. package/dist/data/searchFilters/signCatalog.js.map +1 -0
  61. package/dist/data/searchFilters/signFilterUtils.d.ts +4 -0
  62. package/dist/data/searchFilters/signFilterUtils.d.ts.map +1 -0
  63. package/dist/data/searchFilters/signFilterUtils.js +17 -0
  64. package/dist/data/searchFilters/signFilterUtils.js.map +1 -0
  65. package/dist/epidemiology/quality.d.ts +36 -0
  66. package/dist/epidemiology/quality.d.ts.map +1 -0
  67. package/dist/epidemiology/quality.js +150 -0
  68. package/dist/epidemiology/quality.js.map +1 -0
  69. package/dist/formatters/decisionsMarkdown.d.ts +8 -0
  70. package/dist/formatters/decisionsMarkdown.d.ts.map +1 -0
  71. package/dist/formatters/decisionsMarkdown.js +24 -0
  72. package/dist/formatters/decisionsMarkdown.js.map +1 -0
  73. package/dist/formatters/markdown.d.ts.map +1 -1
  74. package/dist/formatters/markdown.js +8 -1
  75. package/dist/formatters/markdown.js.map +1 -1
  76. package/dist/formatters/panelMarkdown.d.ts +27 -0
  77. package/dist/formatters/panelMarkdown.d.ts.map +1 -0
  78. package/dist/formatters/panelMarkdown.js +88 -0
  79. package/dist/formatters/panelMarkdown.js.map +1 -0
  80. package/dist/gvd/livingGvd.d.ts +14 -0
  81. package/dist/gvd/livingGvd.d.ts.map +1 -0
  82. package/dist/gvd/livingGvd.js +66 -0
  83. package/dist/gvd/livingGvd.js.map +1 -0
  84. package/dist/gvd/types.d.ts +44 -0
  85. package/dist/gvd/types.d.ts.map +1 -0
  86. package/dist/gvd/types.js +12 -0
  87. package/dist/gvd/types.js.map +1 -0
  88. package/dist/iegp/domainRegistry.d.ts +11 -0
  89. package/dist/iegp/domainRegistry.d.ts.map +1 -0
  90. package/dist/iegp/domainRegistry.js +89 -0
  91. package/dist/iegp/domainRegistry.js.map +1 -0
  92. package/dist/iegp/planner.d.ts +3 -0
  93. package/dist/iegp/planner.d.ts.map +1 -0
  94. package/dist/iegp/planner.js +112 -0
  95. package/dist/iegp/planner.js.map +1 -0
  96. package/dist/iegp/types.d.ts +67 -0
  97. package/dist/iegp/types.d.ts.map +1 -0
  98. package/dist/iegp/types.js +12 -0
  99. package/dist/iegp/types.js.map +1 -0
  100. package/dist/knowledge/claimStore.d.ts +5 -0
  101. package/dist/knowledge/claimStore.d.ts.map +1 -0
  102. package/dist/knowledge/claimStore.js +42 -0
  103. package/dist/knowledge/claimStore.js.map +1 -0
  104. package/dist/knowledge/gvdManifestStore.d.ts +4 -0
  105. package/dist/knowledge/gvdManifestStore.d.ts.map +1 -0
  106. package/dist/knowledge/gvdManifestStore.js +34 -0
  107. package/dist/knowledge/gvdManifestStore.js.map +1 -0
  108. package/dist/knowledge/paths.d.ts +2 -0
  109. package/dist/knowledge/paths.d.ts.map +1 -1
  110. package/dist/knowledge/paths.js +6 -0
  111. package/dist/knowledge/paths.js.map +1 -1
  112. package/dist/knowledge/wikiStore.d.ts +7 -0
  113. package/dist/knowledge/wikiStore.d.ts.map +1 -1
  114. package/dist/knowledge/wikiStore.js +24 -2
  115. package/dist/knowledge/wikiStore.js.map +1 -1
  116. package/dist/orchestration/livingEvidence.d.ts +46 -0
  117. package/dist/orchestration/livingEvidence.d.ts.map +1 -0
  118. package/dist/orchestration/livingEvidence.js +215 -0
  119. package/dist/orchestration/livingEvidence.js.map +1 -0
  120. package/dist/panel/mlrGuard.d.ts +23 -0
  121. package/dist/panel/mlrGuard.d.ts.map +1 -0
  122. package/dist/panel/mlrGuard.js +28 -0
  123. package/dist/panel/mlrGuard.js.map +1 -0
  124. package/dist/panel/questionSet.d.ts +31 -0
  125. package/dist/panel/questionSet.d.ts.map +1 -0
  126. package/dist/panel/questionSet.js +67 -0
  127. package/dist/panel/questionSet.js.map +1 -0
  128. package/dist/panel/scenarioMatrix.d.ts +26 -0
  129. package/dist/panel/scenarioMatrix.d.ts.map +1 -0
  130. package/dist/panel/scenarioMatrix.js +61 -0
  131. package/dist/panel/scenarioMatrix.js.map +1 -0
  132. package/dist/panel/seatRunners.d.ts +87 -0
  133. package/dist/panel/seatRunners.d.ts.map +1 -0
  134. package/dist/panel/seatRunners.js +633 -0
  135. package/dist/panel/seatRunners.js.map +1 -0
  136. package/dist/panel/seats.d.ts +37 -0
  137. package/dist/panel/seats.d.ts.map +1 -0
  138. package/dist/panel/seats.js +122 -0
  139. package/dist/panel/seats.js.map +1 -0
  140. package/dist/providers/direct/bluesky.d.ts +7 -0
  141. package/dist/providers/direct/bluesky.d.ts.map +1 -0
  142. package/dist/providers/direct/bluesky.js +150 -0
  143. package/dist/providers/direct/bluesky.js.map +1 -0
  144. package/dist/providers/direct/europePmc.d.ts +3 -0
  145. package/dist/providers/direct/europePmc.d.ts.map +1 -0
  146. package/dist/providers/direct/europePmc.js +46 -0
  147. package/dist/providers/direct/europePmc.js.map +1 -0
  148. package/dist/providers/direct/fullText.d.ts +52 -0
  149. package/dist/providers/direct/fullText.d.ts.map +1 -0
  150. package/dist/providers/direct/fullText.js +259 -0
  151. package/dist/providers/direct/fullText.js.map +1 -0
  152. package/dist/providers/direct/index.d.ts.map +1 -1
  153. package/dist/providers/direct/index.js +50 -7
  154. package/dist/providers/direct/index.js.map +1 -1
  155. package/dist/providers/direct/openAlex.d.ts +3 -0
  156. package/dist/providers/direct/openAlex.d.ts.map +1 -0
  157. package/dist/providers/direct/openAlex.js +52 -0
  158. package/dist/providers/direct/openAlex.js.map +1 -0
  159. package/dist/providers/direct/reddit.d.ts +11 -0
  160. package/dist/providers/direct/reddit.d.ts.map +1 -0
  161. package/dist/providers/direct/reddit.js +159 -0
  162. package/dist/providers/direct/reddit.js.map +1 -0
  163. package/dist/providers/direct/semanticScholar.d.ts +3 -0
  164. package/dist/providers/direct/semanticScholar.d.ts.map +1 -0
  165. package/dist/providers/direct/semanticScholar.js +44 -0
  166. package/dist/providers/direct/semanticScholar.js.map +1 -0
  167. package/dist/providers/direct/whoGho.d.ts +3 -0
  168. package/dist/providers/direct/whoGho.d.ts.map +1 -1
  169. package/dist/providers/direct/whoGho.js +20 -0
  170. package/dist/providers/direct/whoGho.js.map +1 -1
  171. package/dist/providers/factory.d.ts.map +1 -1
  172. package/dist/providers/factory.js +8 -4
  173. package/dist/providers/factory.js.map +1 -1
  174. package/dist/providers/types.d.ts +12 -2
  175. package/dist/providers/types.d.ts.map +1 -1
  176. package/dist/pv/comparativeSafety.d.ts +79 -0
  177. package/dist/pv/comparativeSafety.d.ts.map +1 -0
  178. package/dist/pv/comparativeSafety.js +223 -0
  179. package/dist/pv/comparativeSafety.js.map +1 -0
  180. package/dist/rwe/decisionTree.d.ts +3 -0
  181. package/dist/rwe/decisionTree.d.ts.map +1 -0
  182. package/dist/rwe/decisionTree.js +112 -0
  183. package/dist/rwe/decisionTree.js.map +1 -0
  184. package/dist/rwe/methodRegistry.d.ts +19 -0
  185. package/dist/rwe/methodRegistry.d.ts.map +1 -0
  186. package/dist/rwe/methodRegistry.js +118 -0
  187. package/dist/rwe/methodRegistry.js.map +1 -0
  188. package/dist/rwe/types.d.ts +74 -0
  189. package/dist/rwe/types.d.ts.map +1 -0
  190. package/dist/rwe/types.js +22 -0
  191. package/dist/rwe/types.js.map +1 -0
  192. package/dist/search/__fixtures__/absssiEpi.d.ts +6 -0
  193. package/dist/search/__fixtures__/absssiEpi.d.ts.map +1 -0
  194. package/dist/search/__fixtures__/absssiEpi.js +46 -0
  195. package/dist/search/__fixtures__/absssiEpi.js.map +1 -0
  196. package/dist/search/__fixtures__/adrenalCost.d.ts +6 -0
  197. package/dist/search/__fixtures__/adrenalCost.d.ts.map +1 -0
  198. package/dist/search/__fixtures__/adrenalCost.js +30 -0
  199. package/dist/search/__fixtures__/adrenalCost.js.map +1 -0
  200. package/dist/search/conceptBlock.d.ts +15 -0
  201. package/dist/search/conceptBlock.d.ts.map +1 -0
  202. package/dist/search/conceptBlock.js +67 -0
  203. package/dist/search/conceptBlock.js.map +1 -0
  204. package/dist/search/ovidToPubmed.d.ts +8 -0
  205. package/dist/search/ovidToPubmed.d.ts.map +1 -0
  206. package/dist/search/ovidToPubmed.js +97 -0
  207. package/dist/search/ovidToPubmed.js.map +1 -0
  208. package/dist/search/pubmedCounts.d.ts +4 -0
  209. package/dist/search/pubmedCounts.d.ts.map +1 -0
  210. package/dist/search/pubmedCounts.js +25 -0
  211. package/dist/search/pubmedCounts.js.map +1 -0
  212. package/dist/search/pubmedStrandQuery.d.ts +16 -0
  213. package/dist/search/pubmedStrandQuery.d.ts.map +1 -0
  214. package/dist/search/pubmedStrandQuery.js +35 -0
  215. package/dist/search/pubmedStrandQuery.js.map +1 -0
  216. package/dist/search/queryRouting.d.ts +12 -0
  217. package/dist/search/queryRouting.d.ts.map +1 -0
  218. package/dist/search/queryRouting.js +60 -0
  219. package/dist/search/queryRouting.js.map +1 -0
  220. package/dist/search/strategyAssembler.d.ts +9 -0
  221. package/dist/search/strategyAssembler.d.ts.map +1 -0
  222. package/dist/search/strategyAssembler.js +38 -0
  223. package/dist/search/strategyAssembler.js.map +1 -0
  224. package/dist/search/strategyFormatter.d.ts +28 -0
  225. package/dist/search/strategyFormatter.d.ts.map +1 -0
  226. package/dist/search/strategyFormatter.js +57 -0
  227. package/dist/search/strategyFormatter.js.map +1 -0
  228. package/dist/search/termExpansion.d.ts +9 -0
  229. package/dist/search/termExpansion.d.ts.map +1 -0
  230. package/dist/search/termExpansion.js +131 -0
  231. package/dist/search/termExpansion.js.map +1 -0
  232. package/dist/search/types.d.ts +34 -0
  233. package/dist/search/types.d.ts.map +1 -0
  234. package/dist/search/types.js +2 -0
  235. package/dist/search/types.js.map +1 -0
  236. package/dist/server.js +117 -0
  237. package/dist/server.js.map +1 -1
  238. package/dist/social/protocol.d.ts +12 -0
  239. package/dist/social/protocol.d.ts.map +1 -0
  240. package/dist/social/protocol.js +140 -0
  241. package/dist/social/protocol.js.map +1 -0
  242. package/dist/social/pseudonymize.d.ts +3 -0
  243. package/dist/social/pseudonymize.d.ts.map +1 -0
  244. package/dist/social/pseudonymize.js +6 -0
  245. package/dist/social/pseudonymize.js.map +1 -0
  246. package/dist/social/reportability.d.ts +16 -0
  247. package/dist/social/reportability.d.ts.map +1 -0
  248. package/dist/social/reportability.js +118 -0
  249. package/dist/social/reportability.js.map +1 -0
  250. package/dist/social/types.d.ts +138 -0
  251. package/dist/social/types.d.ts.map +1 -0
  252. package/dist/social/types.js +17 -0
  253. package/dist/social/types.js.map +1 -0
  254. package/dist/sources/registry.d.ts.map +1 -1
  255. package/dist/sources/registry.js +18 -0
  256. package/dist/sources/registry.js.map +1 -1
  257. package/dist/tools/claimRegistry.d.ts +98 -0
  258. package/dist/tools/claimRegistry.d.ts.map +1 -0
  259. package/dist/tools/claimRegistry.js +322 -0
  260. package/dist/tools/claimRegistry.js.map +1 -0
  261. package/dist/tools/claimsQuery.d.ts +2 -2
  262. package/dist/tools/claimsQuery.d.ts.map +1 -1
  263. package/dist/tools/claimsQuery.js +15 -4
  264. package/dist/tools/claimsQuery.js.map +1 -1
  265. package/dist/tools/confounderExpertTemplate.d.ts +59 -0
  266. package/dist/tools/confounderExpertTemplate.d.ts.map +1 -0
  267. package/dist/tools/confounderExpertTemplate.js +132 -0
  268. package/dist/tools/confounderExpertTemplate.js.map +1 -0
  269. package/dist/tools/confounderIdentification.d.ts +382 -0
  270. package/dist/tools/confounderIdentification.d.ts.map +1 -0
  271. package/dist/tools/confounderIdentification.js +712 -0
  272. package/dist/tools/confounderIdentification.js.map +1 -0
  273. package/dist/tools/consistencyCheck.d.ts +90 -0
  274. package/dist/tools/consistencyCheck.d.ts.map +1 -0
  275. package/dist/tools/consistencyCheck.js +197 -0
  276. package/dist/tools/consistencyCheck.js.map +1 -0
  277. package/dist/tools/costEffectivenessModel.d.ts +42 -0
  278. package/dist/tools/costEffectivenessModel.d.ts.map +1 -1
  279. package/dist/tools/costEffectivenessModel.js +13 -1
  280. package/dist/tools/costEffectivenessModel.js.map +1 -1
  281. package/dist/tools/epidemiologyExtract.d.ts +85 -0
  282. package/dist/tools/epidemiologyExtract.d.ts.map +1 -0
  283. package/dist/tools/epidemiologyExtract.js +335 -0
  284. package/dist/tools/epidemiologyExtract.js.map +1 -0
  285. package/dist/tools/evidenceGapAnalysis.d.ts +74 -0
  286. package/dist/tools/evidenceGapAnalysis.d.ts.map +1 -0
  287. package/dist/tools/evidenceGapAnalysis.js +169 -0
  288. package/dist/tools/evidenceGapAnalysis.js.map +1 -0
  289. package/dist/tools/evidenceTriangulation.d.ts +111 -0
  290. package/dist/tools/evidenceTriangulation.d.ts.map +1 -0
  291. package/dist/tools/evidenceTriangulation.js +237 -0
  292. package/dist/tools/evidenceTriangulation.js.map +1 -0
  293. package/dist/tools/evidenceUnmetNeed.d.ts +46 -46
  294. package/dist/tools/examples.d.ts.map +1 -1
  295. package/dist/tools/examples.js +49 -0
  296. package/dist/tools/examples.js.map +1 -1
  297. package/dist/tools/gbaPpdd.d.ts +179 -0
  298. package/dist/tools/gbaPpdd.d.ts.map +1 -0
  299. package/dist/tools/gbaPpdd.js +297 -0
  300. package/dist/tools/gbaPpdd.js.map +1 -0
  301. package/dist/tools/governanceSelfCheck.d.ts +3 -3
  302. package/dist/tools/htaDossierPrep.d.ts +46 -0
  303. package/dist/tools/htaDossierPrep.d.ts.map +1 -1
  304. package/dist/tools/htaDossierPrep.js +63 -17
  305. package/dist/tools/htaDossierPrep.js.map +1 -1
  306. package/dist/tools/htaLivingGvd.d.ts +51 -0
  307. package/dist/tools/htaLivingGvd.d.ts.map +1 -0
  308. package/dist/tools/htaLivingGvd.js +208 -0
  309. package/dist/tools/htaLivingGvd.js.map +1 -0
  310. package/dist/tools/htaPanelSimulation.d.ts +139 -0
  311. package/dist/tools/htaPanelSimulation.d.ts.map +1 -0
  312. package/dist/tools/htaPanelSimulation.js +323 -0
  313. package/dist/tools/htaPanelSimulation.js.map +1 -0
  314. package/dist/tools/htaReviewSimulation.d.ts +20 -20
  315. package/dist/tools/htaWorkflow.d.ts +189 -8
  316. package/dist/tools/htaWorkflow.d.ts.map +1 -1
  317. package/dist/tools/htaWorkflow.js +206 -2
  318. package/dist/tools/htaWorkflow.js.map +1 -1
  319. package/dist/tools/indirectComparison.d.ts +42 -0
  320. package/dist/tools/indirectComparison.d.ts.map +1 -1
  321. package/dist/tools/indirectComparison.js +15 -2
  322. package/dist/tools/indirectComparison.js.map +1 -1
  323. package/dist/tools/itcFeasibility.d.ts +42 -0
  324. package/dist/tools/itcFeasibility.d.ts.map +1 -1
  325. package/dist/tools/itcFeasibility.js +7 -1
  326. package/dist/tools/itcFeasibility.js.map +1 -1
  327. package/dist/tools/literatureFulltext.d.ts +69 -0
  328. package/dist/tools/literatureFulltext.d.ts.map +1 -0
  329. package/dist/tools/literatureFulltext.js +174 -0
  330. package/dist/tools/literatureFulltext.js.map +1 -0
  331. package/dist/tools/literatureSearch.d.ts +77 -1
  332. package/dist/tools/literatureSearch.d.ts.map +1 -1
  333. package/dist/tools/literatureSearch.js +242 -53
  334. package/dist/tools/literatureSearch.js.map +1 -1
  335. package/dist/tools/livingReview.d.ts +6 -6
  336. package/dist/tools/maicWorkflow.d.ts +251 -12
  337. package/dist/tools/maicWorkflow.d.ts.map +1 -1
  338. package/dist/tools/maicWorkflow.js +217 -2
  339. package/dist/tools/maicWorkflow.js.map +1 -1
  340. package/dist/tools/populationAdjustedComparison.d.ts +42 -0
  341. package/dist/tools/populationAdjustedComparison.d.ts.map +1 -1
  342. package/dist/tools/populationAdjustedComparison.js +17 -3
  343. package/dist/tools/populationAdjustedComparison.js.map +1 -1
  344. package/dist/tools/publicationDraft.d.ts +80 -0
  345. package/dist/tools/publicationDraft.d.ts.map +1 -0
  346. package/dist/tools/publicationDraft.js +186 -0
  347. package/dist/tools/publicationDraft.js.map +1 -0
  348. package/dist/tools/pvComparativeSafety.d.ts +113 -0
  349. package/dist/tools/pvComparativeSafety.d.ts.map +1 -0
  350. package/dist/tools/pvComparativeSafety.js +239 -0
  351. package/dist/tools/pvComparativeSafety.js.map +1 -0
  352. package/dist/tools/pvSocialListeningTriage.d.ts +90 -0
  353. package/dist/tools/pvSocialListeningTriage.d.ts.map +1 -0
  354. package/dist/tools/pvSocialListeningTriage.js +180 -0
  355. package/dist/tools/pvSocialListeningTriage.js.map +1 -0
  356. package/dist/tools/queryAgent.d.ts +5 -0
  357. package/dist/tools/queryAgent.d.ts.map +1 -1
  358. package/dist/tools/queryAgent.js +24 -4
  359. package/dist/tools/queryAgent.js.map +1 -1
  360. package/dist/tools/rweMethodSelect.d.ts +50 -0
  361. package/dist/tools/rweMethodSelect.d.ts.map +1 -0
  362. package/dist/tools/rweMethodSelect.js +211 -0
  363. package/dist/tools/rweMethodSelect.js.map +1 -0
  364. package/dist/tools/rweSocialCollect.d.ts +70 -0
  365. package/dist/tools/rweSocialCollect.d.ts.map +1 -0
  366. package/dist/tools/rweSocialCollect.js +147 -0
  367. package/dist/tools/rweSocialCollect.js.map +1 -0
  368. package/dist/tools/rweSocialListeningProtocol.d.ts +73 -0
  369. package/dist/tools/rweSocialListeningProtocol.d.ts.map +1 -0
  370. package/dist/tools/rweSocialListeningProtocol.js +167 -0
  371. package/dist/tools/rweSocialListeningProtocol.js.map +1 -0
  372. package/dist/tools/screenAbstracts.d.ts +51 -5
  373. package/dist/tools/screenAbstracts.d.ts.map +1 -1
  374. package/dist/tools/screenAbstracts.js +113 -39
  375. package/dist/tools/screenAbstracts.js.map +1 -1
  376. package/dist/tools/searchStrategyBuild.d.ts +146 -0
  377. package/dist/tools/searchStrategyBuild.d.ts.map +1 -0
  378. package/dist/tools/searchStrategyBuild.js +327 -0
  379. package/dist/tools/searchStrategyBuild.js.map +1 -0
  380. package/dist/tools/verifyCitations.d.ts +110 -0
  381. package/dist/tools/verifyCitations.d.ts.map +1 -0
  382. package/dist/tools/verifyCitations.js +462 -0
  383. package/dist/tools/verifyCitations.js.map +1 -0
  384. package/dist/tools/workflowLivingEvidence.d.ts +73 -0
  385. package/dist/tools/workflowLivingEvidence.d.ts.map +1 -0
  386. package/dist/tools/workflowLivingEvidence.js +152 -0
  387. package/dist/tools/workflowLivingEvidence.js.map +1 -0
  388. package/dist/triangulation/concordance.d.ts +17 -0
  389. package/dist/triangulation/concordance.d.ts.map +1 -0
  390. package/dist/triangulation/concordance.js +203 -0
  391. package/dist/triangulation/concordance.js.map +1 -0
  392. package/dist/triangulation/types.d.ts +65 -0
  393. package/dist/triangulation/types.d.ts.map +1 -0
  394. package/dist/triangulation/types.js +13 -0
  395. package/dist/triangulation/types.js.map +1 -0
  396. package/package.json +3 -2
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "serverInfo": {
3
3
  "name": "heor-agent-mcp",
4
- "version": "1.16.0",
5
- "description": "AI-powered Health Economics and Outcomes Research (HEOR) MCP server. 28 tools for literature search (44 data sources incl. OHE and EuroQol), risk of bias assessment (RoB 2/ROBINS-I/AMSTAR-2 with GRADE integration), cost-effectiveness modeling (Markov/PartSA with live-formula XLSX, PSA/EVPPI/scenarios, QALY + evLYG summary metrics), budget impact analysis, abstract screening, survival curve fitting, indirect comparisons (Bucher/NMA/MAIC/STC) with I²/Cochran Q heterogeneity, ITC feasibility assessment (3-assumption framework), pharmacovigilance study classification (PASS/PAES/RMP/DUS/registry per EMA GVP rev 4), EU Joint Clinical Assessment (JCA) PICO matrix analyzer (DE/FR/IT/ES/NL + UK context), pharmacovigilance signal workflow (PRR/ROR/IC/MGPS per GVP Module IX rev 2 + GVP P.III pregnancy follow-up), MAIC pipeline orchestration, HTA dossier prep (NICE/EMA/FDA/IQWiG/HAS/EU JCA/GVD) with auto-GRADE + PV plan + NICE severity modifier + health inequalities + Global Value Dossier (13 sections, 4-market subsections US/UK/EU5/JP, gvd_evidence_pack pipe interface), structured unmet need assessment (evidence.unmet_need — 4-dimension framework: disease burden/treatment landscape/QoL/economic burden; pipes into GVD Section 4 + hta_dossier), UK EQ-5D-5L value set impact estimator, neurology & cognitive outcome scale scoring (UMSARS/UPDRS/MDS-UPDRS/ADAS-Cog/MoCA/MMSE with MCID responder classification + NNIPPS/PPMI/ADNI trajectory comparison), IRB/Ethics Committee submission classifier, examples + recipe templates."
4
+ "version": "1.35.0",
5
+ "description": "AI-powered Health Economics and Outcomes Research (HEOR) MCP server. 47 tools for literature search (44 data sources incl. OHE and EuroQol), risk of bias assessment (RoB 2/ROBINS-I/AMSTAR-2 with GRADE integration), cost-effectiveness modeling (Markov/PartSA with live-formula XLSX, PSA/EVPPI/scenarios, QALY + evLYG summary metrics), budget impact analysis, abstract screening, survival curve fitting, indirect comparisons (Bucher/NMA/MAIC/STC) with I²/Cochran Q heterogeneity, ITC feasibility assessment (3-assumption framework), pharmacovigilance study classification (PASS/PAES/RMP/DUS/registry per EMA GVP rev 4), EU Joint Clinical Assessment (JCA) PICO matrix analyzer (DE/FR/IT/ES/NL + UK context), pharmacovigilance signal workflow (PRR/ROR/IC/MGPS per GVP Module IX rev 2 + GVP P.III pregnancy follow-up), MAIC pipeline orchestration, HTA dossier prep (NICE/EMA/FDA/IQWiG/HAS/EU JCA/GVD) with auto-GRADE + PV plan + NICE severity modifier + health inequalities + Global Value Dossier (13 sections, 4-market subsections US/UK/EU5/JP, gvd_evidence_pack pipe interface), structured unmet need assessment (evidence.unmet_need — 4-dimension framework: disease burden/treatment landscape/QoL/economic burden; pipes into GVD Section 4 + hta_dossier), UK EQ-5D-5L value set impact estimator, neurology & cognitive outcome scale scoring (UMSARS/UPDRS/MDS-UPDRS/ADAS-Cog/MoCA/MMSE with MCID responder classification + NNIPPS/PPMI/ADNI trajectory comparison), IRB/Ethics Committee submission classifier, examples + recipe templates."
6
6
  },
7
7
  "authentication": {
8
8
  "required": false,
package/README.md CHANGED
@@ -126,7 +126,16 @@ The first prompt exercises `literature_search` + `validate_links` (free, no API
126
126
 
127
127
  ## What's new
128
128
 
129
- See [CHANGELOG.md](./CHANGELOG.md) for full version history. Current: **v1.13.0** (28 tools, 44 data sources).
129
+ See [CHANGELOG.md](./CHANGELOG.md) for full version history. Current: **v1.23.0** (45 tools, 44 data sources).
130
+
131
+ ### v1.17.0–v1.23.0 — Living Evidence Intelligence (review → reimbursement)
132
+
133
+ A connected RWE + cross-deliverable layer (see [docs/FEATURES.md](./docs/FEATURES.md) for the full table):
134
+
135
+ - **RWE & real-world safety:** `rwe.method_select` (study-design selection), `pv.comparative_safety` (class-level FAERS-style AE ranking), `evidence.triangulation` (per-outcome RCT↔RWE concordance).
136
+ - **Governed social listening:** `rwe.social_listening_protocol` + `pv.social_listening_triage` (GVP Module VI ICSR triage — no scraping).
137
+ - **One source of truth:** `evidence.claim_registry` (author/auto-import a figure once), `evidence.consistency_check` (detect drift across dossier/publication/payer), `publication.draft` (reuse claims; CONSORT/STROBE/PRISMA/CHEERS + GPP2022/ICMJE).
138
+ - **Living orchestration:** `evidence.gap_analysis` (iEGP), `workflow.living_evidence` (SLR → living KB → JCA/HTA runbook), `hta.living_gvd` (regenerate only the GVD sections whose figures changed).
130
139
 
131
140
  ### v1.13.0 — AI Transparency Disclosure (ISPOR ELEVATE-GenAI aligned)
132
141
 
@@ -1,4 +1,4 @@
1
- import type { AuditRecord, SourceAudit, ExclusionRecord, ToolCallTrace } from "./types.js";
1
+ import type { AuditRecord, SourceAudit, ExclusionRecord, ToolCallTrace, DecisionRecord } from "./types.js";
2
2
  export declare function createAuditRecord(tool: string, query: Record<string, unknown>, output_format: string, methodology?: string): AuditRecord;
3
3
  export declare function addToolCall(record: AuditRecord, trace: ToolCallTrace): AuditRecord;
4
4
  export declare function addSource(record: AuditRecord, source: SourceAudit): AuditRecord;
@@ -6,4 +6,5 @@ export declare function addExclusion(record: AuditRecord, exclusion: ExclusionRe
6
6
  export declare function addAssumption(record: AuditRecord, assumption: string): AuditRecord;
7
7
  export declare function addWarning(record: AuditRecord, warning: string): AuditRecord;
8
8
  export declare function setMethodology(record: AuditRecord, methodology: string): AuditRecord;
9
+ export declare function addDecisions(record: AuditRecord, decisions: DecisionRecord[]): AuditRecord;
9
10
  //# sourceMappingURL=builder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/audit/builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EACX,eAAe,EACf,aAAa,EACd,MAAM,YAAY,CAAC;AAEpB,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,aAAa,EAAE,MAAM,EACrB,WAAW,SAAK,GACf,WAAW,CAcb;AAED,wBAAgB,WAAW,CACzB,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,aAAa,GACnB,WAAW,CAEb;AAED,wBAAgB,SAAS,CACvB,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,WAAW,GAClB,WAAW,CAMb;AAED,wBAAgB,YAAY,CAC1B,MAAM,EAAE,WAAW,EACnB,SAAS,EAAE,eAAe,GACzB,WAAW,CAKb;AAED,wBAAgB,aAAa,CAC3B,MAAM,EAAE,WAAW,EACnB,UAAU,EAAE,MAAM,GACjB,WAAW,CAEb;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,WAAW,CAE5E;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,WAAW,EACnB,WAAW,EAAE,MAAM,GAClB,WAAW,CAEb"}
1
+ {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/audit/builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EACX,eAAe,EACf,aAAa,EACb,cAAc,EACf,MAAM,YAAY,CAAC;AAEpB,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,aAAa,EAAE,MAAM,EACrB,WAAW,SAAK,GACf,WAAW,CAcb;AAED,wBAAgB,WAAW,CACzB,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,aAAa,GACnB,WAAW,CAEb;AAED,wBAAgB,SAAS,CACvB,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,WAAW,GAClB,WAAW,CAMb;AAED,wBAAgB,YAAY,CAC1B,MAAM,EAAE,WAAW,EACnB,SAAS,EAAE,eAAe,GACzB,WAAW,CAKb;AAED,wBAAgB,aAAa,CAC3B,MAAM,EAAE,WAAW,EACnB,UAAU,EAAE,MAAM,GACjB,WAAW,CAEb;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,WAAW,CAE5E;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,WAAW,EACnB,WAAW,EAAE,MAAM,GAClB,WAAW,CAEb;AAED,wBAAgB,YAAY,CAC1B,MAAM,EAAE,WAAW,EACnB,SAAS,EAAE,cAAc,EAAE,GAC1B,WAAW,CAUb"}
@@ -38,4 +38,16 @@ export function addWarning(record, warning) {
38
38
  export function setMethodology(record, methodology) {
39
39
  return { ...record, methodology };
40
40
  }
41
+ export function addDecisions(record, decisions) {
42
+ if (decisions.length === 0)
43
+ return record;
44
+ const stamped = decisions.map((d) => ({
45
+ ...d,
46
+ recorded_at: new Date().toISOString(),
47
+ }));
48
+ return {
49
+ ...record,
50
+ decisions: [...(record.decisions ?? []), ...stamped],
51
+ };
52
+ }
41
53
  //# sourceMappingURL=builder.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"builder.js","sourceRoot":"","sources":["../../src/audit/builder.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,iBAAiB,CAC/B,IAAY,EACZ,KAA8B,EAC9B,aAAqB,EACrB,WAAW,GAAG,EAAE;IAEhB,OAAO;QACL,IAAI;QACJ,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,KAAK;QACL,eAAe,EAAE,EAAE;QACnB,WAAW;QACX,UAAU,EAAE,CAAC;QACb,UAAU,EAAE,EAAE;QACd,WAAW,EAAE,EAAE;QACf,QAAQ,EAAE,EAAE;QACZ,aAAa;QACb,YAAY,EAAE,EAAE;KACjB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CACzB,MAAmB,EACnB,KAAoB;IAEpB,OAAO,EAAE,GAAG,MAAM,EAAE,YAAY,EAAE,CAAC,GAAG,MAAM,CAAC,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,SAAS,CACvB,MAAmB,EACnB,MAAmB;IAEnB,OAAO;QACL,GAAG,MAAM;QACT,eAAe,EAAE,CAAC,GAAG,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC;QACpD,UAAU,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,gBAAgB;KACxD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,MAAmB,EACnB,SAA0B;IAE1B,OAAO;QACL,GAAG,MAAM;QACT,UAAU,EAAE,CAAC,GAAG,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC;KAC9C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,MAAmB,EACnB,UAAkB;IAElB,OAAO,EAAE,GAAG,MAAM,EAAE,WAAW,EAAE,CAAC,GAAG,MAAM,CAAC,WAAW,EAAE,UAAU,CAAC,EAAE,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAmB,EAAE,OAAe;IAC7D,OAAO,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,MAAmB,EACnB,WAAmB;IAEnB,OAAO,EAAE,GAAG,MAAM,EAAE,WAAW,EAAE,CAAC;AACpC,CAAC"}
1
+ {"version":3,"file":"builder.js","sourceRoot":"","sources":["../../src/audit/builder.ts"],"names":[],"mappings":"AAQA,MAAM,UAAU,iBAAiB,CAC/B,IAAY,EACZ,KAA8B,EAC9B,aAAqB,EACrB,WAAW,GAAG,EAAE;IAEhB,OAAO;QACL,IAAI;QACJ,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,KAAK;QACL,eAAe,EAAE,EAAE;QACnB,WAAW;QACX,UAAU,EAAE,CAAC;QACb,UAAU,EAAE,EAAE;QACd,WAAW,EAAE,EAAE;QACf,QAAQ,EAAE,EAAE;QACZ,aAAa;QACb,YAAY,EAAE,EAAE;KACjB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CACzB,MAAmB,EACnB,KAAoB;IAEpB,OAAO,EAAE,GAAG,MAAM,EAAE,YAAY,EAAE,CAAC,GAAG,MAAM,CAAC,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,SAAS,CACvB,MAAmB,EACnB,MAAmB;IAEnB,OAAO;QACL,GAAG,MAAM;QACT,eAAe,EAAE,CAAC,GAAG,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC;QACpD,UAAU,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,gBAAgB;KACxD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,MAAmB,EACnB,SAA0B;IAE1B,OAAO;QACL,GAAG,MAAM;QACT,UAAU,EAAE,CAAC,GAAG,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC;KAC9C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,MAAmB,EACnB,UAAkB;IAElB,OAAO,EAAE,GAAG,MAAM,EAAE,WAAW,EAAE,CAAC,GAAG,MAAM,CAAC,WAAW,EAAE,UAAU,CAAC,EAAE,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAmB,EAAE,OAAe;IAC7D,OAAO,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,MAAmB,EACnB,WAAmB;IAEnB,OAAO,EAAE,GAAG,MAAM,EAAE,WAAW,EAAE,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,MAAmB,EACnB,SAA2B;IAE3B,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC;IAC1C,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACpC,GAAG,CAAC;QACJ,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACtC,CAAC,CAAC,CAAC;IACJ,OAAO;QACL,GAAG,MAAM;QACT,SAAS,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC;KACrD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { DecisionRecord } from "./types.js";
2
+ export declare const DECISIONS_WIKI_PATH = "wiki/decisions.md";
3
+ /**
4
+ * Append decision records to the project's wiki/decisions.md.
5
+ * NEVER throws — persistence failure must not fail the analysis
6
+ * (design log #52). Returns null on success, a warning string on failure
7
+ * for the caller to attach via addWarning().
8
+ */
9
+ export declare function persistDecisions(projectId: string, tool: string, decisions: DecisionRecord[]): Promise<string | null>;
10
+ //# sourceMappingURL=decisionPersistence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decisionPersistence.d.ts","sourceRoot":"","sources":["../../src/audit/decisionPersistence.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,eAAO,MAAM,mBAAmB,sBAAsB,CAAC;AAqBvD;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,cAAc,EAAE,GAC1B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAaxB"}
@@ -0,0 +1,39 @@
1
+ import { appendWikiFile } from "../knowledge/wikiStore.js";
2
+ export const DECISIONS_WIKI_PATH = "wiki/decisions.md";
3
+ function decisionToWikiBlock(tool, d) {
4
+ const lines = [
5
+ `\n## ${d.decision_point} — ${tool}`,
6
+ `- **Recorded:** ${d.recorded_at ?? new Date().toISOString()}`,
7
+ `- **Decided by:** ${d.decided_by}`,
8
+ `- **Choice:** ${d.choice}`,
9
+ `- **Rationale:** ${d.rationale}`,
10
+ ];
11
+ if (d.alternatives_considered?.length) {
12
+ lines.push(`- **Alternatives considered:** ${d.alternatives_considered.join("; ")}`);
13
+ }
14
+ if (d.references?.length) {
15
+ lines.push(`- **References (unverified):** ${d.references.join(", ")}`);
16
+ }
17
+ return lines.join("\n") + "\n";
18
+ }
19
+ /**
20
+ * Append decision records to the project's wiki/decisions.md.
21
+ * NEVER throws — persistence failure must not fail the analysis
22
+ * (design log #52). Returns null on success, a warning string on failure
23
+ * for the caller to attach via addWarning().
24
+ */
25
+ export async function persistDecisions(projectId, tool, decisions) {
26
+ if (decisions.length === 0)
27
+ return null;
28
+ try {
29
+ const content = decisions
30
+ .map((d) => decisionToWikiBlock(tool, d))
31
+ .join("");
32
+ await appendWikiFile(projectId, DECISIONS_WIKI_PATH, content);
33
+ return null;
34
+ }
35
+ catch (e) {
36
+ return `decision records could not be persisted to ${DECISIONS_WIKI_PATH}: ${e instanceof Error ? e.message : String(e)}`;
37
+ }
38
+ }
39
+ //# sourceMappingURL=decisionPersistence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decisionPersistence.js","sourceRoot":"","sources":["../../src/audit/decisionPersistence.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAG3D,MAAM,CAAC,MAAM,mBAAmB,GAAG,mBAAmB,CAAC;AAEvD,SAAS,mBAAmB,CAAC,IAAY,EAAE,CAAiB;IAC1D,MAAM,KAAK,GAAG;QACZ,QAAQ,CAAC,CAAC,cAAc,MAAM,IAAI,EAAE;QACpC,mBAAmB,CAAC,CAAC,WAAW,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE;QAC9D,qBAAqB,CAAC,CAAC,UAAU,EAAE;QACnC,iBAAiB,CAAC,CAAC,MAAM,EAAE;QAC3B,oBAAoB,CAAC,CAAC,SAAS,EAAE;KAClC,CAAC;IACF,IAAI,CAAC,CAAC,uBAAuB,EAAE,MAAM,EAAE,CAAC;QACtC,KAAK,CAAC,IAAI,CACR,kCAAkC,CAAC,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACzE,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AACjC,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,SAAiB,EACjB,IAAY,EACZ,SAA2B;IAE3B,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACxC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,SAAS;aACtB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;aACxC,IAAI,CAAC,EAAE,CAAC,CAAC;QACZ,MAAM,cAAc,CAAC,SAAS,EAAE,mBAAmB,EAAE,OAAO,CAAC,CAAC;QAC9D,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,8CAA8C,mBAAmB,KACtE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAC3C,EAAE,CAAC;IACL,CAAC;AACH,CAAC"}
@@ -0,0 +1,89 @@
1
+ import { z } from "zod";
2
+ export declare const DecisionRecordSchema: z.ZodObject<{
3
+ decision_point: z.ZodString;
4
+ choice: z.ZodString;
5
+ rationale: z.ZodString;
6
+ alternatives_considered: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
7
+ decided_by: z.ZodEnum<["user", "agent_proposed_user_confirmed", "agent"]>;
8
+ references: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
9
+ }, "strip", z.ZodTypeAny, {
10
+ decision_point: string;
11
+ choice: string;
12
+ rationale: string;
13
+ decided_by: "user" | "agent_proposed_user_confirmed" | "agent";
14
+ alternatives_considered?: string[] | undefined;
15
+ references?: string[] | undefined;
16
+ }, {
17
+ decision_point: string;
18
+ choice: string;
19
+ rationale: string;
20
+ decided_by: "user" | "agent_proposed_user_confirmed" | "agent";
21
+ alternatives_considered?: string[] | undefined;
22
+ references?: string[] | undefined;
23
+ }>;
24
+ export declare const DecisionsParam: z.ZodOptional<z.ZodArray<z.ZodObject<{
25
+ decision_point: z.ZodString;
26
+ choice: z.ZodString;
27
+ rationale: z.ZodString;
28
+ alternatives_considered: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
29
+ decided_by: z.ZodEnum<["user", "agent_proposed_user_confirmed", "agent"]>;
30
+ references: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
31
+ }, "strip", z.ZodTypeAny, {
32
+ decision_point: string;
33
+ choice: string;
34
+ rationale: string;
35
+ decided_by: "user" | "agent_proposed_user_confirmed" | "agent";
36
+ alternatives_considered?: string[] | undefined;
37
+ references?: string[] | undefined;
38
+ }, {
39
+ decision_point: string;
40
+ choice: string;
41
+ rationale: string;
42
+ decided_by: "user" | "agent_proposed_user_confirmed" | "agent";
43
+ alternatives_considered?: string[] | undefined;
44
+ references?: string[] | undefined;
45
+ }>, "many">>;
46
+ /** Hand-written JSON inputSchema fragment — reuse in every tool's inputSchema.properties (DRY, drift-proof). */
47
+ export declare const DECISIONS_SCHEMA_PROPERTY: {
48
+ readonly type: "array";
49
+ readonly maxItems: 20;
50
+ readonly description: "Methodological decisions made in conversation (source selection, comparator choice, screening criteria, model structure...). Each entry records the choice, the rationale (why), alternatives rejected, and who decided. Embedded in the audit trail Decision Log and, when a project is supplied, appended to wiki/decisions.md for cross-session recall. Tools never invent decisions — only pass what the user made or confirmed. Design log #52.";
51
+ readonly items: {
52
+ readonly type: "object";
53
+ readonly required: readonly ["decision_point", "choice", "rationale", "decided_by"];
54
+ readonly properties: {
55
+ readonly decision_point: {
56
+ readonly type: "string";
57
+ readonly description: "e.g. source_selection, comparator_choice, screening_criteria, model_structure";
58
+ };
59
+ readonly choice: {
60
+ readonly type: "string";
61
+ readonly description: "What was decided";
62
+ };
63
+ readonly rationale: {
64
+ readonly type: "string";
65
+ readonly description: "Why — required, non-empty";
66
+ };
67
+ readonly alternatives_considered: {
68
+ readonly type: "array";
69
+ readonly items: {
70
+ readonly type: "string";
71
+ };
72
+ readonly description: "What was rejected";
73
+ };
74
+ readonly decided_by: {
75
+ readonly type: "string";
76
+ readonly enum: readonly ["user", "agent_proposed_user_confirmed", "agent"];
77
+ readonly description: "Who made the decision — mark honestly";
78
+ };
79
+ readonly references: {
80
+ readonly type: "array";
81
+ readonly items: {
82
+ readonly type: "string";
83
+ };
84
+ readonly description: "DOI/PMID/URL — recorded verbatim, rendered as unverified unless verified via utils.verify_citations";
85
+ };
86
+ };
87
+ };
88
+ };
89
+ //# sourceMappingURL=decisionSchema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decisionSchema.d.ts","sourceRoot":"","sources":["../../src/audit/decisionSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;EAS/B,CAAC;AAEH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;YAIO,CAAC;AAEnC,gHAAgH;AAChH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoC5B,CAAC"}
@@ -0,0 +1,54 @@
1
+ import { z } from "zod";
2
+ const DECISIONS_DESCRIPTION = "Methodological decisions made in conversation (source selection, comparator choice, screening criteria, model structure...). Each entry records the choice, the rationale (why), alternatives rejected, and who decided. Embedded in the audit trail Decision Log and, when a project is supplied, appended to wiki/decisions.md for cross-session recall. Tools never invent decisions — only pass what the user made or confirmed. Design log #52.";
3
+ export const DecisionRecordSchema = z.object({
4
+ decision_point: z.string().min(1),
5
+ choice: z.string().min(1),
6
+ rationale: z
7
+ .string()
8
+ .min(1, "rationale is required — a decision without a why is not provenance"),
9
+ alternatives_considered: z.array(z.string()).optional(),
10
+ decided_by: z.enum(["user", "agent_proposed_user_confirmed", "agent"]),
11
+ references: z.array(z.string()).optional(),
12
+ });
13
+ export const DecisionsParam = z
14
+ .array(DecisionRecordSchema)
15
+ .max(20)
16
+ .optional()
17
+ .describe(DECISIONS_DESCRIPTION);
18
+ /** Hand-written JSON inputSchema fragment — reuse in every tool's inputSchema.properties (DRY, drift-proof). */
19
+ export const DECISIONS_SCHEMA_PROPERTY = {
20
+ type: "array",
21
+ maxItems: 20,
22
+ description: DECISIONS_DESCRIPTION,
23
+ items: {
24
+ type: "object",
25
+ required: ["decision_point", "choice", "rationale", "decided_by"],
26
+ properties: {
27
+ decision_point: {
28
+ type: "string",
29
+ description: "e.g. source_selection, comparator_choice, screening_criteria, model_structure",
30
+ },
31
+ choice: { type: "string", description: "What was decided" },
32
+ rationale: {
33
+ type: "string",
34
+ description: "Why — required, non-empty",
35
+ },
36
+ alternatives_considered: {
37
+ type: "array",
38
+ items: { type: "string" },
39
+ description: "What was rejected",
40
+ },
41
+ decided_by: {
42
+ type: "string",
43
+ enum: ["user", "agent_proposed_user_confirmed", "agent"],
44
+ description: "Who made the decision — mark honestly",
45
+ },
46
+ references: {
47
+ type: "array",
48
+ items: { type: "string" },
49
+ description: "DOI/PMID/URL — recorded verbatim, rendered as unverified unless verified via utils.verify_citations",
50
+ },
51
+ },
52
+ },
53
+ };
54
+ //# sourceMappingURL=decisionSchema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decisionSchema.js","sourceRoot":"","sources":["../../src/audit/decisionSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,qBAAqB,GACzB,sbAAsb,CAAC;AAEzb,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACjC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,EAAE,oEAAoE,CAAC;IAC/E,uBAAuB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACvD,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,+BAA+B,EAAE,OAAO,CAAC,CAAC;IACtE,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;CAC3C,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC;KAC5B,KAAK,CAAC,oBAAoB,CAAC;KAC3B,GAAG,CAAC,EAAE,CAAC;KACP,QAAQ,EAAE;KACV,QAAQ,CAAC,qBAAqB,CAAC,CAAC;AAEnC,gHAAgH;AAChH,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,IAAI,EAAE,OAAO;IACb,QAAQ,EAAE,EAAE;IACZ,WAAW,EAAE,qBAAqB;IAClC,KAAK,EAAE;QACL,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,CAAC,gBAAgB,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,CAAC;QACjE,UAAU,EAAE;YACV,cAAc,EAAE;gBACd,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,+EAA+E;aAClF;YACD,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kBAAkB,EAAE;YAC3D,SAAS,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,2BAA2B;aACzC;YACD,uBAAuB,EAAE;gBACvB,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACzB,WAAW,EAAE,mBAAmB;aACjC;YACD,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,MAAM,EAAE,+BAA+B,EAAE,OAAO,CAAC;gBACxD,WAAW,EAAE,uCAAuC;aACrD;YACD,UAAU,EAAE;gBACV,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACzB,WAAW,EACT,qGAAqG;aACxG;SACF;KACF;CACO,CAAC"}
@@ -25,6 +25,21 @@ export interface ToolCallTrace {
25
25
  outcome: "ok" | "degraded" | "skipped" | "error";
26
26
  output_size_bytes?: number;
27
27
  }
28
+ export interface DecisionRecord {
29
+ /** e.g. "source_selection", "comparator_choice", "screening_criteria", "model_structure" */
30
+ decision_point: string;
31
+ /** What was decided */
32
+ choice: string;
33
+ /** Why — required, non-empty. A decision without a why is noise, not provenance. */
34
+ rationale: string;
35
+ alternatives_considered?: string[];
36
+ /** Provenance of the decision itself — feeds governance_self_check human-oversight dimension */
37
+ decided_by: "user" | "agent_proposed_user_confirmed" | "agent";
38
+ /** DOI/PMID/URL — recorded verbatim, rendered as unverified unless caller ran utils.verify_citations */
39
+ references?: string[];
40
+ /** ISO 8601 — stamped by addDecisions() on ingest, never caller-supplied */
41
+ recorded_at?: string;
42
+ }
28
43
  export interface AuditRecord {
29
44
  tool: string;
30
45
  /** ISO 8601 timestamp when the tool invocation began (query start time, not completion time) */
@@ -42,5 +57,7 @@ export interface AuditRecord {
42
57
  warnings: string[];
43
58
  output_format: string;
44
59
  tools_called: ToolCallTrace[];
60
+ /** Methodological decisions supplied by the calling LLM/user — tools never invent these (design log #52) */
61
+ decisions?: DecisionRecord[];
45
62
  }
46
63
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/audit/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,IAAI,GAAG,SAAS,GAAG,QAAQ,CAAC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,IAAI,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC;IACjD,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,gGAAgG;IAChG,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,eAAe,EAAE,WAAW,EAAE,CAAC;IAC/B,8FAA8F;IAC9F,gBAAgB,CAAC,EAAE,kBAAkB,EAAE,CAAC;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,wFAAwF;IACxF,UAAU,EAAE,MAAM,CAAC;IACnB,0LAA0L;IAC1L,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,aAAa,EAAE,CAAC;CAC/B"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/audit/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,IAAI,GAAG,SAAS,GAAG,QAAQ,CAAC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,IAAI,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC;IACjD,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,cAAc;IAC7B,4FAA4F;IAC5F,cAAc,EAAE,MAAM,CAAC;IACvB,uBAAuB;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,oFAAoF;IACpF,SAAS,EAAE,MAAM,CAAC;IAClB,uBAAuB,CAAC,EAAE,MAAM,EAAE,CAAC;IACnC,gGAAgG;IAChG,UAAU,EAAE,MAAM,GAAG,+BAA+B,GAAG,OAAO,CAAC;IAC/D,wGAAwG;IACxG,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,4EAA4E;IAC5E,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,gGAAgG;IAChG,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,eAAe,EAAE,WAAW,EAAE,CAAC;IAC/B,8FAA8F;IAC9F,gBAAgB,CAAC,EAAE,kBAAkB,EAAE,CAAC;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,wFAAwF;IACxF,UAAU,EAAE,MAAM,CAAC;IACnB,0LAA0L;IAC1L,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,aAAa,EAAE,CAAC;IAC9B,4GAA4G;IAC5G,SAAS,CAAC,EAAE,cAAc,EAAE,CAAC;CAC9B"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Pure cross-deliverable consistency checker. No I/O.
3
+ *
4
+ * For each registered claim × each deliverable, decides whether the claim
5
+ * appears consistently, has drifted (a DIFFERENT number sits next to the
6
+ * claim's keywords), or is absent. Deterministic: locates the claim by its
7
+ * keywords, extracts nearby numbers, and compares to the canonical value.
8
+ */
9
+ import type { Claim, ConsistencyResult, DeliverableInput } from "./types.js";
10
+ /** Parse a numeric token (currency/commas/%/whitespace tolerated) → number | null. */
11
+ export declare function parseNumber(token: string): number | null;
12
+ export declare function checkConsistency(claims: Claim[], deliverables: DeliverableInput[]): ConsistencyResult;
13
+ //# sourceMappingURL=consistency.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consistency.d.ts","sourceRoot":"","sources":["../../src/claims/consistency.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EACV,KAAK,EAEL,iBAAiB,EACjB,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAKpB,sFAAsF;AACtF,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAKxD;AAoID,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,KAAK,EAAE,EACf,YAAY,EAAE,gBAAgB,EAAE,GAC/B,iBAAiB,CAqCnB"}
@@ -0,0 +1,159 @@
1
+ /** ±N characters around a keyword hit to scan for a number. */
2
+ const WINDOW = 70;
3
+ /** Parse a numeric token (currency/commas/%/whitespace tolerated) → number | null. */
4
+ export function parseNumber(token) {
5
+ const cleaned = token.replace(/[,\s$£€%]/g, "").replace(/[^0-9.\-]/g, "");
6
+ if (cleaned === "" || cleaned === "-" || cleaned === ".")
7
+ return null;
8
+ const n = Number(cleaned);
9
+ return Number.isFinite(n) ? n : null;
10
+ }
11
+ const NUMBER_RE = /-?[£$€]?\s?\d[\d,]*(?:\.\d+)?\s?%?/g;
12
+ function numbersNear(text, keyword) {
13
+ const lowerText = text.toLowerCase();
14
+ const kw = keyword.toLowerCase();
15
+ const out = [];
16
+ let from = 0;
17
+ for (;;) {
18
+ const idx = lowerText.indexOf(kw, from);
19
+ if (idx === -1)
20
+ break;
21
+ const start = Math.max(0, idx - WINDOW);
22
+ const end = Math.min(text.length, idx + kw.length + WINDOW);
23
+ const window = text.slice(start, end);
24
+ const matches = window.match(NUMBER_RE) ?? [];
25
+ for (const m of matches) {
26
+ const v = parseNumber(m);
27
+ if (v !== null)
28
+ out.push({ raw: m.trim(), value: v });
29
+ }
30
+ from = idx + kw.length;
31
+ }
32
+ return out;
33
+ }
34
+ /** Two numbers are "equal" within a small relative tolerance (exact for integers). */
35
+ function numbersEqual(a, b) {
36
+ if (a === b)
37
+ return true;
38
+ const denom = Math.max(Math.abs(a), Math.abs(b), 1);
39
+ return Math.abs(a - b) / denom <= 0.005; // 0.5%
40
+ }
41
+ function hasAnyKeyword(text, claim) {
42
+ const lower = text.toLowerCase();
43
+ return claim.keywords.some((k) => k.trim() && lower.includes(k.trim().toLowerCase()));
44
+ }
45
+ function checkClaimInDeliverable(claim, deliverable) {
46
+ const keywordHit = hasAnyKeyword(deliverable.text, claim);
47
+ // Qualitative claim (no numeric value): presence by keyword is all we check.
48
+ if (typeof claim.numeric_value !== "number") {
49
+ if (keywordHit) {
50
+ return {
51
+ claim_id: claim.id,
52
+ deliverable: deliverable.name,
53
+ status: "consistent",
54
+ conflicting_values: [],
55
+ note: "Qualitative claim — keyword(s) present; verify wording manually.",
56
+ };
57
+ }
58
+ return {
59
+ claim_id: claim.id,
60
+ deliverable: deliverable.name,
61
+ status: "absent",
62
+ conflicting_values: [],
63
+ note: "Claim keywords not found in this deliverable.",
64
+ };
65
+ }
66
+ if (!keywordHit) {
67
+ return {
68
+ claim_id: claim.id,
69
+ deliverable: deliverable.name,
70
+ status: "absent",
71
+ conflicting_values: [],
72
+ note: "Claim keywords not found — claim does not appear in this deliverable.",
73
+ };
74
+ }
75
+ // Keyword present → look for numbers near it and compare to canonical.
76
+ const found = claim.keywords.flatMap((k) => numbersNear(deliverable.text, k));
77
+ if (found.length === 0) {
78
+ return {
79
+ claim_id: claim.id,
80
+ deliverable: deliverable.name,
81
+ status: "consistent",
82
+ conflicting_values: [],
83
+ note: "Keyword present but no adjacent number found — verify the value is stated.",
84
+ };
85
+ }
86
+ const matches = found.filter((f) => numbersEqual(f.value, claim.numeric_value));
87
+ if (matches.length > 0) {
88
+ // Canonical value found; report any conflicting numbers as drift too.
89
+ const conflicts = dedupeRaw(found.filter((f) => !numbersEqual(f.value, claim.numeric_value)));
90
+ if (conflicts.length > 0) {
91
+ return {
92
+ claim_id: claim.id,
93
+ deliverable: deliverable.name,
94
+ status: "drift",
95
+ conflicting_values: conflicts,
96
+ note: `Canonical value present but conflicting number(s) also appear near the keyword: ${conflicts.join(", ")} (canonical: ${claim.value_display ?? claim.numeric_value}).`,
97
+ };
98
+ }
99
+ return {
100
+ claim_id: claim.id,
101
+ deliverable: deliverable.name,
102
+ status: "consistent",
103
+ conflicting_values: [],
104
+ note: `Canonical value present (${claim.value_display ?? claim.numeric_value}).`,
105
+ };
106
+ }
107
+ // Keyword present, numbers present, but none match canonical → drift.
108
+ const conflicts = dedupeRaw(found);
109
+ return {
110
+ claim_id: claim.id,
111
+ deliverable: deliverable.name,
112
+ status: "drift",
113
+ conflicting_values: conflicts,
114
+ note: `Canonical value (${claim.value_display ?? claim.numeric_value}) NOT found; conflicting number(s) near keyword: ${conflicts.join(", ")}.`,
115
+ };
116
+ }
117
+ function dedupeRaw(items) {
118
+ const seen = new Set();
119
+ const out = [];
120
+ for (const i of items) {
121
+ if (!seen.has(i.value)) {
122
+ seen.add(i.value);
123
+ out.push(i.raw);
124
+ }
125
+ }
126
+ return out;
127
+ }
128
+ export function checkConsistency(claims, deliverables) {
129
+ const findings = [];
130
+ for (const claim of claims) {
131
+ for (const d of deliverables) {
132
+ findings.push(checkClaimInDeliverable(claim, d));
133
+ }
134
+ }
135
+ const drift = findings.filter((f) => f.status === "drift");
136
+ const absent = findings.filter((f) => f.status === "absent");
137
+ const drifting_claims = [...new Set(drift.map((f) => f.claim_id))];
138
+ const warnings = [];
139
+ if (drift.length > 0) {
140
+ warnings.push(`${drift.length} drift finding(s) across ${drifting_claims.length} claim(s) — a different value sits next to the claim keyword in at least one deliverable. Reconcile to the canonical source before release.`);
141
+ }
142
+ if (claims.length === 0) {
143
+ warnings.push("No claims supplied — nothing to check.");
144
+ }
145
+ if (deliverables.length === 0) {
146
+ warnings.push("No deliverables supplied — nothing to check.");
147
+ }
148
+ warnings.push("Detection is keyword-anchored and numeric — it flags drifting numbers near claim keywords, not paraphrased or unanchored claims. A 'consistent' result is necessary but not sufficient; human review remains required.");
149
+ return {
150
+ claims_checked: claims.length,
151
+ deliverables_checked: deliverables.length,
152
+ findings,
153
+ drift_count: drift.length,
154
+ absent_count: absent.length,
155
+ drifting_claims,
156
+ warnings,
157
+ };
158
+ }
159
+ //# sourceMappingURL=consistency.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consistency.js","sourceRoot":"","sources":["../../src/claims/consistency.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Pure claim extractors: map a tool's structured result onto candidate
3
+ * claims for the registry, so the "single source of truth" self-populates
4
+ * instead of manual upserts. No I/O.
5
+ *
6
+ * Recognises the result shapes of models.cost_effectiveness and
7
+ * models.budget_impact. Unknown sources return [] (the caller warns).
8
+ * Defensive: navigates optional fields and skips anything missing or
9
+ * non-finite — never throws on a partial/odd result.
10
+ */
11
+ export interface ExtractedClaim {
12
+ id: string;
13
+ statement: string;
14
+ numeric_value?: number;
15
+ value_display?: string;
16
+ unit?: string;
17
+ keywords: string[];
18
+ }
19
+ export declare const SUPPORTED_IMPORT_SOURCES: string[];
20
+ export declare function extractClaims(sourceTool: string, result: unknown): ExtractedClaim[];
21
+ //# sourceMappingURL=extract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract.d.ts","sourceRoot":"","sources":["../../src/claims/extract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAmGD,eAAO,MAAM,wBAAwB,UAA0B,CAAC;AAEhE,wBAAgB,aAAa,CAC3B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,OAAO,GACd,cAAc,EAAE,CAGlB"}