riksdagsmonitor 0.8.12 → 0.8.15

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 (779) hide show
  1. package/dist/lib/cia/dashboard-init.d.ts +26 -0
  2. package/dist/lib/cia/dashboard-init.d.ts.map +1 -0
  3. package/dist/lib/cia/dashboard-init.js +108 -0
  4. package/dist/lib/cia/dashboard-init.js.map +1 -0
  5. package/dist/lib/cia/data-loader.d.ts +408 -0
  6. package/dist/lib/cia/data-loader.d.ts.map +1 -0
  7. package/dist/lib/cia/data-loader.js +867 -0
  8. package/dist/lib/cia/data-loader.js.map +1 -0
  9. package/dist/lib/cia/election-predictions.d.ts +78 -0
  10. package/dist/lib/cia/election-predictions.d.ts.map +1 -0
  11. package/dist/lib/cia/election-predictions.js +259 -0
  12. package/dist/lib/cia/election-predictions.js.map +1 -0
  13. package/dist/lib/cia/i18n-translations.d.ts +111 -0
  14. package/dist/lib/cia/i18n-translations.d.ts.map +1 -0
  15. package/dist/lib/cia/i18n-translations.js +619 -0
  16. package/dist/lib/cia/i18n-translations.js.map +1 -0
  17. package/dist/lib/cia/visualizations.d.ts +64 -0
  18. package/dist/lib/cia/visualizations.d.ts.map +1 -0
  19. package/dist/lib/cia/visualizations.js +662 -0
  20. package/dist/lib/cia/visualizations.js.map +1 -0
  21. package/dist/lib/dashboards/anomaly-detection.d.ts +44 -0
  22. package/dist/lib/dashboards/anomaly-detection.d.ts.map +1 -0
  23. package/dist/lib/dashboards/anomaly-detection.js +1017 -0
  24. package/dist/lib/dashboards/anomaly-detection.js.map +1 -0
  25. package/dist/lib/dashboards/coalition-dashboard.d.ts +36 -0
  26. package/dist/lib/dashboards/coalition-dashboard.d.ts.map +1 -0
  27. package/dist/lib/dashboards/coalition-dashboard.js +629 -0
  28. package/dist/lib/dashboards/coalition-dashboard.js.map +1 -0
  29. package/dist/lib/dashboards/coalition-loader.d.ts +43 -0
  30. package/dist/lib/dashboards/coalition-loader.d.ts.map +1 -0
  31. package/dist/lib/dashboards/coalition-loader.js +665 -0
  32. package/dist/lib/dashboards/coalition-loader.js.map +1 -0
  33. package/dist/lib/dashboards/committees-dashboard.d.ts +23 -0
  34. package/dist/lib/dashboards/committees-dashboard.d.ts.map +1 -0
  35. package/dist/lib/dashboards/committees-dashboard.js +886 -0
  36. package/dist/lib/dashboards/committees-dashboard.js.map +1 -0
  37. package/dist/lib/dashboards/election-cycle.d.ts +62 -0
  38. package/dist/lib/dashboards/election-cycle.d.ts.map +1 -0
  39. package/dist/lib/dashboards/election-cycle.js +484 -0
  40. package/dist/lib/dashboards/election-cycle.js.map +1 -0
  41. package/dist/lib/dashboards/ministry-dashboard.d.ts +46 -0
  42. package/dist/lib/dashboards/ministry-dashboard.d.ts.map +1 -0
  43. package/dist/lib/dashboards/ministry-dashboard.js +1114 -0
  44. package/dist/lib/dashboards/ministry-dashboard.js.map +1 -0
  45. package/dist/lib/dashboards/party-dashboard.d.ts +56 -0
  46. package/dist/lib/dashboards/party-dashboard.d.ts.map +1 -0
  47. package/dist/lib/dashboards/party-dashboard.js +981 -0
  48. package/dist/lib/dashboards/party-dashboard.js.map +1 -0
  49. package/dist/lib/dashboards/politician-dashboard.d.ts +41 -0
  50. package/dist/lib/dashboards/politician-dashboard.d.ts.map +1 -0
  51. package/dist/lib/dashboards/politician-dashboard.js +611 -0
  52. package/dist/lib/dashboards/politician-dashboard.js.map +1 -0
  53. package/dist/lib/dashboards/pre-election.d.ts +64 -0
  54. package/dist/lib/dashboards/pre-election.d.ts.map +1 -0
  55. package/dist/lib/dashboards/pre-election.js +604 -0
  56. package/dist/lib/dashboards/pre-election.js.map +1 -0
  57. package/dist/lib/dashboards/risk-dashboard.d.ts +37 -0
  58. package/dist/lib/dashboards/risk-dashboard.d.ts.map +1 -0
  59. package/dist/lib/dashboards/risk-dashboard.js +863 -0
  60. package/dist/lib/dashboards/risk-dashboard.js.map +1 -0
  61. package/dist/lib/dashboards/seasonal-patterns.d.ts +24 -0
  62. package/dist/lib/dashboards/seasonal-patterns.d.ts.map +1 -0
  63. package/dist/lib/dashboards/seasonal-patterns.js +535 -0
  64. package/dist/lib/dashboards/seasonal-patterns.js.map +1 -0
  65. package/dist/lib/dashboards/stats-loader.d.ts +35 -0
  66. package/dist/lib/dashboards/stats-loader.d.ts.map +1 -0
  67. package/dist/lib/dashboards/stats-loader.js +145 -0
  68. package/dist/lib/dashboards/stats-loader.js.map +1 -0
  69. package/dist/lib/shared/chart-factory.d.ts.map +1 -0
  70. package/dist/lib/shared/chart-factory.js.map +1 -0
  71. package/dist/lib/shared/data-loader.d.ts.map +1 -0
  72. package/dist/lib/shared/data-loader.js.map +1 -0
  73. package/dist/lib/shared/dom-utils.d.ts.map +1 -0
  74. package/dist/lib/shared/dom-utils.js.map +1 -0
  75. package/dist/lib/shared/error-boundary.d.ts.map +1 -0
  76. package/dist/lib/shared/error-boundary.js.map +1 -0
  77. package/dist/lib/shared/fallback-ui.d.ts.map +1 -0
  78. package/dist/lib/shared/fallback-ui.js.map +1 -0
  79. package/dist/lib/shared/index.d.ts.map +1 -0
  80. package/dist/lib/shared/index.js.map +1 -0
  81. package/dist/lib/shared/logger.d.ts.map +1 -0
  82. package/dist/lib/shared/logger.js.map +1 -0
  83. package/dist/lib/shared/register-globals.d.ts +14 -0
  84. package/dist/lib/shared/register-globals.d.ts.map +1 -0
  85. package/dist/lib/shared/register-globals.js +21 -0
  86. package/dist/lib/shared/register-globals.js.map +1 -0
  87. package/dist/lib/shared/theme.d.ts.map +1 -0
  88. package/dist/lib/shared/theme.js.map +1 -0
  89. package/dist/lib/shared/types.d.ts.map +1 -0
  90. package/dist/lib/shared/types.js.map +1 -0
  91. package/dist/lib/ui/back-to-top.d.ts +13 -0
  92. package/dist/lib/ui/back-to-top.d.ts.map +1 -0
  93. package/dist/lib/ui/back-to-top.js +48 -0
  94. package/dist/lib/ui/back-to-top.js.map +1 -0
  95. package/dist/scripts/ai-analysis/coalition-detector.d.ts +28 -0
  96. package/dist/scripts/ai-analysis/coalition-detector.d.ts.map +1 -0
  97. package/dist/scripts/ai-analysis/coalition-detector.js +242 -0
  98. package/dist/scripts/ai-analysis/coalition-detector.js.map +1 -0
  99. package/dist/scripts/ai-analysis/dashboard-analyzer.d.ts +73 -0
  100. package/dist/scripts/ai-analysis/dashboard-analyzer.d.ts.map +1 -0
  101. package/dist/scripts/ai-analysis/dashboard-analyzer.js +511 -0
  102. package/dist/scripts/ai-analysis/dashboard-analyzer.js.map +1 -0
  103. package/dist/scripts/ai-analysis/document-analyzer.d.ts +196 -0
  104. package/dist/scripts/ai-analysis/document-analyzer.d.ts.map +1 -0
  105. package/dist/scripts/ai-analysis/document-analyzer.js +1001 -0
  106. package/dist/scripts/ai-analysis/document-analyzer.js.map +1 -0
  107. package/dist/scripts/ai-analysis/domains/index.d.ts +15 -0
  108. package/dist/scripts/ai-analysis/domains/index.d.ts.map +1 -0
  109. package/dist/scripts/ai-analysis/domains/index.js +494 -0
  110. package/dist/scripts/ai-analysis/domains/index.js.map +1 -0
  111. package/dist/scripts/ai-analysis/helpers.d.ts +43 -0
  112. package/dist/scripts/ai-analysis/helpers.d.ts.map +1 -0
  113. package/dist/scripts/ai-analysis/helpers.js +79 -0
  114. package/dist/scripts/ai-analysis/helpers.js.map +1 -0
  115. package/dist/scripts/ai-analysis/index.d.ts +15 -0
  116. package/dist/scripts/ai-analysis/index.d.ts.map +1 -0
  117. package/dist/scripts/ai-analysis/index.js +14 -0
  118. package/dist/scripts/ai-analysis/index.js.map +1 -0
  119. package/dist/scripts/ai-analysis/pipeline.d.ts +41 -0
  120. package/dist/scripts/ai-analysis/pipeline.d.ts.map +1 -0
  121. package/dist/scripts/ai-analysis/pipeline.js +208 -0
  122. package/dist/scripts/ai-analysis/pipeline.js.map +1 -0
  123. package/dist/scripts/ai-analysis/political-significance.d.ts +63 -0
  124. package/dist/scripts/ai-analysis/political-significance.d.ts.map +1 -0
  125. package/dist/scripts/ai-analysis/political-significance.js +227 -0
  126. package/dist/scripts/ai-analysis/political-significance.js.map +1 -0
  127. package/dist/scripts/ai-analysis/quality-assessor.d.ts +104 -0
  128. package/dist/scripts/ai-analysis/quality-assessor.d.ts.map +1 -0
  129. package/dist/scripts/ai-analysis/quality-assessor.js +554 -0
  130. package/dist/scripts/ai-analysis/quality-assessor.js.map +1 -0
  131. package/dist/scripts/ai-analysis/swot/index.d.ts +56 -0
  132. package/dist/scripts/ai-analysis/swot/index.d.ts.map +1 -0
  133. package/dist/scripts/ai-analysis/swot/index.js +360 -0
  134. package/dist/scripts/ai-analysis/swot/index.js.map +1 -0
  135. package/dist/scripts/ai-analysis/swot/placeholders.d.ts +30 -0
  136. package/dist/scripts/ai-analysis/swot/placeholders.d.ts.map +1 -0
  137. package/dist/scripts/ai-analysis/swot/placeholders.js +381 -0
  138. package/dist/scripts/ai-analysis/swot/placeholders.js.map +1 -0
  139. package/dist/scripts/ai-analysis/types.d.ts +333 -0
  140. package/dist/scripts/ai-analysis/types.d.ts.map +1 -0
  141. package/dist/scripts/ai-analysis/types.js +19 -0
  142. package/dist/scripts/ai-analysis/types.js.map +1 -0
  143. package/dist/scripts/ai-analysis/visualisation/index.d.ts +15 -0
  144. package/dist/scripts/ai-analysis/visualisation/index.d.ts.map +1 -0
  145. package/dist/scripts/ai-analysis/visualisation/index.js +179 -0
  146. package/dist/scripts/ai-analysis/visualisation/index.js.map +1 -0
  147. package/dist/scripts/analysis-framework/cross-reference.d.ts +35 -0
  148. package/dist/scripts/analysis-framework/cross-reference.d.ts.map +1 -0
  149. package/dist/scripts/analysis-framework/cross-reference.js +290 -0
  150. package/dist/scripts/analysis-framework/cross-reference.js.map +1 -0
  151. package/dist/scripts/analysis-framework/index.d.ts +79 -0
  152. package/dist/scripts/analysis-framework/index.d.ts.map +1 -0
  153. package/dist/scripts/analysis-framework/index.js +133 -0
  154. package/dist/scripts/analysis-framework/index.js.map +1 -0
  155. package/dist/scripts/analysis-framework/lenses/citizen.d.ts +29 -0
  156. package/dist/scripts/analysis-framework/lenses/citizen.d.ts.map +1 -0
  157. package/dist/scripts/analysis-framework/lenses/citizen.js +220 -0
  158. package/dist/scripts/analysis-framework/lenses/citizen.js.map +1 -0
  159. package/dist/scripts/analysis-framework/lenses/economic.d.ts +29 -0
  160. package/dist/scripts/analysis-framework/lenses/economic.d.ts.map +1 -0
  161. package/dist/scripts/analysis-framework/lenses/economic.js +227 -0
  162. package/dist/scripts/analysis-framework/lenses/economic.js.map +1 -0
  163. package/dist/scripts/analysis-framework/lenses/government.d.ts +32 -0
  164. package/dist/scripts/analysis-framework/lenses/government.d.ts.map +1 -0
  165. package/dist/scripts/analysis-framework/lenses/government.js +265 -0
  166. package/dist/scripts/analysis-framework/lenses/government.js.map +1 -0
  167. package/dist/scripts/analysis-framework/lenses/international.d.ts +29 -0
  168. package/dist/scripts/analysis-framework/lenses/international.d.ts.map +1 -0
  169. package/dist/scripts/analysis-framework/lenses/international.js +248 -0
  170. package/dist/scripts/analysis-framework/lenses/international.js.map +1 -0
  171. package/dist/scripts/analysis-framework/lenses/media.d.ts +29 -0
  172. package/dist/scripts/analysis-framework/lenses/media.d.ts.map +1 -0
  173. package/dist/scripts/analysis-framework/lenses/media.js +211 -0
  174. package/dist/scripts/analysis-framework/lenses/media.js.map +1 -0
  175. package/dist/scripts/analysis-framework/lenses/opposition.d.ts +29 -0
  176. package/dist/scripts/analysis-framework/lenses/opposition.d.ts.map +1 -0
  177. package/dist/scripts/analysis-framework/lenses/opposition.js +234 -0
  178. package/dist/scripts/analysis-framework/lenses/opposition.js.map +1 -0
  179. package/dist/scripts/analysis-framework/methodology-types.d.ts +309 -0
  180. package/dist/scripts/analysis-framework/methodology-types.d.ts.map +1 -0
  181. package/dist/scripts/analysis-framework/methodology-types.js +38 -0
  182. package/dist/scripts/analysis-framework/methodology-types.js.map +1 -0
  183. package/dist/scripts/analysis-framework/political-classification.d.ts +58 -0
  184. package/dist/scripts/analysis-framework/political-classification.d.ts.map +1 -0
  185. package/dist/scripts/analysis-framework/political-classification.js +414 -0
  186. package/dist/scripts/analysis-framework/political-classification.js.map +1 -0
  187. package/dist/scripts/analysis-framework/political-risk-assessment.d.ts +74 -0
  188. package/dist/scripts/analysis-framework/political-risk-assessment.d.ts.map +1 -0
  189. package/dist/scripts/analysis-framework/political-risk-assessment.js +656 -0
  190. package/dist/scripts/analysis-framework/political-risk-assessment.js.map +1 -0
  191. package/dist/scripts/analysis-framework/political-threat-analysis.d.ts +65 -0
  192. package/dist/scripts/analysis-framework/political-threat-analysis.d.ts.map +1 -0
  193. package/dist/scripts/analysis-framework/political-threat-analysis.js +553 -0
  194. package/dist/scripts/analysis-framework/political-threat-analysis.js.map +1 -0
  195. package/dist/scripts/analysis-framework/significance-scorer.d.ts +62 -0
  196. package/dist/scripts/analysis-framework/significance-scorer.d.ts.map +1 -0
  197. package/dist/scripts/analysis-framework/significance-scorer.js +196 -0
  198. package/dist/scripts/analysis-framework/significance-scorer.js.map +1 -0
  199. package/dist/scripts/analysis-framework/types.d.ts +138 -0
  200. package/dist/scripts/analysis-framework/types.d.ts.map +1 -0
  201. package/dist/scripts/analysis-framework/types.js +12 -0
  202. package/dist/scripts/analysis-framework/types.js.map +1 -0
  203. package/dist/scripts/analysis-reader.d.ts +240 -0
  204. package/dist/scripts/analysis-reader.d.ts.map +1 -0
  205. package/dist/scripts/analysis-reader.js +495 -0
  206. package/dist/scripts/analysis-reader.js.map +1 -0
  207. package/dist/scripts/article-quality-enhancer.d.ts +148 -0
  208. package/dist/scripts/article-quality-enhancer.d.ts.map +1 -0
  209. package/dist/scripts/article-quality-enhancer.js +430 -0
  210. package/dist/scripts/article-quality-enhancer.js.map +1 -0
  211. package/dist/scripts/article-template/constants.d.ts +104 -0
  212. package/dist/scripts/article-template/constants.d.ts.map +1 -0
  213. package/dist/scripts/article-template/constants.js +225 -0
  214. package/dist/scripts/article-template/constants.js.map +1 -0
  215. package/dist/scripts/article-template/helpers.d.ts +83 -0
  216. package/dist/scripts/article-template/helpers.d.ts.map +1 -0
  217. package/dist/scripts/article-template/helpers.js +236 -0
  218. package/dist/scripts/article-template/helpers.js.map +1 -0
  219. package/dist/scripts/article-template/index.d.ts +39 -0
  220. package/dist/scripts/article-template/index.d.ts.map +1 -0
  221. package/dist/scripts/article-template/index.js +37 -0
  222. package/dist/scripts/article-template/index.js.map +1 -0
  223. package/dist/scripts/article-template/registry.d.ts +64 -0
  224. package/dist/scripts/article-template/registry.d.ts.map +1 -0
  225. package/dist/scripts/article-template/registry.js +405 -0
  226. package/dist/scripts/article-template/registry.js.map +1 -0
  227. package/dist/scripts/article-template/template.d.ts +18 -0
  228. package/dist/scripts/article-template/template.d.ts.map +1 -0
  229. package/dist/scripts/article-template/template.js +359 -0
  230. package/dist/scripts/article-template/template.js.map +1 -0
  231. package/dist/scripts/article-template/types.d.ts +90 -0
  232. package/dist/scripts/article-template/types.d.ts.map +1 -0
  233. package/dist/scripts/article-template/types.js +96 -0
  234. package/dist/scripts/article-template/types.js.map +1 -0
  235. package/dist/scripts/article-template.d.ts +18 -0
  236. package/dist/scripts/article-template.d.ts.map +1 -0
  237. package/dist/scripts/article-template.js +18 -0
  238. package/dist/scripts/article-template.js.map +1 -0
  239. package/dist/scripts/catalog-downloaded-data.d.ts +66 -0
  240. package/dist/scripts/catalog-downloaded-data.d.ts.map +1 -0
  241. package/dist/scripts/catalog-downloaded-data.js +239 -0
  242. package/dist/scripts/catalog-downloaded-data.js.map +1 -0
  243. package/dist/scripts/check-cia-schema-updates.d.ts +186 -0
  244. package/dist/scripts/check-cia-schema-updates.d.ts.map +1 -0
  245. package/dist/scripts/check-cia-schema-updates.js +363 -0
  246. package/dist/scripts/check-cia-schema-updates.js.map +1 -0
  247. package/dist/scripts/data-transformers/calendar.d.ts +16 -0
  248. package/dist/scripts/data-transformers/calendar.d.ts.map +1 -0
  249. package/dist/scripts/data-transformers/calendar.js +137 -0
  250. package/dist/scripts/data-transformers/calendar.js.map +1 -0
  251. package/dist/scripts/data-transformers/constants/committee-names.d.ts +15 -0
  252. package/dist/scripts/data-transformers/constants/committee-names.d.ts.map +1 -0
  253. package/dist/scripts/data-transformers/constants/committee-names.js +30 -0
  254. package/dist/scripts/data-transformers/constants/committee-names.js.map +1 -0
  255. package/dist/scripts/data-transformers/constants/content-labels-part1.d.ts +11 -0
  256. package/dist/scripts/data-transformers/constants/content-labels-part1.d.ts.map +1 -0
  257. package/dist/scripts/data-transformers/constants/content-labels-part1.js +900 -0
  258. package/dist/scripts/data-transformers/constants/content-labels-part1.js.map +1 -0
  259. package/dist/scripts/data-transformers/constants/content-labels-part2.d.ts +11 -0
  260. package/dist/scripts/data-transformers/constants/content-labels-part2.d.ts.map +1 -0
  261. package/dist/scripts/data-transformers/constants/content-labels-part2.js +900 -0
  262. package/dist/scripts/data-transformers/constants/content-labels-part2.js.map +1 -0
  263. package/dist/scripts/data-transformers/constants/content-labels.d.ts +13 -0
  264. package/dist/scripts/data-transformers/constants/content-labels.d.ts.map +1 -0
  265. package/dist/scripts/data-transformers/constants/content-labels.js +18 -0
  266. package/dist/scripts/data-transformers/constants/content-labels.js.map +1 -0
  267. package/dist/scripts/data-transformers/constants/index.d.ts +15 -0
  268. package/dist/scripts/data-transformers/constants/index.d.ts.map +1 -0
  269. package/dist/scripts/data-transformers/constants/index.js +15 -0
  270. package/dist/scripts/data-transformers/constants/index.js.map +1 -0
  271. package/dist/scripts/data-transformers/constants/locale-map.d.ts +13 -0
  272. package/dist/scripts/data-transformers/constants/locale-map.d.ts.map +1 -0
  273. package/dist/scripts/data-transformers/constants/locale-map.js +17 -0
  274. package/dist/scripts/data-transformers/constants/locale-map.js.map +1 -0
  275. package/dist/scripts/data-transformers/constants.d.ts +14 -0
  276. package/dist/scripts/data-transformers/constants.d.ts.map +1 -0
  277. package/dist/scripts/data-transformers/constants.js +14 -0
  278. package/dist/scripts/data-transformers/constants.js.map +1 -0
  279. package/dist/scripts/data-transformers/content-generators/ai-mindmap-analyzer.d.ts +64 -0
  280. package/dist/scripts/data-transformers/content-generators/ai-mindmap-analyzer.d.ts.map +1 -0
  281. package/dist/scripts/data-transformers/content-generators/ai-mindmap-analyzer.js +805 -0
  282. package/dist/scripts/data-transformers/content-generators/ai-mindmap-analyzer.js.map +1 -0
  283. package/dist/scripts/data-transformers/content-generators/ai-swot-analyzer.d.ts +89 -0
  284. package/dist/scripts/data-transformers/content-generators/ai-swot-analyzer.d.ts.map +1 -0
  285. package/dist/scripts/data-transformers/content-generators/ai-swot-analyzer.js +667 -0
  286. package/dist/scripts/data-transformers/content-generators/ai-swot-analyzer.js.map +1 -0
  287. package/dist/scripts/data-transformers/content-generators/cia-overview-section.d.ts +50 -0
  288. package/dist/scripts/data-transformers/content-generators/cia-overview-section.d.ts.map +1 -0
  289. package/dist/scripts/data-transformers/content-generators/cia-overview-section.js +310 -0
  290. package/dist/scripts/data-transformers/content-generators/cia-overview-section.js.map +1 -0
  291. package/dist/scripts/data-transformers/content-generators/committee.d.ts +12 -0
  292. package/dist/scripts/data-transformers/content-generators/committee.d.ts.map +1 -0
  293. package/dist/scripts/data-transformers/content-generators/committee.js +247 -0
  294. package/dist/scripts/data-transformers/content-generators/committee.js.map +1 -0
  295. package/dist/scripts/data-transformers/content-generators/dashboard-section.d.ts +124 -0
  296. package/dist/scripts/data-transformers/content-generators/dashboard-section.d.ts.map +1 -0
  297. package/dist/scripts/data-transformers/content-generators/dashboard-section.js +564 -0
  298. package/dist/scripts/data-transformers/content-generators/dashboard-section.js.map +1 -0
  299. package/dist/scripts/data-transformers/content-generators/economic-dashboard-section.d.ts +82 -0
  300. package/dist/scripts/data-transformers/content-generators/economic-dashboard-section.d.ts.map +1 -0
  301. package/dist/scripts/data-transformers/content-generators/economic-dashboard-section.js +321 -0
  302. package/dist/scripts/data-transformers/content-generators/economic-dashboard-section.js.map +1 -0
  303. package/dist/scripts/data-transformers/content-generators/generic.d.ts +12 -0
  304. package/dist/scripts/data-transformers/content-generators/generic.d.ts.map +1 -0
  305. package/dist/scripts/data-transformers/content-generators/generic.js +295 -0
  306. package/dist/scripts/data-transformers/content-generators/generic.js.map +1 -0
  307. package/dist/scripts/data-transformers/content-generators/index.d.ts +56 -0
  308. package/dist/scripts/data-transformers/content-generators/index.d.ts.map +1 -0
  309. package/dist/scripts/data-transformers/content-generators/index.js +45 -0
  310. package/dist/scripts/data-transformers/content-generators/index.js.map +1 -0
  311. package/dist/scripts/data-transformers/content-generators/interpellations.d.ts +12 -0
  312. package/dist/scripts/data-transformers/content-generators/interpellations.d.ts.map +1 -0
  313. package/dist/scripts/data-transformers/content-generators/interpellations.js +124 -0
  314. package/dist/scripts/data-transformers/content-generators/interpellations.js.map +1 -0
  315. package/dist/scripts/data-transformers/content-generators/mindmap-section.d.ts +137 -0
  316. package/dist/scripts/data-transformers/content-generators/mindmap-section.d.ts.map +1 -0
  317. package/dist/scripts/data-transformers/content-generators/mindmap-section.js +286 -0
  318. package/dist/scripts/data-transformers/content-generators/mindmap-section.js.map +1 -0
  319. package/dist/scripts/data-transformers/content-generators/month-ahead.d.ts +17 -0
  320. package/dist/scripts/data-transformers/content-generators/month-ahead.d.ts.map +1 -0
  321. package/dist/scripts/data-transformers/content-generators/month-ahead.js +212 -0
  322. package/dist/scripts/data-transformers/content-generators/month-ahead.js.map +1 -0
  323. package/dist/scripts/data-transformers/content-generators/monthly-review.d.ts +17 -0
  324. package/dist/scripts/data-transformers/content-generators/monthly-review.d.ts.map +1 -0
  325. package/dist/scripts/data-transformers/content-generators/monthly-review.js +173 -0
  326. package/dist/scripts/data-transformers/content-generators/monthly-review.js.map +1 -0
  327. package/dist/scripts/data-transformers/content-generators/motions.d.ts +12 -0
  328. package/dist/scripts/data-transformers/content-generators/motions.d.ts.map +1 -0
  329. package/dist/scripts/data-transformers/content-generators/motions.js +158 -0
  330. package/dist/scripts/data-transformers/content-generators/motions.js.map +1 -0
  331. package/dist/scripts/data-transformers/content-generators/newsworthiness.d.ts +52 -0
  332. package/dist/scripts/data-transformers/content-generators/newsworthiness.d.ts.map +1 -0
  333. package/dist/scripts/data-transformers/content-generators/newsworthiness.js +244 -0
  334. package/dist/scripts/data-transformers/content-generators/newsworthiness.js.map +1 -0
  335. package/dist/scripts/data-transformers/content-generators/propositions.d.ts +12 -0
  336. package/dist/scripts/data-transformers/content-generators/propositions.d.ts.map +1 -0
  337. package/dist/scripts/data-transformers/content-generators/propositions.js +263 -0
  338. package/dist/scripts/data-transformers/content-generators/propositions.js.map +1 -0
  339. package/dist/scripts/data-transformers/content-generators/sankey-section.d.ts +92 -0
  340. package/dist/scripts/data-transformers/content-generators/sankey-section.d.ts.map +1 -0
  341. package/dist/scripts/data-transformers/content-generators/sankey-section.js +257 -0
  342. package/dist/scripts/data-transformers/content-generators/sankey-section.js.map +1 -0
  343. package/dist/scripts/data-transformers/content-generators/shared.d.ts +81 -0
  344. package/dist/scripts/data-transformers/content-generators/shared.d.ts.map +1 -0
  345. package/dist/scripts/data-transformers/content-generators/shared.js +913 -0
  346. package/dist/scripts/data-transformers/content-generators/shared.js.map +1 -0
  347. package/dist/scripts/data-transformers/content-generators/stakeholder-swot-section.d.ts +83 -0
  348. package/dist/scripts/data-transformers/content-generators/stakeholder-swot-section.d.ts.map +1 -0
  349. package/dist/scripts/data-transformers/content-generators/stakeholder-swot-section.js +219 -0
  350. package/dist/scripts/data-transformers/content-generators/stakeholder-swot-section.js.map +1 -0
  351. package/dist/scripts/data-transformers/content-generators/swot-section.d.ts +50 -0
  352. package/dist/scripts/data-transformers/content-generators/swot-section.d.ts.map +1 -0
  353. package/dist/scripts/data-transformers/content-generators/swot-section.js +177 -0
  354. package/dist/scripts/data-transformers/content-generators/swot-section.js.map +1 -0
  355. package/dist/scripts/data-transformers/content-generators/week-ahead.d.ts +12 -0
  356. package/dist/scripts/data-transformers/content-generators/week-ahead.d.ts.map +1 -0
  357. package/dist/scripts/data-transformers/content-generators/week-ahead.js +332 -0
  358. package/dist/scripts/data-transformers/content-generators/week-ahead.js.map +1 -0
  359. package/dist/scripts/data-transformers/content-generators.d.ts +15 -0
  360. package/dist/scripts/data-transformers/content-generators.d.ts.map +1 -0
  361. package/dist/scripts/data-transformers/content-generators.js +14 -0
  362. package/dist/scripts/data-transformers/content-generators.js.map +1 -0
  363. package/dist/scripts/data-transformers/document-analysis.d.ts +58 -0
  364. package/dist/scripts/data-transformers/document-analysis.d.ts.map +1 -0
  365. package/dist/scripts/data-transformers/document-analysis.js +396 -0
  366. package/dist/scripts/data-transformers/document-analysis.js.map +1 -0
  367. package/dist/scripts/data-transformers/helpers.d.ts +144 -0
  368. package/dist/scripts/data-transformers/helpers.d.ts.map +1 -0
  369. package/dist/scripts/data-transformers/helpers.js +408 -0
  370. package/dist/scripts/data-transformers/helpers.js.map +1 -0
  371. package/dist/scripts/data-transformers/index.d.ts +45 -0
  372. package/dist/scripts/data-transformers/index.d.ts.map +1 -0
  373. package/dist/scripts/data-transformers/index.js +66 -0
  374. package/dist/scripts/data-transformers/index.js.map +1 -0
  375. package/dist/scripts/data-transformers/metadata.d.ts +42 -0
  376. package/dist/scripts/data-transformers/metadata.d.ts.map +1 -0
  377. package/dist/scripts/data-transformers/metadata.js +385 -0
  378. package/dist/scripts/data-transformers/metadata.js.map +1 -0
  379. package/dist/scripts/data-transformers/policy-analysis.d.ts +105 -0
  380. package/dist/scripts/data-transformers/policy-analysis.d.ts.map +1 -0
  381. package/dist/scripts/data-transformers/policy-analysis.js +686 -0
  382. package/dist/scripts/data-transformers/policy-analysis.js.map +1 -0
  383. package/dist/scripts/data-transformers/risk-analysis.d.ts +104 -0
  384. package/dist/scripts/data-transformers/risk-analysis.d.ts.map +1 -0
  385. package/dist/scripts/data-transformers/risk-analysis.js +279 -0
  386. package/dist/scripts/data-transformers/risk-analysis.js.map +1 -0
  387. package/dist/scripts/data-transformers/types.d.ts +260 -0
  388. package/dist/scripts/data-transformers/types.d.ts.map +1 -0
  389. package/dist/scripts/data-transformers/types.js +11 -0
  390. package/dist/scripts/data-transformers/types.js.map +1 -0
  391. package/dist/scripts/data-transformers.d.ts +23 -0
  392. package/dist/scripts/data-transformers.d.ts.map +1 -0
  393. package/dist/scripts/data-transformers.js +35 -0
  394. package/dist/scripts/data-transformers.js.map +1 -0
  395. package/dist/scripts/deep-inspection/index.d.ts +55 -0
  396. package/dist/scripts/deep-inspection/index.d.ts.map +1 -0
  397. package/dist/scripts/deep-inspection/index.js +66 -0
  398. package/dist/scripts/deep-inspection/index.js.map +1 -0
  399. package/dist/scripts/detect-swedish-leakage.d.ts +69 -0
  400. package/dist/scripts/detect-swedish-leakage.d.ts.map +1 -0
  401. package/dist/scripts/detect-swedish-leakage.js +417 -0
  402. package/dist/scripts/detect-swedish-leakage.js.map +1 -0
  403. package/dist/scripts/editorial-framework.d.ts +121 -0
  404. package/dist/scripts/editorial-framework.d.ts.map +1 -0
  405. package/dist/scripts/editorial-framework.js +364 -0
  406. package/dist/scripts/editorial-framework.js.map +1 -0
  407. package/dist/scripts/editorial-pillars.d.ts +43 -0
  408. package/dist/scripts/editorial-pillars.d.ts.map +1 -0
  409. package/dist/scripts/editorial-pillars.js +215 -0
  410. package/dist/scripts/editorial-pillars.js.map +1 -0
  411. package/dist/scripts/extract-news-metadata.d.ts +12 -0
  412. package/dist/scripts/extract-news-metadata.d.ts.map +1 -0
  413. package/dist/scripts/extract-news-metadata.js +107 -0
  414. package/dist/scripts/extract-news-metadata.js.map +1 -0
  415. package/dist/scripts/extract-vocabulary.d.ts +15 -0
  416. package/dist/scripts/extract-vocabulary.d.ts.map +1 -0
  417. package/dist/scripts/extract-vocabulary.js +255 -0
  418. package/dist/scripts/extract-vocabulary.js.map +1 -0
  419. package/dist/scripts/fix-article-navigation.d.ts +37 -0
  420. package/dist/scripts/fix-article-navigation.d.ts.map +1 -0
  421. package/dist/scripts/fix-article-navigation.js +198 -0
  422. package/dist/scripts/fix-article-navigation.js.map +1 -0
  423. package/dist/scripts/fix-keywords-localization.d.ts +18 -0
  424. package/dist/scripts/fix-keywords-localization.d.ts.map +1 -0
  425. package/dist/scripts/fix-keywords-localization.js +270 -0
  426. package/dist/scripts/fix-keywords-localization.js.map +1 -0
  427. package/dist/scripts/fix-old-articles-branding.d.ts +17 -0
  428. package/dist/scripts/fix-old-articles-branding.d.ts.map +1 -0
  429. package/dist/scripts/fix-old-articles-branding.js +229 -0
  430. package/dist/scripts/fix-old-articles-branding.js.map +1 -0
  431. package/dist/scripts/generate-news-backport.d.ts +16 -0
  432. package/dist/scripts/generate-news-backport.d.ts.map +1 -0
  433. package/dist/scripts/generate-news-backport.js +379 -0
  434. package/dist/scripts/generate-news-backport.js.map +1 -0
  435. package/dist/scripts/generate-news-enhanced/ai-analysis-pipeline.d.ts +124 -0
  436. package/dist/scripts/generate-news-enhanced/ai-analysis-pipeline.d.ts.map +1 -0
  437. package/dist/scripts/generate-news-enhanced/ai-analysis-pipeline.js +529 -0
  438. package/dist/scripts/generate-news-enhanced/ai-analysis-pipeline.js.map +1 -0
  439. package/dist/scripts/generate-news-enhanced/analysis-cache.d.ts +59 -0
  440. package/dist/scripts/generate-news-enhanced/analysis-cache.d.ts.map +1 -0
  441. package/dist/scripts/generate-news-enhanced/analysis-cache.js +116 -0
  442. package/dist/scripts/generate-news-enhanced/analysis-cache.js.map +1 -0
  443. package/dist/scripts/generate-news-enhanced/analysis-labels.d.ts +58 -0
  444. package/dist/scripts/generate-news-enhanced/analysis-labels.d.ts.map +1 -0
  445. package/dist/scripts/generate-news-enhanced/analysis-labels.js +144 -0
  446. package/dist/scripts/generate-news-enhanced/analysis-labels.js.map +1 -0
  447. package/dist/scripts/generate-news-enhanced/config.d.ts +57 -0
  448. package/dist/scripts/generate-news-enhanced/config.d.ts.map +1 -0
  449. package/dist/scripts/generate-news-enhanced/config.js +286 -0
  450. package/dist/scripts/generate-news-enhanced/config.js.map +1 -0
  451. package/dist/scripts/generate-news-enhanced/generators.d.ts +119 -0
  452. package/dist/scripts/generate-news-enhanced/generators.d.ts.map +1 -0
  453. package/dist/scripts/generate-news-enhanced/generators.js +2108 -0
  454. package/dist/scripts/generate-news-enhanced/generators.js.map +1 -0
  455. package/dist/scripts/generate-news-enhanced/helpers.d.ts +123 -0
  456. package/dist/scripts/generate-news-enhanced/helpers.d.ts.map +1 -0
  457. package/dist/scripts/generate-news-enhanced/helpers.js +438 -0
  458. package/dist/scripts/generate-news-enhanced/helpers.js.map +1 -0
  459. package/dist/scripts/generate-news-enhanced/index.d.ts +19 -0
  460. package/dist/scripts/generate-news-enhanced/index.d.ts.map +1 -0
  461. package/dist/scripts/generate-news-enhanced/index.js +221 -0
  462. package/dist/scripts/generate-news-enhanced/index.js.map +1 -0
  463. package/dist/scripts/generate-news-enhanced/swot-analyzer.d.ts +35 -0
  464. package/dist/scripts/generate-news-enhanced/swot-analyzer.d.ts.map +1 -0
  465. package/dist/scripts/generate-news-enhanced/swot-analyzer.js +1179 -0
  466. package/dist/scripts/generate-news-enhanced/swot-analyzer.js.map +1 -0
  467. package/dist/scripts/generate-news-enhanced/types.d.ts +34 -0
  468. package/dist/scripts/generate-news-enhanced/types.d.ts.map +1 -0
  469. package/dist/scripts/generate-news-enhanced/types.js +9 -0
  470. package/dist/scripts/generate-news-enhanced/types.js.map +1 -0
  471. package/dist/scripts/generate-news-enhanced.d.ts +25 -0
  472. package/dist/scripts/generate-news-enhanced.d.ts.map +1 -0
  473. package/dist/scripts/generate-news-enhanced.js +37 -0
  474. package/dist/scripts/generate-news-enhanced.js.map +1 -0
  475. package/dist/scripts/generate-news-indexes/constants.d.ts +20 -0
  476. package/dist/scripts/generate-news-indexes/constants.d.ts.map +1 -0
  477. package/dist/scripts/generate-news-indexes/constants.js +308 -0
  478. package/dist/scripts/generate-news-indexes/constants.js.map +1 -0
  479. package/dist/scripts/generate-news-indexes/helpers.d.ts +73 -0
  480. package/dist/scripts/generate-news-indexes/helpers.d.ts.map +1 -0
  481. package/dist/scripts/generate-news-indexes/helpers.js +352 -0
  482. package/dist/scripts/generate-news-indexes/helpers.js.map +1 -0
  483. package/dist/scripts/generate-news-indexes/index.d.ts +20 -0
  484. package/dist/scripts/generate-news-indexes/index.d.ts.map +1 -0
  485. package/dist/scripts/generate-news-indexes/index.js +75 -0
  486. package/dist/scripts/generate-news-indexes/index.js.map +1 -0
  487. package/dist/scripts/generate-news-indexes/template.d.ts +25 -0
  488. package/dist/scripts/generate-news-indexes/template.d.ts.map +1 -0
  489. package/dist/scripts/generate-news-indexes/template.js +644 -0
  490. package/dist/scripts/generate-news-indexes/template.js.map +1 -0
  491. package/dist/scripts/generate-news-indexes/types.d.ts +96 -0
  492. package/dist/scripts/generate-news-indexes/types.d.ts.map +1 -0
  493. package/dist/scripts/generate-news-indexes/types.js +9 -0
  494. package/dist/scripts/generate-news-indexes/types.js.map +1 -0
  495. package/dist/scripts/generate-news-indexes.d.ts +20 -0
  496. package/dist/scripts/generate-news-indexes.d.ts.map +1 -0
  497. package/dist/scripts/generate-news-indexes.js +19 -0
  498. package/dist/scripts/generate-news-indexes.js.map +1 -0
  499. package/dist/scripts/generate-rss.d.ts +48 -0
  500. package/dist/scripts/generate-rss.d.ts.map +1 -0
  501. package/dist/scripts/generate-rss.js +299 -0
  502. package/dist/scripts/generate-rss.js.map +1 -0
  503. package/dist/scripts/generate-sitemap-html.d.ts +79 -0
  504. package/dist/scripts/generate-sitemap-html.d.ts.map +1 -0
  505. package/dist/scripts/generate-sitemap-html.js +878 -0
  506. package/dist/scripts/generate-sitemap-html.js.map +1 -0
  507. package/dist/scripts/generate-sitemap.d.ts +23 -0
  508. package/dist/scripts/generate-sitemap.d.ts.map +1 -0
  509. package/dist/scripts/generate-sitemap.js +476 -0
  510. package/dist/scripts/generate-sitemap.js.map +1 -0
  511. package/dist/scripts/generate-types-from-cia-schemas.d.ts +176 -0
  512. package/dist/scripts/generate-types-from-cia-schemas.d.ts.map +1 -0
  513. package/dist/scripts/generate-types-from-cia-schemas.js +318 -0
  514. package/dist/scripts/generate-types-from-cia-schemas.js.map +1 -0
  515. package/dist/scripts/government-role-validator.d.ts +65 -0
  516. package/dist/scripts/government-role-validator.d.ts.map +1 -0
  517. package/dist/scripts/government-role-validator.js +217 -0
  518. package/dist/scripts/government-role-validator.js.map +1 -0
  519. package/dist/scripts/html-utils.d.ts +17 -0
  520. package/dist/scripts/html-utils.d.ts.map +1 -0
  521. package/dist/scripts/html-utils.js +29 -0
  522. package/dist/scripts/html-utils.js.map +1 -0
  523. package/dist/scripts/load-cia-stats.d.ts +89 -0
  524. package/dist/scripts/load-cia-stats.d.ts.map +1 -0
  525. package/dist/scripts/load-cia-stats.js +400 -0
  526. package/dist/scripts/load-cia-stats.js.map +1 -0
  527. package/dist/scripts/mcp-client/client.d.ts +73 -0
  528. package/dist/scripts/mcp-client/client.d.ts.map +1 -0
  529. package/dist/scripts/mcp-client/client.js +526 -0
  530. package/dist/scripts/mcp-client/client.js.map +1 -0
  531. package/dist/scripts/mcp-client/document-types.d.ts +23 -0
  532. package/dist/scripts/mcp-client/document-types.d.ts.map +1 -0
  533. package/dist/scripts/mcp-client/document-types.js +62 -0
  534. package/dist/scripts/mcp-client/document-types.js.map +1 -0
  535. package/dist/scripts/mcp-client/index.d.ts +34 -0
  536. package/dist/scripts/mcp-client/index.d.ts.map +1 -0
  537. package/dist/scripts/mcp-client/index.js +67 -0
  538. package/dist/scripts/mcp-client/index.js.map +1 -0
  539. package/dist/scripts/mcp-client/transport.d.ts +32 -0
  540. package/dist/scripts/mcp-client/transport.d.ts.map +1 -0
  541. package/dist/scripts/mcp-client/transport.js +102 -0
  542. package/dist/scripts/mcp-client/transport.js.map +1 -0
  543. package/dist/scripts/mcp-client.d.ts +18 -0
  544. package/dist/scripts/mcp-client.d.ts.map +1 -0
  545. package/dist/scripts/mcp-client.js +18 -0
  546. package/dist/scripts/mcp-client.js.map +1 -0
  547. package/dist/scripts/mcp-query-cli.d.ts +25 -0
  548. package/dist/scripts/mcp-query-cli.d.ts.map +1 -0
  549. package/dist/scripts/mcp-query-cli.js +66 -0
  550. package/dist/scripts/mcp-query-cli.js.map +1 -0
  551. package/dist/scripts/news-types/breaking-news.d.ts +178 -0
  552. package/dist/scripts/news-types/breaking-news.d.ts.map +1 -0
  553. package/dist/scripts/news-types/breaking-news.js +428 -0
  554. package/dist/scripts/news-types/breaking-news.js.map +1 -0
  555. package/dist/scripts/news-types/committee-reports.d.ts +212 -0
  556. package/dist/scripts/news-types/committee-reports.d.ts.map +1 -0
  557. package/dist/scripts/news-types/committee-reports.js +404 -0
  558. package/dist/scripts/news-types/committee-reports.js.map +1 -0
  559. package/dist/scripts/news-types/month-ahead.d.ts +71 -0
  560. package/dist/scripts/news-types/month-ahead.d.ts.map +1 -0
  561. package/dist/scripts/news-types/month-ahead.js +392 -0
  562. package/dist/scripts/news-types/month-ahead.js.map +1 -0
  563. package/dist/scripts/news-types/monthly-review.d.ts +61 -0
  564. package/dist/scripts/news-types/monthly-review.d.ts.map +1 -0
  565. package/dist/scripts/news-types/monthly-review.js +417 -0
  566. package/dist/scripts/news-types/monthly-review.js.map +1 -0
  567. package/dist/scripts/news-types/motions.d.ts +214 -0
  568. package/dist/scripts/news-types/motions.d.ts.map +1 -0
  569. package/dist/scripts/news-types/motions.js +447 -0
  570. package/dist/scripts/news-types/motions.js.map +1 -0
  571. package/dist/scripts/news-types/propositions.d.ts +204 -0
  572. package/dist/scripts/news-types/propositions.d.ts.map +1 -0
  573. package/dist/scripts/news-types/propositions.js +401 -0
  574. package/dist/scripts/news-types/propositions.js.map +1 -0
  575. package/dist/scripts/news-types/week-ahead.d.ts +231 -0
  576. package/dist/scripts/news-types/week-ahead.d.ts.map +1 -0
  577. package/dist/scripts/news-types/week-ahead.js +441 -0
  578. package/dist/scripts/news-types/week-ahead.js.map +1 -0
  579. package/dist/scripts/news-types/weekly-review/analysis.d.ts +47 -0
  580. package/dist/scripts/news-types/weekly-review/analysis.d.ts.map +1 -0
  581. package/dist/scripts/news-types/weekly-review/analysis.js +276 -0
  582. package/dist/scripts/news-types/weekly-review/analysis.js.map +1 -0
  583. package/dist/scripts/news-types/weekly-review/data-loader.d.ts +51 -0
  584. package/dist/scripts/news-types/weekly-review/data-loader.d.ts.map +1 -0
  585. package/dist/scripts/news-types/weekly-review/data-loader.js +298 -0
  586. package/dist/scripts/news-types/weekly-review/data-loader.js.map +1 -0
  587. package/dist/scripts/news-types/weekly-review/generator.d.ts +18 -0
  588. package/dist/scripts/news-types/weekly-review/generator.d.ts.map +1 -0
  589. package/dist/scripts/news-types/weekly-review/generator.js +284 -0
  590. package/dist/scripts/news-types/weekly-review/generator.js.map +1 -0
  591. package/dist/scripts/news-types/weekly-review/index.d.ts +20 -0
  592. package/dist/scripts/news-types/weekly-review/index.d.ts.map +1 -0
  593. package/dist/scripts/news-types/weekly-review/index.js +23 -0
  594. package/dist/scripts/news-types/weekly-review/index.js.map +1 -0
  595. package/dist/scripts/news-types/weekly-review/types.d.ts +72 -0
  596. package/dist/scripts/news-types/weekly-review/types.d.ts.map +1 -0
  597. package/dist/scripts/news-types/weekly-review/types.js +20 -0
  598. package/dist/scripts/news-types/weekly-review/types.js.map +1 -0
  599. package/dist/scripts/news-types/weekly-review/validation.d.ts +10 -0
  600. package/dist/scripts/news-types/weekly-review/validation.d.ts.map +1 -0
  601. package/dist/scripts/news-types/weekly-review/validation.js +95 -0
  602. package/dist/scripts/news-types/weekly-review/validation.js.map +1 -0
  603. package/dist/scripts/news-types/weekly-review.d.ts +15 -0
  604. package/dist/scripts/news-types/weekly-review.d.ts.map +1 -0
  605. package/dist/scripts/news-types/weekly-review.js +14 -0
  606. package/dist/scripts/news-types/weekly-review.js.map +1 -0
  607. package/dist/scripts/party-variants.d.ts +23 -0
  608. package/dist/scripts/party-variants.d.ts.map +1 -0
  609. package/dist/scripts/party-variants.js +50 -0
  610. package/dist/scripts/party-variants.js.map +1 -0
  611. package/dist/scripts/pipeline/index.d.ts +19 -0
  612. package/dist/scripts/pipeline/index.d.ts.map +1 -0
  613. package/dist/scripts/pipeline/index.js +17 -0
  614. package/dist/scripts/pipeline/index.js.map +1 -0
  615. package/dist/scripts/pipeline/orchestrator.d.ts +56 -0
  616. package/dist/scripts/pipeline/orchestrator.d.ts.map +1 -0
  617. package/dist/scripts/pipeline/orchestrator.js +147 -0
  618. package/dist/scripts/pipeline/orchestrator.js.map +1 -0
  619. package/dist/scripts/pipeline/types.d.ts +117 -0
  620. package/dist/scripts/pipeline/types.d.ts.map +1 -0
  621. package/dist/scripts/pipeline/types.js +13 -0
  622. package/dist/scripts/pipeline/types.js.map +1 -0
  623. package/dist/scripts/pipeline/validation.d.ts +66 -0
  624. package/dist/scripts/pipeline/validation.d.ts.map +1 -0
  625. package/dist/scripts/pipeline/validation.js +129 -0
  626. package/dist/scripts/pipeline/validation.js.map +1 -0
  627. package/dist/scripts/populate-analysis-data.d.ts +41 -0
  628. package/dist/scripts/populate-analysis-data.d.ts.map +1 -0
  629. package/dist/scripts/populate-analysis-data.js +255 -0
  630. package/dist/scripts/populate-analysis-data.js.map +1 -0
  631. package/dist/scripts/pre-article-analysis/data-downloader.d.ts +80 -0
  632. package/dist/scripts/pre-article-analysis/data-downloader.d.ts.map +1 -0
  633. package/dist/scripts/pre-article-analysis/data-downloader.js +230 -0
  634. package/dist/scripts/pre-article-analysis/data-downloader.js.map +1 -0
  635. package/dist/scripts/pre-article-analysis/data-persistence.d.ts +141 -0
  636. package/dist/scripts/pre-article-analysis/data-persistence.d.ts.map +1 -0
  637. package/dist/scripts/pre-article-analysis/data-persistence.js +345 -0
  638. package/dist/scripts/pre-article-analysis/data-persistence.js.map +1 -0
  639. package/dist/scripts/pre-article-analysis/markdown-serializer.d.ts +95 -0
  640. package/dist/scripts/pre-article-analysis/markdown-serializer.d.ts.map +1 -0
  641. package/dist/scripts/pre-article-analysis/markdown-serializer.js +648 -0
  642. package/dist/scripts/pre-article-analysis/markdown-serializer.js.map +1 -0
  643. package/dist/scripts/pre-article-analysis/pdf-converter.d.ts +58 -0
  644. package/dist/scripts/pre-article-analysis/pdf-converter.d.ts.map +1 -0
  645. package/dist/scripts/pre-article-analysis/pdf-converter.js +142 -0
  646. package/dist/scripts/pre-article-analysis/pdf-converter.js.map +1 -0
  647. package/dist/scripts/pre-article-analysis.d.ts +41 -0
  648. package/dist/scripts/pre-article-analysis.d.ts.map +1 -0
  649. package/dist/scripts/pre-article-analysis.js +578 -0
  650. package/dist/scripts/pre-article-analysis.js.map +1 -0
  651. package/dist/scripts/scb-client.d.ts +104 -0
  652. package/dist/scripts/scb-client.d.ts.map +1 -0
  653. package/dist/scripts/scb-client.js +286 -0
  654. package/dist/scripts/scb-client.js.map +1 -0
  655. package/dist/scripts/scb-context.d.ts +88 -0
  656. package/dist/scripts/scb-context.d.ts.map +1 -0
  657. package/dist/scripts/scb-context.js +307 -0
  658. package/dist/scripts/scb-context.js.map +1 -0
  659. package/dist/scripts/shared/version.d.ts +9 -0
  660. package/dist/scripts/shared/version.d.ts.map +1 -0
  661. package/dist/scripts/shared/version.js +28 -0
  662. package/dist/scripts/shared/version.js.map +1 -0
  663. package/dist/scripts/statistical-claims-detector.d.ts +119 -0
  664. package/dist/scripts/statistical-claims-detector.d.ts.map +1 -0
  665. package/dist/scripts/statistical-claims-detector.js +391 -0
  666. package/dist/scripts/statistical-claims-detector.js.map +1 -0
  667. package/dist/scripts/sync-cia-schemas.d.ts +52 -0
  668. package/dist/scripts/sync-cia-schemas.d.ts.map +1 -0
  669. package/dist/scripts/sync-cia-schemas.js +195 -0
  670. package/dist/scripts/sync-cia-schemas.js.map +1 -0
  671. package/dist/scripts/translation-dictionary.d.ts +45 -0
  672. package/dist/scripts/translation-dictionary.d.ts.map +1 -0
  673. package/dist/scripts/translation-dictionary.js +3642 -0
  674. package/dist/scripts/translation-dictionary.js.map +1 -0
  675. package/dist/scripts/types/article.d.ts +362 -0
  676. package/dist/scripts/types/article.d.ts.map +1 -0
  677. package/dist/scripts/types/article.js +6 -0
  678. package/dist/scripts/types/article.js.map +1 -0
  679. package/dist/scripts/types/content.d.ts +167 -0
  680. package/dist/scripts/types/content.d.ts.map +1 -0
  681. package/dist/scripts/types/content.js +6 -0
  682. package/dist/scripts/types/content.js.map +1 -0
  683. package/dist/scripts/types/editorial.d.ts +17 -0
  684. package/dist/scripts/types/editorial.d.ts.map +1 -0
  685. package/dist/scripts/types/editorial.js +6 -0
  686. package/dist/scripts/types/editorial.js.map +1 -0
  687. package/dist/scripts/types/language.d.ts +7 -0
  688. package/dist/scripts/types/language.d.ts.map +1 -0
  689. package/dist/scripts/types/language.js +6 -0
  690. package/dist/scripts/types/language.js.map +1 -0
  691. package/dist/scripts/types/mcp.d.ts +117 -0
  692. package/dist/scripts/types/mcp.d.ts.map +1 -0
  693. package/dist/scripts/types/mcp.js +6 -0
  694. package/dist/scripts/types/mcp.js.map +1 -0
  695. package/dist/scripts/types/party.d.ts +9 -0
  696. package/dist/scripts/types/party.d.ts.map +1 -0
  697. package/dist/scripts/types/party.js +6 -0
  698. package/dist/scripts/types/party.js.map +1 -0
  699. package/dist/scripts/types/validation.d.ts +136 -0
  700. package/dist/scripts/types/validation.d.ts.map +1 -0
  701. package/dist/scripts/types/validation.js +6 -0
  702. package/dist/scripts/types/validation.js.map +1 -0
  703. package/dist/scripts/types/workflow.d.ts +78 -0
  704. package/dist/scripts/types/workflow.d.ts.map +1 -0
  705. package/dist/scripts/types/workflow.js +6 -0
  706. package/dist/scripts/types/workflow.js.map +1 -0
  707. package/dist/scripts/update-stats-from-cia.d.ts +44 -0
  708. package/dist/scripts/update-stats-from-cia.d.ts.map +1 -0
  709. package/dist/scripts/update-stats-from-cia.js +310 -0
  710. package/dist/scripts/update-stats-from-cia.js.map +1 -0
  711. package/dist/scripts/validate-against-cia-schemas.d.ts +126 -0
  712. package/dist/scripts/validate-against-cia-schemas.d.ts.map +1 -0
  713. package/dist/scripts/validate-against-cia-schemas.js +299 -0
  714. package/dist/scripts/validate-against-cia-schemas.js.map +1 -0
  715. package/dist/scripts/validate-cross-references.d.ts +49 -0
  716. package/dist/scripts/validate-cross-references.d.ts.map +1 -0
  717. package/dist/scripts/validate-cross-references.js +183 -0
  718. package/dist/scripts/validate-cross-references.js.map +1 -0
  719. package/dist/scripts/validate-file-ownership.d.ts +68 -0
  720. package/dist/scripts/validate-file-ownership.d.ts.map +1 -0
  721. package/dist/scripts/validate-file-ownership.js +135 -0
  722. package/dist/scripts/validate-file-ownership.js.map +1 -0
  723. package/dist/scripts/validate-news-translations.d.ts +27 -0
  724. package/dist/scripts/validate-news-translations.d.ts.map +1 -0
  725. package/dist/scripts/validate-news-translations.js +258 -0
  726. package/dist/scripts/validate-news-translations.js.map +1 -0
  727. package/dist/scripts/validate-translations.d.ts +162 -0
  728. package/dist/scripts/validate-translations.d.ts.map +1 -0
  729. package/dist/scripts/validate-translations.js +378 -0
  730. package/dist/scripts/validate-translations.js.map +1 -0
  731. package/dist/scripts/workflow-state-coordinator.d.ts +354 -0
  732. package/dist/scripts/workflow-state-coordinator.d.ts.map +1 -0
  733. package/dist/scripts/workflow-state-coordinator.js +876 -0
  734. package/dist/scripts/workflow-state-coordinator.js.map +1 -0
  735. package/dist/scripts/world-bank-client.d.ts +122 -0
  736. package/dist/scripts/world-bank-client.d.ts.map +1 -0
  737. package/dist/scripts/world-bank-client.js +192 -0
  738. package/dist/scripts/world-bank-client.js.map +1 -0
  739. package/dist/scripts/world-bank-context.d.ts +88 -0
  740. package/dist/scripts/world-bank-context.d.ts.map +1 -0
  741. package/dist/scripts/world-bank-context.js +331 -0
  742. package/dist/scripts/world-bank-context.js.map +1 -0
  743. package/package.json +32 -7
  744. package/dist/lib/chart-factory.d.ts.map +0 -1
  745. package/dist/lib/chart-factory.js.map +0 -1
  746. package/dist/lib/data-loader.d.ts.map +0 -1
  747. package/dist/lib/data-loader.js.map +0 -1
  748. package/dist/lib/dom-utils.d.ts.map +0 -1
  749. package/dist/lib/dom-utils.js.map +0 -1
  750. package/dist/lib/error-boundary.d.ts.map +0 -1
  751. package/dist/lib/error-boundary.js.map +0 -1
  752. package/dist/lib/fallback-ui.d.ts.map +0 -1
  753. package/dist/lib/fallback-ui.js.map +0 -1
  754. package/dist/lib/index.d.ts.map +0 -1
  755. package/dist/lib/index.js.map +0 -1
  756. package/dist/lib/logger.d.ts.map +0 -1
  757. package/dist/lib/logger.js.map +0 -1
  758. package/dist/lib/theme.d.ts.map +0 -1
  759. package/dist/lib/theme.js.map +0 -1
  760. package/dist/lib/types.d.ts.map +0 -1
  761. package/dist/lib/types.js.map +0 -1
  762. /package/dist/lib/{chart-factory.d.ts → shared/chart-factory.d.ts} +0 -0
  763. /package/dist/lib/{chart-factory.js → shared/chart-factory.js} +0 -0
  764. /package/dist/lib/{data-loader.d.ts → shared/data-loader.d.ts} +0 -0
  765. /package/dist/lib/{data-loader.js → shared/data-loader.js} +0 -0
  766. /package/dist/lib/{dom-utils.d.ts → shared/dom-utils.d.ts} +0 -0
  767. /package/dist/lib/{dom-utils.js → shared/dom-utils.js} +0 -0
  768. /package/dist/lib/{error-boundary.d.ts → shared/error-boundary.d.ts} +0 -0
  769. /package/dist/lib/{error-boundary.js → shared/error-boundary.js} +0 -0
  770. /package/dist/lib/{fallback-ui.d.ts → shared/fallback-ui.d.ts} +0 -0
  771. /package/dist/lib/{fallback-ui.js → shared/fallback-ui.js} +0 -0
  772. /package/dist/lib/{index.d.ts → shared/index.d.ts} +0 -0
  773. /package/dist/lib/{index.js → shared/index.js} +0 -0
  774. /package/dist/lib/{logger.d.ts → shared/logger.d.ts} +0 -0
  775. /package/dist/lib/{logger.js → shared/logger.js} +0 -0
  776. /package/dist/lib/{theme.d.ts → shared/theme.d.ts} +0 -0
  777. /package/dist/lib/{theme.js → shared/theme.js} +0 -0
  778. /package/dist/lib/{types.d.ts → shared/types.d.ts} +0 -0
  779. /package/dist/lib/{types.js → shared/types.js} +0 -0
@@ -0,0 +1,299 @@
1
+ #!/usr/bin/env npx tsx
2
+ /**
3
+ * @module Validation/SchemaValidation
4
+ * @category Validation
5
+ *
6
+ * @title CIA Schema Validator - Data Quality Assurance Engine
7
+ *
8
+ * @description
9
+ * **INTELLIGENCE OPERATIVE PERSPECTIVE**
10
+ *
11
+ * This module serves as the critical data validation gate in the political intelligence platform,
12
+ * ensuring all CIA platform exports conform to their expected JSON schemas. Operating at the
13
+ * intersection of data integrity and threat detection, the schema validator prevents corrupted,
14
+ * tampered, or malformed data from reaching the analytical intelligence pipeline.
15
+ *
16
+ * **OPERATIONAL ARCHITECTURE:**
17
+ * The validator employs Ajv 2019 specification with strict error reporting to validate:
18
+ * - Parliamentary voting records (voteringar) - integrity critical for vote analysis
19
+ * - Member records (ledamöter) - baseline data for behavioral analysis
20
+ * - Document metadata (dokument) - chain of custody for legislative documents
21
+ * - Committee records (betänkanden) - organizational structure validation
22
+ * - Government documents (regering) - executive branch intelligence
23
+ *
24
+ * **INTELLIGENCE APPLICATIONS:**
25
+ * 1. Anomaly Detection: Schema violations trigger investigation protocols - may indicate
26
+ * data tampering, system compromise, or source reliability degradation
27
+ * 2. Data Provenance: Schema conformance provides baseline assurance for data authenticity
28
+ * 3. Pipeline Integrity: Early validation prevents corrupted data from polluting analytical
29
+ * downstream (news generation, dashboard updates, trend analysis)
30
+ * 4. Incident Response: Failed validations log detailed error chains for forensic analysis
31
+ *
32
+ * **SECURITY & COMPLIANCE:**
33
+ * - JSON Schema validation prevents injection attacks on structured data
34
+ * - Verbose error reporting supports compliance auditing (ISO 27001, GDPR)
35
+ * - Type validation ensures downstream code security (no unexpected object shapes)
36
+ * - Automatic schema updates detect when CIA platform structure evolves
37
+ *
38
+ * **OPERATIONAL NOTES:**
39
+ * - Runs pre-build as quality gate in CI/CD pipeline
40
+ * - Provides detailed error messages for debugging data integration issues
41
+ * - Supports both single-file and batch validation modes
42
+ * - Exit code 1 blocks deployment if critical data is corrupted
43
+ *
44
+ * @usage
45
+ * ```
46
+ * npm run validate-schemas # Validate all exports
47
+ * node scripts/validate-against-cia-schemas.js produktnavn # Validate one export
48
+ * ```
49
+ *
50
+ * @performance
51
+ * - Validation latency: ~50ms per export file
52
+ * - Memory usage: ~10MB for schema compilation (reusable)
53
+ * - Recommended: Run on file change events during development
54
+ *
55
+ * @intelligence Risk Assessment Matrix
56
+ * - Critical: Schema violations in vote records (affects coalition analysis)
57
+ * - High: Member record corruption (impacts behavioral tracking)
58
+ * - Medium: Document metadata errors (non-breaking for some analysis)
59
+ * - Low: Minor field validation failures (caught downstream)
60
+ *
61
+ * @osint Data Source Verification
62
+ * - Validates export consistency against published CIA schema specifications
63
+ * - Detects when CIA platform introduces breaking changes
64
+ * - Enables early detection of data quality issues at source
65
+ *
66
+ * @risk Schema Drift Detection
67
+ * - Monitors for unauthorized schema modifications in CIA exports
68
+ * - Prevents data corruption from propagating through intelligence pipeline
69
+ * - Supports incident response for suspected data integrity breaches
70
+ *
71
+ * @gdpr Data Integrity Assurance
72
+ * - Ensures member personal data conforms to expected format
73
+ * - Validates data retention classifications are preserved
74
+ * - Supports audit trail for data processing compliance
75
+ *
76
+ * @security Input Validation Hardening
77
+ * - Prevents malformed JSON from reaching processing logic
78
+ * - Detects XSS/injection attempts in document fields
79
+ * - Validates schema constraints (string lengths, numeric ranges)
80
+ *
81
+ * @author Hack23 AB (Intelligence & Open Government Initiative)
82
+ * @license Apache-2.0
83
+ * @version 2.0.0
84
+ * @since 2024-06-01
85
+ * @see https://github.com/Hack23/cia (CIA Platform Repository)
86
+ * @see schemas/cia/ (JSON Schema Definitions)
87
+ * @see Issue #89 (Data Quality Enhancement Phase)
88
+ */
89
+ import fs from 'node:fs/promises';
90
+ import path from 'node:path';
91
+ import { fileURLToPath } from 'node:url';
92
+ import Ajv2019 from 'ajv/dist/2019.js';
93
+ import addFormats from 'ajv-formats';
94
+ const __filename = fileURLToPath(import.meta.url);
95
+ const __dirname = path.dirname(__filename);
96
+ class CIASchemaValidator {
97
+ schemasDir;
98
+ dataDir;
99
+ ajv;
100
+ results;
101
+ constructor() {
102
+ this.schemasDir = path.join(__dirname, '..', 'schemas', 'cia');
103
+ this.dataDir = path.join(__dirname, '..', 'data', 'cia-exports', 'current');
104
+ const Ajv = Ajv2019.default || Ajv2019;
105
+ this.ajv = new Ajv({
106
+ allErrors: true,
107
+ verbose: true,
108
+ strict: false // Allow additional properties not in schema
109
+ });
110
+ addFormats(this.ajv);
111
+ this.results = [];
112
+ }
113
+ /**
114
+ * Load a CIA schema by product name
115
+ */
116
+ async loadCIASchema(productName) {
117
+ const schemaPath = path.join(this.schemasDir, `${productName}.schema.json`);
118
+ try {
119
+ const schemaContent = await fs.readFile(schemaPath, 'utf8');
120
+ return JSON.parse(schemaContent);
121
+ }
122
+ catch (error) {
123
+ if (error.code === 'ENOENT') {
124
+ throw new Error(`Schema not found: ${productName}.schema.json (run npm run sync-schemas first)`, { cause: error });
125
+ }
126
+ throw error;
127
+ }
128
+ }
129
+ /**
130
+ * Validate a single export against its schema
131
+ */
132
+ async validateExport(productName, data) {
133
+ console.log(`🔍 Validating: ${productName}...`);
134
+ try {
135
+ // Load schema
136
+ const schema = await this.loadCIASchema(productName);
137
+ // Compile schema
138
+ const validate = this.ajv.compile(schema);
139
+ // Validate data
140
+ const valid = validate(data);
141
+ if (!valid) {
142
+ const errors = validate.errors ?? [];
143
+ console.log(` ❌ Validation failed for ${productName}`);
144
+ console.log(` Errors (${errors.length}):`);
145
+ // Show first 5 errors
146
+ const displayErrors = errors.slice(0, 5);
147
+ for (const error of displayErrors) {
148
+ console.log(` - ${error.instancePath || '/'}: ${error.message}`);
149
+ if (error.params && Object.keys(error.params).length > 0) {
150
+ console.log(` Params: ${JSON.stringify(error.params)}`);
151
+ }
152
+ }
153
+ if (errors.length > 5) {
154
+ console.log(` ... and ${errors.length - 5} more errors`);
155
+ }
156
+ this.results.push({
157
+ product: productName,
158
+ valid: false,
159
+ errorCount: errors.length,
160
+ errors: errors
161
+ });
162
+ return false;
163
+ }
164
+ console.log(` ✅ Valid: ${productName}`);
165
+ this.results.push({
166
+ product: productName,
167
+ valid: true,
168
+ errorCount: 0
169
+ });
170
+ return true;
171
+ }
172
+ catch (error) {
173
+ console.log(` ❌ Error: ${productName} - ${error.message}`);
174
+ this.results.push({
175
+ product: productName,
176
+ valid: false,
177
+ error: error.message
178
+ });
179
+ return false;
180
+ }
181
+ }
182
+ /**
183
+ * Validate all CIA exports in the data directory
184
+ */
185
+ async validateAllExports() {
186
+ console.log('🔍 CIA Data Validation');
187
+ console.log('='.repeat(50));
188
+ console.log(`📁 Data directory: ${this.dataDir}`);
189
+ console.log('');
190
+ // Check if data directory exists
191
+ try {
192
+ await fs.access(this.dataDir);
193
+ }
194
+ catch (_error) {
195
+ console.log('⚠️ No data directory found - skipping validation');
196
+ console.log(' Data will be validated when exports are available');
197
+ return 0;
198
+ }
199
+ // Get all JSON files in data directory
200
+ let exportFiles;
201
+ try {
202
+ const files = await fs.readdir(this.dataDir);
203
+ exportFiles = files.filter((f) => f.endsWith('.json'));
204
+ }
205
+ catch (_error) {
206
+ console.log('⚠️ Could not read data directory - skipping validation');
207
+ return 0;
208
+ }
209
+ if (exportFiles.length === 0) {
210
+ console.log('ℹ️ No export files found - nothing to validate');
211
+ console.log(' Data will be validated when exports are available');
212
+ return 0;
213
+ }
214
+ console.log(`📊 Found ${exportFiles.length} export file(s)`);
215
+ console.log('');
216
+ // Validate each export
217
+ for (const exportFile of exportFiles) {
218
+ const productName = exportFile.replace('.json', '');
219
+ const dataPath = path.join(this.dataDir, exportFile);
220
+ try {
221
+ const dataContent = await fs.readFile(dataPath, 'utf8');
222
+ const data = JSON.parse(dataContent);
223
+ await this.validateExport(productName, data);
224
+ }
225
+ catch (error) {
226
+ console.log(` ❌ Error reading ${exportFile}: ${error.message}`);
227
+ this.results.push({
228
+ product: productName,
229
+ valid: false,
230
+ error: error.message
231
+ });
232
+ }
233
+ }
234
+ // Save validation report
235
+ await this.saveReport();
236
+ // Print summary
237
+ this.printSummary();
238
+ // Return exit code (0 if all valid, 1 if any failed)
239
+ const failedCount = this.results.filter((r) => !r.valid).length;
240
+ return failedCount === 0 ? 0 : 1;
241
+ }
242
+ /**
243
+ * Save validation report
244
+ */
245
+ async saveReport() {
246
+ const report = {
247
+ timestamp: new Date().toISOString(),
248
+ totalValidated: this.results.length,
249
+ validCount: this.results.filter((r) => r.valid).length,
250
+ invalidCount: this.results.filter((r) => !r.valid).length,
251
+ results: this.results
252
+ };
253
+ const reportPath = path.join(__dirname, '..', 'validation-report.json');
254
+ await fs.writeFile(reportPath, JSON.stringify(report, null, 2), 'utf8');
255
+ }
256
+ /**
257
+ * Print validation summary
258
+ */
259
+ printSummary() {
260
+ console.log('');
261
+ console.log('='.repeat(50));
262
+ console.log('📊 Validation Summary');
263
+ console.log('='.repeat(50));
264
+ const validCount = this.results.filter((r) => r.valid).length;
265
+ const invalidCount = this.results.filter((r) => !r.valid).length;
266
+ console.log(`✅ Valid: ${validCount}/${this.results.length}`);
267
+ console.log(`❌ Invalid: ${invalidCount}/${this.results.length}`);
268
+ if (invalidCount > 0) {
269
+ console.log('');
270
+ console.log('⚠️ Failed validations:');
271
+ const failed = this.results.filter((r) => !r.valid);
272
+ for (const result of failed) {
273
+ const errorInfo = result.errorCount ? `${result.errorCount} errors` : result.error ?? 'unknown error';
274
+ console.log(` - ${result.product}: ${errorInfo}`);
275
+ }
276
+ }
277
+ console.log('');
278
+ console.log('📄 Full report saved to: validation-report.json');
279
+ console.log('='.repeat(50));
280
+ }
281
+ }
282
+ // Main execution
283
+ async function main() {
284
+ try {
285
+ const validator = new CIASchemaValidator();
286
+ const exitCode = await validator.validateAllExports();
287
+ process.exit(exitCode);
288
+ }
289
+ catch (error) {
290
+ console.error('💥 Fatal error:', error);
291
+ process.exit(1);
292
+ }
293
+ }
294
+ // Run if called directly
295
+ if (import.meta.url === `file://${process.argv[1]}`) {
296
+ main();
297
+ }
298
+ export default CIASchemaValidator;
299
+ //# sourceMappingURL=validate-against-cia-schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-against-cia-schemas.js","sourceRoot":"","sources":["../../scripts/validate-against-cia-schemas.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsFG;AAEH,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,OAAO,MAAM,kBAAkB,CAAC;AACvC,OAAO,UAAU,MAAM,aAAa,CAAC;AAGrC,MAAM,UAAU,GAAW,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC1D,MAAM,SAAS,GAAW,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAkBnD,MAAM,kBAAkB;IACtB,UAAU,CAAS;IACnB,OAAO,CAAS;IAChB,GAAG,CAA+B;IAClC,OAAO,CAAqB;IAE5B;QACE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QAC/D,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;QAC5E,MAAM,GAAG,GAAI,OAAwC,CAAC,OAAO,IAAI,OAAO,CAAC;QACzE,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC;YACjB,SAAS,EAAE,IAAI;YACf,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,KAAK,CAAE,4CAA4C;SAC5D,CAAC,CAAC;QACH,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;IACpB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,WAAmB;QACrC,MAAM,UAAU,GAAW,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,WAAW,cAAc,CAAC,CAAC;QAEpF,IAAI,CAAC;YACH,MAAM,aAAa,GAAW,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YACpE,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,CAA4B,CAAC;QAC9D,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACvD,MAAM,IAAI,KAAK,CAAC,qBAAqB,WAAW,+CAA+C,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;YACrH,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAAC,WAAmB,EAAE,IAAa;QACrD,OAAO,CAAC,GAAG,CAAC,kBAAkB,WAAW,KAAK,CAAC,CAAC;QAEhD,IAAI,CAAC;YACH,cAAc;YACd,MAAM,MAAM,GAA4B,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;YAE9E,iBAAiB;YACjB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAE1C,gBAAgB;YAChB,MAAM,KAAK,GAAY,QAAQ,CAAC,IAAI,CAAC,CAAC;YAEtC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,MAAM,GAAkB,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC;gBACpD,OAAO,CAAC,GAAG,CAAC,8BAA8B,WAAW,EAAE,CAAC,CAAC;gBACzD,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;gBAE7C,sBAAsB;gBACtB,MAAM,aAAa,GAAkB,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACxD,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;oBAClC,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,CAAC,YAAY,IAAI,GAAG,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;oBACtE,IAAI,KAAK,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACzD,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;oBACjE,CAAC;gBACH,CAAC;gBAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACtB,OAAO,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,MAAM,GAAG,CAAC,cAAc,CAAC,CAAC;gBAChE,CAAC;gBAED,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;oBAChB,OAAO,EAAE,WAAW;oBACpB,KAAK,EAAE,KAAK;oBACZ,UAAU,EAAE,MAAM,CAAC,MAAM;oBACzB,MAAM,EAAE,MAAM;iBACf,CAAC,CAAC;gBAEH,OAAO,KAAK,CAAC;YACf,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,eAAe,WAAW,EAAE,CAAC,CAAC;YAC1C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;gBAChB,OAAO,EAAE,WAAW;gBACpB,KAAK,EAAE,IAAI;gBACX,UAAU,EAAE,CAAC;aACd,CAAC,CAAC;YAEH,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,eAAe,WAAW,MAAO,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;YACxE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;gBAChB,OAAO,EAAE,WAAW;gBACpB,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAG,KAAe,CAAC,OAAO;aAChC,CAAC,CAAC;YACH,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,kBAAkB;QACtB,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,iCAAiC;QACjC,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAChC,CAAC;QAAC,OAAO,MAAe,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;YACjE,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;YACpE,OAAO,CAAC,CAAC;QACX,CAAC;QAED,uCAAuC;QACvC,IAAI,WAAqB,CAAC;QAC1B,IAAI,CAAC;YACH,MAAM,KAAK,GAAa,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACvD,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QACjE,CAAC;QAAC,OAAO,MAAe,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;YACvE,OAAO,CAAC,CAAC;QACX,CAAC;QAED,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;YAC/D,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;YACpE,OAAO,CAAC,CAAC;QACX,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,YAAY,WAAW,CAAC,MAAM,iBAAiB,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,uBAAuB;QACvB,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;YACrC,MAAM,WAAW,GAAW,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAC5D,MAAM,QAAQ,GAAW,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;YAE7D,IAAI,CAAC;gBACH,MAAM,WAAW,GAAW,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;gBAChE,MAAM,IAAI,GAAY,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;gBAC9C,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;YAC/C,CAAC;YAAC,OAAO,KAAc,EAAE,CAAC;gBACxB,OAAO,CAAC,GAAG,CAAC,sBAAsB,UAAU,KAAM,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC7E,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;oBAChB,OAAO,EAAE,WAAW;oBACpB,KAAK,EAAE,KAAK;oBACZ,KAAK,EAAG,KAAe,CAAC,OAAO;iBAChC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,yBAAyB;QACzB,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAExB,gBAAgB;QAChB,IAAI,CAAC,YAAY,EAAE,CAAC;QAEpB,qDAAqD;QACrD,MAAM,WAAW,GAAW,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAmB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;QAC1F,OAAO,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU;QACd,MAAM,MAAM,GAAqB;YAC/B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;YACnC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAmB,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM;YACxE,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAmB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM;YAC3E,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC;QAEF,MAAM,UAAU,GAAW,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,wBAAwB,CAAC,CAAC;QAChF,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAC1E,CAAC;IAED;;OAEG;IACH,YAAY;QACV,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAE5B,MAAM,UAAU,GAAW,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAmB,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;QACxF,MAAM,YAAY,GAAW,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAmB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;QAE3F,OAAO,CAAC,GAAG,CAAC,YAAY,UAAU,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,cAAc,YAAY,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAEjE,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;YACvC,MAAM,MAAM,GAAuB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAmB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YAC1F,KAAK,MAAM,MAAM,IAAI,MAAM,EAAE,CAAC;gBAC5B,MAAM,SAAS,GAAW,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,UAAU,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,eAAe,CAAC;gBAC9G,OAAO,CAAC,GAAG,CAAC,QAAQ,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9B,CAAC;CACF;AAED,iBAAiB;AACjB,KAAK,UAAU,IAAI;IACjB,IAAI,CAAC;QACH,MAAM,SAAS,GAAuB,IAAI,kBAAkB,EAAE,CAAC;QAC/D,MAAM,QAAQ,GAAW,MAAM,SAAS,CAAC,kBAAkB,EAAE,CAAC;QAC9D,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzB,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,OAAO,CAAC,KAAK,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;QACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,yBAAyB;AACzB,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,UAAU,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACpD,IAAI,EAAE,CAAC;AACT,CAAC;AAED,eAAe,kBAAkB,CAAC"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * @module Validation/CrossReferenceTracking
3
+ * @description Source verification engine enforcing multi-source journalism standards.
4
+ * Bounded context: Quality Assurance
5
+ *
6
+ * @author Hack23 AB
7
+ * @license Apache-2.0
8
+ */
9
+ import type { ArticleBatchItem, BatchValidationResult, CISummary, CrossRefValidationResult, RequiredToolsMap } from './types/validation.js';
10
+ /**
11
+ * Required MCP tools per article type.
12
+ */
13
+ export declare const REQUIRED_TOOLS_PER_TYPE: RequiredToolsMap;
14
+ /** Minimum number of distinct data sources required per article */
15
+ export declare const MINIMUM_SOURCES = 3;
16
+ /**
17
+ * Extract cross-reference types from article content.
18
+ *
19
+ * @param content - Article HTML or text content
20
+ * @returns Array of detected cross-reference category names
21
+ */
22
+ export declare function extractCrossReferences(content: string | null | undefined): string[];
23
+ /**
24
+ * Validate cross-references for a single article.
25
+ *
26
+ * @param articleType - Type of article
27
+ * @param articleContent - Article HTML or text content
28
+ * @param mcpCalls - Array of MCP calls made during generation
29
+ * @returns Validation result with pass/fail and score
30
+ */
31
+ export declare function validateCrossReferences(articleType: string, articleContent: string, mcpCalls?: ReadonlyArray<{
32
+ readonly tool: string;
33
+ }>): CrossRefValidationResult;
34
+ /**
35
+ * Validate multiple articles at once.
36
+ *
37
+ * @param articles - Array of article objects with type, content, mcpCalls
38
+ * @returns Aggregated validation results
39
+ */
40
+ export declare function validateArticleBatch(articles: ReadonlyArray<ArticleBatchItem> | null | undefined): BatchValidationResult;
41
+ /**
42
+ * Generate a Markdown validation report.
43
+ */
44
+ export declare function generateValidationReport(validation: CrossRefValidationResult): string;
45
+ /**
46
+ * Export CI-friendly summary from batch results.
47
+ */
48
+ export declare function exportCISummary(batchResults: BatchValidationResult): CISummary;
49
+ //# sourceMappingURL=validate-cross-references.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-cross-references.d.ts","sourceRoot":"","sources":["../../scripts/validate-cross-references.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,gBAAgB,EAChB,qBAAqB,EACrB,SAAS,EACT,wBAAwB,EACxB,gBAAgB,EACjB,MAAM,uBAAuB,CAAC;AAG/B;;GAEG;AACH,eAAO,MAAM,uBAAuB,EAAE,gBAqC5B,CAAC;AAEX,mEAAmE;AACnE,eAAO,MAAM,eAAe,IAAI,CAAC;AAEjC;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,EAAE,CAuBnF;AAmBD;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,EACtB,QAAQ,GAAE,aAAa,CAAC;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAM,GACtD,wBAAwB,CAmC1B;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,aAAa,CAAC,gBAAgB,CAAC,GAAG,IAAI,GAAG,SAAS,GAC3D,qBAAqB,CAevB;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,wBAAwB,GAAG,MAAM,CA0BrF;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,YAAY,EAAE,qBAAqB,GAAG,SAAS,CAU9E"}
@@ -0,0 +1,183 @@
1
+ /**
2
+ * @module Validation/CrossReferenceTracking
3
+ * @description Source verification engine enforcing multi-source journalism standards.
4
+ * Bounded context: Quality Assurance
5
+ *
6
+ * @author Hack23 AB
7
+ * @license Apache-2.0
8
+ */
9
+ /**
10
+ * Required MCP tools per article type.
11
+ */
12
+ export const REQUIRED_TOOLS_PER_TYPE = {
13
+ 'week-ahead': [
14
+ 'get_calendar_events',
15
+ 'search_dokument',
16
+ 'get_fragor',
17
+ 'get_interpellationer',
18
+ ],
19
+ 'committee-reports': [
20
+ 'get_betankanden',
21
+ 'search_voteringar',
22
+ 'search_anforanden',
23
+ 'get_propositioner',
24
+ ],
25
+ propositions: [
26
+ 'get_propositioner',
27
+ 'search_dokument_fulltext',
28
+ 'analyze_g0v_by_department',
29
+ 'search_anforanden',
30
+ ],
31
+ motions: [
32
+ 'get_motioner',
33
+ 'search_dokument_fulltext',
34
+ 'analyze_g0v_by_department',
35
+ 'search_anforanden',
36
+ ],
37
+ 'month-ahead': [
38
+ 'get_calendar_events',
39
+ 'get_betankanden',
40
+ 'get_propositioner',
41
+ 'get_motioner',
42
+ ],
43
+ breaking: [
44
+ 'search_voteringar',
45
+ 'get_voting_group',
46
+ 'search_anforanden',
47
+ 'search_ledamoter',
48
+ ],
49
+ };
50
+ /** Minimum number of distinct data sources required per article */
51
+ export const MINIMUM_SOURCES = 3;
52
+ /**
53
+ * Extract cross-reference types from article content.
54
+ *
55
+ * @param content - Article HTML or text content
56
+ * @returns Array of detected cross-reference category names
57
+ */
58
+ export function extractCrossReferences(content) {
59
+ if (!content)
60
+ return [];
61
+ const references = [];
62
+ const contentLower = content.toLowerCase();
63
+ const patterns = {
64
+ calendar: /calendar|event|schedule|meeting/gi,
65
+ documents: /dokument|document|bill|proposition|motion|betänkande/gi,
66
+ votes: /vote|votering|röst|ballot/gi,
67
+ speeches: /speech|anförande|debate|tal/gi,
68
+ members: /ledamot|\bmp\b|member|representative/gi,
69
+ committees: /committee|utskott|commission/gi,
70
+ questions: /question|fråga|interpellation/gi,
71
+ };
72
+ for (const [type, pattern] of Object.entries(patterns)) {
73
+ if (pattern.test(contentLower)) {
74
+ references.push(type);
75
+ }
76
+ }
77
+ return references;
78
+ }
79
+ /**
80
+ * Calculate quality score for cross-referencing (0–1).
81
+ */
82
+ function calculateScore(allRequired, minSources, hasReferences, extraCount) {
83
+ let score = 0;
84
+ if (allRequired)
85
+ score += 0.4;
86
+ if (minSources)
87
+ score += 0.3;
88
+ if (hasReferences)
89
+ score += 0.2;
90
+ score += Math.min(extraCount * 0.05, 0.1);
91
+ return Math.min(score, 1.0);
92
+ }
93
+ /**
94
+ * Validate cross-references for a single article.
95
+ *
96
+ * @param articleType - Type of article
97
+ * @param articleContent - Article HTML or text content
98
+ * @param mcpCalls - Array of MCP calls made during generation
99
+ * @returns Validation result with pass/fail and score
100
+ */
101
+ export function validateCrossReferences(articleType, articleContent, mcpCalls = []) {
102
+ const requiredTools = REQUIRED_TOOLS_PER_TYPE[articleType] ?? [];
103
+ const usedTools = mcpCalls.map((call) => call.tool);
104
+ const missingTools = requiredTools.filter((tool) => !usedTools.includes(tool));
105
+ const extraTools = usedTools.filter((tool) => !requiredTools.includes(tool));
106
+ const crossReferencesInText = extractCrossReferences(articleContent);
107
+ const uniqueTools = [...new Set(usedTools.filter(Boolean))];
108
+ const hasMinimumSources = uniqueTools.length >= MINIMUM_SOURCES;
109
+ const allRequiredToolsUsed = missingTools.length === 0;
110
+ const hasCrossReferencesInText = crossReferencesInText.length >= MINIMUM_SOURCES;
111
+ const passed = allRequiredToolsUsed && hasMinimumSources && hasCrossReferencesInText;
112
+ return {
113
+ articleType,
114
+ requiredTools: [...requiredTools],
115
+ usedTools,
116
+ missingTools,
117
+ extraTools,
118
+ crossReferencesInText,
119
+ sourceCount: usedTools.length,
120
+ hasMinimumSources,
121
+ allRequiredToolsUsed,
122
+ hasCrossReferencesInText,
123
+ passed,
124
+ score: calculateScore(allRequiredToolsUsed, hasMinimumSources, hasCrossReferencesInText, extraTools.length),
125
+ };
126
+ }
127
+ /**
128
+ * Validate multiple articles at once.
129
+ *
130
+ * @param articles - Array of article objects with type, content, mcpCalls
131
+ * @returns Aggregated validation results
132
+ */
133
+ export function validateArticleBatch(articles) {
134
+ const results = (articles ?? []).map((article) => validateCrossReferences(article.type, article.content, article.mcpCalls));
135
+ if (results.length === 0) {
136
+ return { total: 0, passed: 0, failed: 0, avgScore: 0, passRate: 0, details: [] };
137
+ }
138
+ const total = results.length;
139
+ const passed = results.filter((r) => r.passed).length;
140
+ const failed = total - passed;
141
+ const avgScore = results.reduce((sum, r) => sum + r.score, 0) / total;
142
+ return { total, passed, failed, avgScore, passRate: passed / total, details: results };
143
+ }
144
+ /**
145
+ * Generate a Markdown validation report.
146
+ */
147
+ export function generateValidationReport(validation) {
148
+ const { articleType, usedTools, missingTools, crossReferencesInText, passed, score } = validation;
149
+ let report = `## Cross-Reference Validation Report\n\n`;
150
+ report += `**Article Type**: ${articleType}\n`;
151
+ report += `**Status**: ${passed ? '✅ PASSED' : '❌ FAILED'}\n`;
152
+ report += `**Score**: ${(score * 100).toFixed(0)}%\n\n`;
153
+ report += `### MCP Tools Used (${usedTools.length})\n`;
154
+ for (const tool of usedTools) {
155
+ report += `- ✅ ${tool}\n`;
156
+ }
157
+ if (missingTools.length > 0) {
158
+ report += `\n### Missing Required Tools (${missingTools.length})\n`;
159
+ for (const tool of missingTools) {
160
+ report += `- ❌ ${tool}\n`;
161
+ }
162
+ }
163
+ report += `\n### Cross-References in Text (${crossReferencesInText.length})\n`;
164
+ for (const ref of crossReferencesInText) {
165
+ report += `- ${ref}\n`;
166
+ }
167
+ return report;
168
+ }
169
+ /**
170
+ * Export CI-friendly summary from batch results.
171
+ */
172
+ export function exportCISummary(batchResults) {
173
+ return {
174
+ status: batchResults.passRate === 1 ? 'success' : 'failure',
175
+ total: batchResults.total,
176
+ passed: batchResults.passed,
177
+ failed: batchResults.failed,
178
+ passRate: `${(batchResults.passRate * 100).toFixed(1)}%`,
179
+ avgScore: `${(batchResults.avgScore * 100).toFixed(1)}%`,
180
+ timestamp: new Date().toISOString(),
181
+ };
182
+ }
183
+ //# sourceMappingURL=validate-cross-references.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-cross-references.js","sourceRoot":"","sources":["../../scripts/validate-cross-references.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * File Ownership Validator for News Workflow Conflict Prevention
3
+ *
4
+ * Enforces a strict file-ownership contract between content and translation workflows:
5
+ * - Content workflows (news-committee-reports, news-propositions, etc.) own EN/SV files
6
+ * - Translation workflow (news-translate) owns all other language files (DA/NO/FI/DE/FR/ES/NL/AR/HE/JA/KO/ZH)
7
+ *
8
+ * This prevents merge conflicts when concurrent workflows touch the same date's article files.
9
+ *
10
+ * @author Hack23 AB
11
+ * @license Apache-2.0
12
+ */
13
+ /** Languages owned by content generation workflows */
14
+ export declare const CONTENT_LANGS: readonly ["en", "sv"];
15
+ /** Languages owned by the translation workflow */
16
+ export declare const TRANSLATION_LANGS: readonly ["da", "no", "fi", "de", "fr", "es", "nl", "ar", "he", "ja", "ko", "zh"];
17
+ /** Workflow category for file ownership validation */
18
+ export type WorkflowCategory = 'content' | 'translation';
19
+ /** Result of a file ownership validation check */
20
+ export interface ValidationResult {
21
+ /** Whether all pending files (staged + unstaged + untracked) pass ownership validation */
22
+ passed: boolean;
23
+ /** Files that violate the ownership contract */
24
+ violations: string[];
25
+ /** Total pending news HTML files checked */
26
+ checkedCount: number;
27
+ }
28
+ /**
29
+ * Extract the language code from a news article filename.
30
+ * Expected pattern: `news/YYYY-MM-DD-slug-{lang}.html`
31
+ *
32
+ * @param filepath - The file path to extract the language from
33
+ * @returns The two-letter language code, or null if no match
34
+ */
35
+ export declare function extractLangFromPath(filepath: string): string | null;
36
+ /**
37
+ * Check whether a file belongs to the given workflow category.
38
+ *
39
+ * @param filepath - The file path to check
40
+ * @param category - The workflow category ('content' or 'translation')
41
+ * @returns true if the file is allowed for the given category
42
+ */
43
+ export declare function isFileOwnedByCategory(filepath: string, category: WorkflowCategory): boolean;
44
+ /**
45
+ * Validate that all pending files (staged + unstaged + untracked working-tree changes)
46
+ * conform to the file-ownership contract for the given workflow category.
47
+ *
48
+ * Checks the union of:
49
+ * - `git diff --cached --name-only` (staged)
50
+ * - `git diff --name-only` (unstaged modifications)
51
+ * - `git ls-files --others --exclude-standard` (untracked new files)
52
+ *
53
+ * This ensures violations are caught regardless of whether `git add` has been run.
54
+ *
55
+ * @param category - The workflow category ('content' or 'translation')
56
+ * @returns Validation result with pass/fail status and any violations
57
+ */
58
+ export declare function validatePendingFileOwnership(category: WorkflowCategory): ValidationResult;
59
+ /**
60
+ * Validate a list of file paths against the ownership contract.
61
+ * This is the pure-logic core, usable without git.
62
+ *
63
+ * @param files - Array of file paths to validate
64
+ * @param category - The workflow category ('content' or 'translation')
65
+ * @returns Validation result with pass/fail status and any violations
66
+ */
67
+ export declare function validateFileList(files: string[], category: WorkflowCategory): ValidationResult;
68
+ //# sourceMappingURL=validate-file-ownership.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-file-ownership.d.ts","sourceRoot":"","sources":["../../scripts/validate-file-ownership.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,sDAAsD;AACtD,eAAO,MAAM,aAAa,uBAAwB,CAAC;AAEnD,kDAAkD;AAClD,eAAO,MAAM,iBAAiB,mFAEpB,CAAC;AAEX,sDAAsD;AACtD,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,aAAa,CAAC;AAEzD,kDAAkD;AAClD,MAAM,WAAW,gBAAgB;IAC/B,0FAA0F;IAC1F,MAAM,EAAE,OAAO,CAAC;IAChB,gDAAgD;IAChD,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,4CAA4C;IAC5C,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGnE;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,gBAAgB,GACzB,OAAO,CAgBT;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,gBAAgB,GACzB,gBAAgB,CA8BlB;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,EAAE,EACf,QAAQ,EAAE,gBAAgB,GACzB,gBAAgB,CAclB"}