riksdagsmonitor 0.8.14 → 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 +31 -6
  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,554 @@
1
+ /**
2
+ * @module ai-analysis/quality-assessor
3
+ * @description Multi-dimensional quality assessment for generated news articles.
4
+ *
5
+ * Implements a 6-dimension quality scoring framework:
6
+ * 1. Factual Accuracy (25%) — document references match source material
7
+ * 2. Stakeholder Coverage (20%) — all relevant perspectives represented
8
+ * 3. Analytical Depth (20%) — substance beyond surface description
9
+ * 4. Editorial Consistency (15%) — consistent tone, structure, headings
10
+ * 5. Evidence Quality (10%) — assertions backed by document references
11
+ * 6. Language Quality (10%) — word count, clarity, readability
12
+ *
13
+ * The assessor runs as two passes:
14
+ * Pass 1 — compute dimension scores from HTML content
15
+ * Pass 2 — aggregate, flag issues, build suggestions list
16
+ *
17
+ * @author Hack23 AB
18
+ * @license Apache-2.0
19
+ */
20
+ import { extractPartyMentions } from '../party-variants.js';
21
+ // ---------------------------------------------------------------------------
22
+ // Internal constants
23
+ // ---------------------------------------------------------------------------
24
+ /** Dimension weights — must sum to 1.0 */
25
+ const DIMENSION_WEIGHTS = {
26
+ factualAccuracy: 0.25,
27
+ stakeholderCoverage: 0.20,
28
+ analyticalDepth: 0.20,
29
+ editorialConsistency: 0.15,
30
+ evidenceQuality: 0.10,
31
+ languageQuality: 0.10,
32
+ };
33
+ /**
34
+ * Riksdag/Regering document ID patterns.
35
+ * Committee codes may contain non-ASCII Swedish letters (e.g. FöU, CU),
36
+ * so we use Unicode-aware boundaries via the `u` flag and explicit non-word
37
+ * guards `(?:^|[^\p{L}\p{N}_])` / `(?:$|[^\p{L}\p{N}_])` because the
38
+ * standard `\b` anchor is ASCII-only and mishandles ÅÄÖ.
39
+ */
40
+ const UNICODE_WORD_START = '(?:^|[^\\p{L}\\p{N}_])'; // Unicode-aware start boundary
41
+ const UNICODE_WORD_END = '(?:$|[^\\p{L}\\p{N}_])'; // Unicode-aware end boundary
42
+ const DOCUMENT_ID_PATTERNS = [
43
+ new RegExp(`${UNICODE_WORD_START}([\\p{L}]{1,4}\\d{1,4}/\\d{2}:\\d+)${UNICODE_WORD_END}`, 'giu'),
44
+ new RegExp(`${UNICODE_WORD_START}(\\d{4}/\\d{2}:[\\p{L}]{1,4}\\d+)${UNICODE_WORD_END}`, 'giu'),
45
+ new RegExp(`${UNICODE_WORD_START}(Prop\\.\\s*\\d{4}/\\d{2}:\\d+)${UNICODE_WORD_END}`, 'giu'),
46
+ new RegExp(`${UNICODE_WORD_START}(Bet\\.\\s*\\d{4}/\\d{2}:[\\p{L}]{1,4}\\d+)${UNICODE_WORD_END}`, 'giu'),
47
+ new RegExp(`${UNICODE_WORD_START}(Mot\\.\\s*\\d{4}/\\d{2}:\\d+)${UNICODE_WORD_END}`, 'giu'),
48
+ new RegExp(`${UNICODE_WORD_START}(IP\\s*\\d{4}/\\d{2}:\\d+)${UNICODE_WORD_END}`, 'giu'),
49
+ new RegExp(`${UNICODE_WORD_START}(Fr\\.\\s*\\d{4}/\\d{2}:\\d+)${UNICODE_WORD_END}`, 'giu'),
50
+ ];
51
+ /** Words / phrases indicating causal or analytical reasoning */
52
+ const CAUSAL_WORDS = [
53
+ 'because', 'therefore', 'as a result', 'consequently',
54
+ 'due to', 'leads to', 'caused by', 'results in',
55
+ ];
56
+ const COMPARATIVE_WORDS = [
57
+ 'compared to', 'in contrast', 'while', 'whereas',
58
+ 'on the other hand', 'however', 'unlike',
59
+ ];
60
+ const TREND_WORDS = [
61
+ 'trend', 'pattern', 'shift', 'change', 'evolution', 'development',
62
+ ];
63
+ const EVIDENCE_WORDS = [
64
+ 'data shows', 'according to', 'study', 'report', 'statistics',
65
+ 'evidence', 'figures', 'statistics show',
66
+ ];
67
+ // ---------------------------------------------------------------------------
68
+ // Helpers
69
+ // ---------------------------------------------------------------------------
70
+ function stripHtml(html) {
71
+ return html
72
+ .replace(/<script[\s>][\s\S]*?<\/script>/gi, ' ')
73
+ .replace(/<style[\s>][\s\S]*?<\/style>/gi, ' ')
74
+ .replace(/<[^>]*>/g, ' ')
75
+ .replace(/\s+/g, ' ')
76
+ .trim();
77
+ }
78
+ /** Normalize a document ID for deduplication and comparison.
79
+ * Strips all whitespace so format variants like `Prop. 2024/25:1`
80
+ * and `Prop.2024/25:1` collapse to the same canonical form.
81
+ */
82
+ function normalizeDocId(id) {
83
+ return id.replace(/\s+/g, '').toUpperCase();
84
+ }
85
+ function countDocumentIds(html) {
86
+ const ids = new Set();
87
+ for (const pattern of DOCUMENT_ID_PATTERNS) {
88
+ const re = new RegExp(pattern.source, pattern.flags.replace('g', '') + 'g');
89
+ for (const m of html.matchAll(re)) {
90
+ // Group 1 contains the actual document ID; the boundary guards are
91
+ // non-capturing context. Fallback to m[0] is a safety net for any
92
+ // future pattern without a capture group — should never trigger for
93
+ // the current DOCUMENT_ID_PATTERNS.
94
+ ids.add(normalizeDocId(m[1] ?? m[0]));
95
+ }
96
+ }
97
+ return ids;
98
+ }
99
+ /**
100
+ * Count how many of the 8 Swedish parliamentary parties are mentioned.
101
+ *
102
+ * Delegates to the canonical `extractPartyMentions()` from
103
+ * `scripts/party-variants.ts` which uses Unicode-aware regex boundaries
104
+ * (`\p{L}`, `\p{N}`) for correct matching of Swedish names like
105
+ * `Vänsterpartiet` and `Miljöpartiet`.
106
+ */
107
+ function countParties(html) {
108
+ const codes = extractPartyMentions(html);
109
+ return new Set(codes);
110
+ }
111
+ // ---------------------------------------------------------------------------
112
+ // Pass 1 — dimension score computation
113
+ // ---------------------------------------------------------------------------
114
+ /**
115
+ * Factual Accuracy dimension (25 %)
116
+ *
117
+ * Measures whether the article references source documents.
118
+ * High score: ≥ 5 unique document IDs cited.
119
+ * Low score: generic text with no Riksdag/Regering document references.
120
+ */
121
+ function assessFactualAccuracy(html, sourceDocIds, precomputedDocIds) {
122
+ const foundIds = precomputedDocIds ?? countDocumentIds(html);
123
+ const evidence = [];
124
+ const improvements = [];
125
+ // Base score from raw document-ID count
126
+ const rawCount = foundIds.size;
127
+ let score = Math.min(100, Math.round((rawCount / 5) * 100));
128
+ if (rawCount === 0) {
129
+ improvements.push('Add at least 3–5 references to specific Riksdag documents (e.g. Prop. 2024/25:1, Bet. 2024/25:FiU10)');
130
+ score = 0;
131
+ }
132
+ else {
133
+ evidence.push(`${rawCount} document ID(s) cited: ${[...foundIds].slice(0, 5).join(', ')}`);
134
+ if (rawCount < 3) {
135
+ improvements.push('Add more document references for stronger factual grounding');
136
+ }
137
+ }
138
+ // Bonus: verify cited IDs against source list — reward matches, don't penalise
139
+ if (sourceDocIds.length > 0 && foundIds.size > 0) {
140
+ const normalizedSourceSet = new Set(sourceDocIds.map(normalizeDocId));
141
+ const matched = [...foundIds].filter(id => normalizedSourceSet.has(id)).length;
142
+ const matchRatio = matched / foundIds.size;
143
+ // Add up to 20 bonus points when all cited IDs match source docs
144
+ const bonus = Math.round(20 * matchRatio);
145
+ score = Math.min(100, score + bonus);
146
+ evidence.push(`${matched}/${foundIds.size} cited IDs verified against source documents (+${bonus} bonus)`);
147
+ }
148
+ return { score, evidence, improvements };
149
+ }
150
+ /**
151
+ * Stakeholder Coverage dimension (20 %)
152
+ *
153
+ * Swedish parliament has 8 parties; all perspectives should be represented.
154
+ * High score: ≥ 6 parties mentioned.
155
+ */
156
+ function assessStakeholderCoverage(html) {
157
+ const parties = countParties(html);
158
+ const evidence = [];
159
+ const improvements = [];
160
+ const score = Math.min(100, Math.round((parties.size / 6) * 100));
161
+ if (parties.size === 0) {
162
+ improvements.push('Include perspectives from at least 4 Swedish parliamentary parties');
163
+ }
164
+ else {
165
+ evidence.push(`${parties.size}/8 parties represented: ${[...parties].join(', ')}`);
166
+ if (parties.size < 4) {
167
+ improvements.push(`Add perspectives from more parties (currently ${parties.size}/8)`);
168
+ }
169
+ }
170
+ // Check for government/opposition balance
171
+ const text = stripHtml(html).toLowerCase();
172
+ const govTerms = ['government', 'minister', 'statsminister', 'riksdag'];
173
+ const oppTerms = ['opposition', 'motions', 'critics', 'debate'];
174
+ const hasGov = govTerms.some(t => text.includes(t));
175
+ const hasOpp = oppTerms.some(t => text.includes(t));
176
+ if (!hasGov || !hasOpp) {
177
+ improvements.push('Ensure both government and opposition perspectives are represented');
178
+ }
179
+ else {
180
+ evidence.push('Both government and opposition perspectives present');
181
+ }
182
+ return { score, evidence, improvements };
183
+ }
184
+ /**
185
+ * Analytical Depth dimension (20 %)
186
+ *
187
+ * Measures substantive analysis beyond surface-level description.
188
+ */
189
+ function assessAnalyticalDepth(html) {
190
+ const strippedText = stripHtml(html);
191
+ const text = strippedText.toLowerCase();
192
+ const evidence = [];
193
+ const improvements = [];
194
+ let raw = 0;
195
+ const causal = CAUSAL_WORDS.filter(w => text.includes(w)).length;
196
+ raw += Math.min(causal * 4, 20);
197
+ if (causal > 0)
198
+ evidence.push(`${causal} causal-reasoning indicator(s)`);
199
+ const comparative = COMPARATIVE_WORDS.filter(w => text.includes(w)).length;
200
+ raw += Math.min(comparative * 4, 20);
201
+ if (comparative > 0)
202
+ evidence.push(`${comparative} comparative-analysis indicator(s)`);
203
+ const trend = TREND_WORDS.filter(w => text.includes(w)).length;
204
+ raw += Math.min(trend * 4, 20);
205
+ if (trend > 0)
206
+ evidence.push(`${trend} trend-analysis indicator(s)`);
207
+ const evidenceW = EVIDENCE_WORDS.filter(w => text.includes(w)).length;
208
+ raw += Math.min(evidenceW * 4, 20);
209
+ if (evidenceW > 0)
210
+ evidence.push(`${evidenceW} evidence-based indicator(s)`);
211
+ // Multiple perspectives (blockquotes or attributed quotes)
212
+ // Count blockquotes plus quoted spans after normalizing common quote forms
213
+ // so multilingual text (e.g., curly quotes or &quot;) isn't undercounted.
214
+ const normalizedQuoteText = strippedText
215
+ .replace(/&quot;/g, '"')
216
+ .replace(/[“”„‟«»]/g, '"');
217
+ const quotes = (html.match(/<blockquote[\s>]/gi) || []).length +
218
+ (normalizedQuoteText.match(/"[^"]{2,}"/g) || []).length;
219
+ raw += Math.min(quotes * 4, 20);
220
+ if (quotes > 0)
221
+ evidence.push(`${quotes} attributed quote(s) or blockquote(s)`);
222
+ const score = Math.min(100, raw);
223
+ if (score < 40) {
224
+ improvements.push('Add causal reasoning — explain WHY events are happening, not just WHAT happened');
225
+ improvements.push('Include comparative context: how does this compare to previous periods or other countries?');
226
+ }
227
+ if (score < 70) {
228
+ improvements.push('Add trend analysis or pattern recognition');
229
+ }
230
+ return { score, evidence, improvements };
231
+ }
232
+ /**
233
+ * Editorial Consistency dimension (15 %)
234
+ *
235
+ * Checks for required structural elements: h2 sections, "Why it matters",
236
+ * historical context, forward-looking assessment.
237
+ */
238
+ function assessEditorialConsistency(html) {
239
+ const text = stripHtml(html).toLowerCase();
240
+ const evidence = [];
241
+ const improvements = [];
242
+ let score = 0;
243
+ // h2 analytical sections (30 pts for ≥ 3)
244
+ const h2Count = (html.match(/<h2[\s>]/gi) || []).length;
245
+ const sectionPts = Math.min(30, Math.round((h2Count / 3) * 30));
246
+ score += sectionPts;
247
+ if (h2Count >= 3) {
248
+ evidence.push(`${h2Count} analytical h2 sections`);
249
+ }
250
+ else {
251
+ improvements.push(`Add more analytical sections (have ${h2Count}, need ≥ 3 h2 headings)`);
252
+ }
253
+ // "Why it matters" (20 pts)
254
+ const whyPatterns = [/why\s+this\s+matters/i, /varför\s+detta/i, /implications/i, /konsekvenser/i];
255
+ if (whyPatterns.some(p => p.test(html))) {
256
+ score += 20;
257
+ evidence.push('"Why it matters" section present');
258
+ }
259
+ else {
260
+ improvements.push('Add a "Why This Matters" section explaining policy implications');
261
+ }
262
+ // Historical context (20 pts)
263
+ const histPatterns = [/historically/i, /in \d{4}/, /since \d{4}/, /tidigare/i, /historiskt/i];
264
+ if (histPatterns.some(p => p.test(text))) {
265
+ score += 20;
266
+ evidence.push('Historical context present');
267
+ }
268
+ else {
269
+ improvements.push('Add historical context to provide background');
270
+ }
271
+ // Forward-looking assessment (15 pts)
272
+ const fwdWords = ['next', 'upcoming', 'future', 'expected', 'will', 'coming weeks', 'framöver', 'nästa'];
273
+ if (fwdWords.some(w => text.includes(w))) {
274
+ score += 15;
275
+ evidence.push('Forward-looking assessment present');
276
+ }
277
+ else {
278
+ improvements.push('Add a forward-looking "What happens next" assessment');
279
+ }
280
+ // Article structure (back-to-news, language switcher — 15 pts)
281
+ const hasLanguageSwitcher = /class=["'][^"']*\blanguage-switcher\b/.test(html);
282
+ const hasBackToNews = /class=["'][^"']*\bback-to-news\b/.test(html);
283
+ if (hasLanguageSwitcher && hasBackToNews) {
284
+ score += 15;
285
+ evidence.push('Navigation structure complete');
286
+ }
287
+ else {
288
+ if (!hasLanguageSwitcher)
289
+ improvements.push('Language switcher nav missing');
290
+ if (!hasBackToNews)
291
+ improvements.push('Back-to-news link missing');
292
+ }
293
+ return { score: Math.min(100, score), evidence, improvements };
294
+ }
295
+ /**
296
+ * Evidence Quality dimension (10 %)
297
+ *
298
+ * Measures how well assertions are backed by specific document references,
299
+ * source links, or official statistics.
300
+ */
301
+ function assessEvidenceQuality(html, precomputedDocIds) {
302
+ const evidence = [];
303
+ const improvements = [];
304
+ let score = 0;
305
+ // Document IDs as evidence anchors (40 pts for ≥ 3)
306
+ const docIds = precomputedDocIds ?? countDocumentIds(html);
307
+ const docPts = Math.min(40, Math.round((docIds.size / 3) * 40));
308
+ score += docPts;
309
+ if (docIds.size > 0) {
310
+ evidence.push(`${docIds.size} document reference(s)`);
311
+ }
312
+ else {
313
+ improvements.push('Add specific document references (Riksdag/Regering IDs)');
314
+ }
315
+ // Source links in article (30 pts for ≥ 2 external hrefs)
316
+ const externalLinks = (html.match(/href="https?:\/\//g) || []).length;
317
+ const linkPts = Math.min(30, Math.round((externalLinks / 2) * 30));
318
+ score += linkPts;
319
+ if (externalLinks > 0) {
320
+ evidence.push(`${externalLinks} source link(s)`);
321
+ }
322
+ else {
323
+ improvements.push('Add source links to official documents or press releases');
324
+ }
325
+ // Sources section (30 pts) — match the canonical `article-sources` container
326
+ // and common class/heading variants used by templates and localizations.
327
+ const hasSources = /class=["'][^"']*\barticle-sources\b/.test(html) || /class=["'][^"']*\bsources\b/.test(html) || /<h[23][^>]*>\s*Sources/i.test(html);
328
+ if (hasSources) {
329
+ score += 30;
330
+ evidence.push('Sources section present');
331
+ }
332
+ else {
333
+ improvements.push('Add a dedicated Sources section listing all cited documents');
334
+ }
335
+ return { score: Math.min(100, score), evidence, improvements };
336
+ }
337
+ /**
338
+ * Language Quality dimension (10 %)
339
+ *
340
+ * Measures readability and clarity: word count, paragraph structure,
341
+ * absence of untranslated markers.
342
+ */
343
+ function assessLanguageQuality(html, lang) {
344
+ const text = stripHtml(html);
345
+ const evidence = [];
346
+ const improvements = [];
347
+ let score = 0;
348
+ // Word count (40 pts for ≥ 1 000 words)
349
+ const wordCount = text.split(/\s+/).filter(w => w.length > 0).length;
350
+ const wordPts = Math.min(40, Math.round((wordCount / 1000) * 40));
351
+ score += wordPts;
352
+ evidence.push(`${wordCount} words`);
353
+ if (wordCount < 400) {
354
+ improvements.push('Expand article to at least 600–1 000 words for adequate depth');
355
+ }
356
+ // Translation completeness — non-Swedish articles should have no data-translate markers (30 pts)
357
+ if (lang !== 'sv') {
358
+ const untranslated = (html.match(/data-translate="true"/g) || []).length;
359
+ if (untranslated === 0) {
360
+ score += 30;
361
+ evidence.push('No untranslated markers');
362
+ }
363
+ else {
364
+ improvements.push(`${untranslated} untranslated Swedish span(s) — complete translation`);
365
+ }
366
+ }
367
+ else {
368
+ score += 30;
369
+ evidence.push('Swedish source language — translation check not applicable');
370
+ }
371
+ // Paragraph structure (30 pts for ≥ 5 paragraphs)
372
+ const paragraphs = (html.match(/<p[\s>]/gi) || []).length;
373
+ const paraPts = Math.min(30, Math.round((paragraphs / 5) * 30));
374
+ score += paraPts;
375
+ if (paragraphs >= 5) {
376
+ evidence.push(`${paragraphs} paragraph(s)`);
377
+ }
378
+ else {
379
+ improvements.push(`Add more paragraphs (have ${paragraphs}, need ≥ 5)`);
380
+ }
381
+ return { score: Math.min(100, score), evidence, improvements };
382
+ }
383
+ // ---------------------------------------------------------------------------
384
+ // Pass 2 — aggregation + issue detection
385
+ // ---------------------------------------------------------------------------
386
+ function buildIssues(dims, threshold) {
387
+ const issues = [];
388
+ const add = (severity, dimension, score, description, suggestedFix) => {
389
+ if (score < threshold) {
390
+ issues.push({ severity, dimension, description, suggestedFix });
391
+ }
392
+ };
393
+ add('critical', 'factualAccuracy', dims.factualAccuracy.score, 'Low factual accuracy score — insufficient document references', 'Add Riksdag/Regering document IDs that support each claim');
394
+ add('major', 'stakeholderCoverage', dims.stakeholderCoverage.score, 'Inadequate stakeholder coverage — missing party perspectives', 'Include positions of all major parliamentary parties');
395
+ add('major', 'analyticalDepth', dims.analyticalDepth.score, 'Insufficient analytical depth — article is descriptive, not analytical', 'Add causal reasoning, comparisons, and trend analysis');
396
+ add('major', 'editorialConsistency', dims.editorialConsistency.score, 'Editorial structure incomplete', 'Add h2 sections, "Why it matters", historical context');
397
+ add('minor', 'evidenceQuality', dims.evidenceQuality.score, 'Evidence quality below threshold', 'Add source links and a dedicated Sources section');
398
+ add('minor', 'languageQuality', dims.languageQuality.score, 'Language quality below threshold', 'Expand word count, fix untranslated markers, add paragraphs');
399
+ // Sort: critical → major → minor
400
+ const order = { critical: 0, major: 1, minor: 2 };
401
+ return issues.sort((a, b) => order[a.severity] - order[b.severity]);
402
+ }
403
+ // ---------------------------------------------------------------------------
404
+ // Public API
405
+ // ---------------------------------------------------------------------------
406
+ /**
407
+ * Run multi-dimensional quality assessment on a generated article.
408
+ *
409
+ * The assessment performs two passes:
410
+ * Pass 1 — compute all six dimension scores from the HTML content
411
+ * Pass 2 — aggregate dimensions into a weighted overall score and build the issues list
412
+ *
413
+ * Always returns `assessmentPasses >= 2`.
414
+ *
415
+ * @param html - Full HTML content of the article
416
+ * @param lang - ISO 639-1 language code (e.g. "en")
417
+ * @param sourceDocIds - Document IDs available in the source data for cross-checking
418
+ * @param passThreshold - Minimum overall score to pass (0–100, default 60)
419
+ */
420
+ export function assessArticleQuality(html, lang, sourceDocIds = [], passThreshold = 60) {
421
+ // ── Pass 1: compute dimension scores ──────────────────────────────────────
422
+ // Pre-compute document IDs once so both factualAccuracy and evidenceQuality
423
+ // reuse the same set without scanning the HTML twice.
424
+ const docIds = countDocumentIds(html);
425
+ const factualAccuracy = assessFactualAccuracy(html, sourceDocIds, docIds);
426
+ const stakeholderCoverage = assessStakeholderCoverage(html);
427
+ const analyticalDepth = assessAnalyticalDepth(html);
428
+ const editorialConsistency = assessEditorialConsistency(html);
429
+ const evidenceQuality = assessEvidenceQuality(html, docIds);
430
+ const languageQuality = assessLanguageQuality(html, lang);
431
+ const dimensions = {
432
+ factualAccuracy,
433
+ stakeholderCoverage,
434
+ analyticalDepth,
435
+ editorialConsistency,
436
+ evidenceQuality,
437
+ languageQuality,
438
+ };
439
+ // ── Pass 2: aggregate + issues ────────────────────────────────────────────
440
+ const overallScore = Math.round(factualAccuracy.score * DIMENSION_WEIGHTS.factualAccuracy +
441
+ stakeholderCoverage.score * DIMENSION_WEIGHTS.stakeholderCoverage +
442
+ analyticalDepth.score * DIMENSION_WEIGHTS.analyticalDepth +
443
+ editorialConsistency.score * DIMENSION_WEIGHTS.editorialConsistency +
444
+ evidenceQuality.score * DIMENSION_WEIGHTS.evidenceQuality +
445
+ languageQuality.score * DIMENSION_WEIGHTS.languageQuality);
446
+ const dimensionThreshold = passThreshold * 0.6; // dimension-level warning at 60% of overall threshold
447
+ const issues = buildIssues(dimensions, dimensionThreshold);
448
+ // Gather all improvement suggestions
449
+ const suggestions = [
450
+ ...factualAccuracy.improvements,
451
+ ...stakeholderCoverage.improvements,
452
+ ...analyticalDepth.improvements,
453
+ ...editorialConsistency.improvements,
454
+ ...evidenceQuality.improvements,
455
+ ...languageQuality.improvements,
456
+ ];
457
+ return {
458
+ overallScore,
459
+ dimensions,
460
+ issues,
461
+ suggestions,
462
+ passesThreshold: overallScore >= passThreshold,
463
+ assessmentPasses: 2, // Two assessment passes: Pass 1 computes dimension scores, Pass 2 aggregates and builds issues
464
+ };
465
+ }
466
+ /**
467
+ * Render a quality assessment as a concise console report.
468
+ */
469
+ export function printQualityReport(assessment, filename) {
470
+ const { overallScore, passesThreshold, dimensions, issues, suggestions, assessmentPasses } = assessment;
471
+ const label = passesThreshold ? '✅' : '⚠️';
472
+ console.log(`\n📊 Multi-Dimensional Quality Report: ${filename.replace(/\.html$/, '')}`);
473
+ console.log(` Overall Score: ${overallScore}/100 — ${passesThreshold ? 'PASSED' : 'BELOW THRESHOLD'} ${label}`);
474
+ console.log(` Assessment Passes: ${assessmentPasses}`);
475
+ console.log(` Factual Accuracy: ${dimensions.factualAccuracy.score}/100 (weight 25%)`);
476
+ console.log(` Stakeholder Coverage: ${dimensions.stakeholderCoverage.score}/100 (weight 20%)`);
477
+ console.log(` Analytical Depth: ${dimensions.analyticalDepth.score}/100 (weight 20%)`);
478
+ console.log(` Editorial Consistency: ${dimensions.editorialConsistency.score}/100 (weight 15%)`);
479
+ console.log(` Evidence Quality: ${dimensions.evidenceQuality.score}/100 (weight 10%)`);
480
+ console.log(` Language Quality: ${dimensions.languageQuality.score}/100 (weight 10%)`);
481
+ if (issues.length > 0) {
482
+ console.log(` Issues (${issues.length}):`);
483
+ for (const issue of issues.slice(0, 5)) {
484
+ const sev = issue.severity === 'critical' ? '🔴' : issue.severity === 'major' ? '🟡' : '🔵';
485
+ console.log(` ${sev} [${issue.dimension}] ${issue.description}`);
486
+ }
487
+ }
488
+ if (!passesThreshold && suggestions.length > 0) {
489
+ console.log(` Top suggestions:`);
490
+ for (const s of suggestions.slice(0, 3)) {
491
+ console.log(` → ${s}`);
492
+ }
493
+ }
494
+ }
495
+ /**
496
+ * Inject quality metadata into article HTML as a `<meta>` tag and,
497
+ * optionally, an inline JSON-LD block.
498
+ *
499
+ * **CSP note:** An inline `<script type="application/ld+json">` element is
500
+ * still an inline script from the browser's perspective. If the page's
501
+ * Content-Security-Policy sets `script-src` without `'unsafe-inline'`, the
502
+ * JSON-LD block will be blocked by the browser. To keep things safe:
503
+ *
504
+ * - The `<meta name="quality-score">` tag is injected when a `</head>`
505
+ * insertion point is found (CSP-safe).
506
+ * - The JSON-LD `<script>` block is only injected when `injectJsonLd` is
507
+ * `true` (default: `false`). Callers that know their CSP allows inline
508
+ * scripts can opt in.
509
+ * - If the HTML contains no `</head>` tag the function returns the original
510
+ * HTML unchanged (no injection possible without a `<head>` section).
511
+ *
512
+ * @param html - Original article HTML
513
+ * @param assessment - Quality assessment result
514
+ * @param injectJsonLd - If `true`, also add the JSON-LD script block
515
+ * (requires CSP to permit inline scripts). Default: `false`.
516
+ * @returns Modified HTML with quality metadata injected, or the
517
+ * original HTML if no `</head>` tag is present.
518
+ */
519
+ export function injectQualityMetadata(html, assessment, injectJsonLd = false) {
520
+ const { overallScore, dimensions, passesThreshold, assessmentPasses } = assessment;
521
+ // Always inject the CSP-safe <meta> tag
522
+ const metaTag = ` <meta name="quality-score" content="${overallScore}">`;
523
+ let injection = metaTag;
524
+ // Only inject inline JSON-LD when explicitly opted in (requires CSP 'unsafe-inline')
525
+ if (injectJsonLd) {
526
+ const jsonLd = JSON.stringify({
527
+ '@context': 'https://schema.org',
528
+ '@type': 'Rating',
529
+ ratingValue: overallScore,
530
+ bestRating: 100,
531
+ worstRating: 0,
532
+ ratingExplanation: `Multi-dimensional quality assessment (${assessmentPasses} passes)`,
533
+ additionalProperty: [
534
+ { '@type': 'PropertyValue', name: 'passesThreshold', value: passesThreshold },
535
+ { '@type': 'PropertyValue', name: 'factualAccuracy', value: dimensions.factualAccuracy.score },
536
+ { '@type': 'PropertyValue', name: 'stakeholderCoverage', value: dimensions.stakeholderCoverage.score },
537
+ { '@type': 'PropertyValue', name: 'analyticalDepth', value: dimensions.analyticalDepth.score },
538
+ { '@type': 'PropertyValue', name: 'editorialConsistency', value: dimensions.editorialConsistency.score },
539
+ { '@type': 'PropertyValue', name: 'evidenceQuality', value: dimensions.evidenceQuality.score },
540
+ { '@type': 'PropertyValue', name: 'languageQuality', value: dimensions.languageQuality.score },
541
+ ],
542
+ });
543
+ const jsonLdTag = ` <script type="application/ld+json">\n ${jsonLd}\n </script>`;
544
+ injection = `${metaTag}\n${jsonLdTag}`;
545
+ }
546
+ // Insert before </head> (case-insensitive to handle <\/HEAD> etc.)
547
+ const headCloseRe = /<\/head\s*>/i;
548
+ const headMatch = headCloseRe.exec(html);
549
+ if (headMatch) {
550
+ return html.replace(headMatch[0], `${injection}\n${headMatch[0]}`);
551
+ }
552
+ return html;
553
+ }
554
+ //# sourceMappingURL=quality-assessor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quality-assessor.js","sourceRoot":"","sources":["../../../scripts/ai-analysis/quality-assessor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * @module ai-analysis/swot
3
+ * @description SWOT bounded context – stakeholder SWOT matrix construction,
4
+ * enrichment and confidence scoring.
5
+ * @license Apache-2.0
6
+ * @author Hack23 AB
7
+ */
8
+ import type { Language } from '../../types/language.js';
9
+ import type { RawDocument } from '../../data-transformers/types.js';
10
+ import { type LangRecord } from '../helpers.js';
11
+ import type { AnalysisSwotEntry, AnalysisStakeholderSwot, KnownStakeholderRole, SwotQuadrant } from '../types.js';
12
+ export declare const GOV_NAMES: LangRecord;
13
+ export declare const OPP_NAMES: LangRecord;
14
+ export declare const PRIVATE_NAMES: LangRecord;
15
+ /** Derive impact from document type. */
16
+ export declare function impactFromDocType(dt: string): 'high' | 'medium' | 'low';
17
+ /** Build a content-derived SWOT entry from full-text passage when available. */
18
+ export declare function buildEnrichedEntry(doc: RawDocument, topic: string | null, lang: Language, passageMaxChars: number): AnalysisSwotEntry;
19
+ /** Build a structural placeholder entry when no documents exist for a quadrant. */
20
+ export declare function placeholderEntry(role: KnownStakeholderRole, quadrant: SwotQuadrant, topic: string | null, lang: Language, domains: string[]): AnalysisSwotEntry;
21
+ /**
22
+ * Build the three-stakeholder SWOT matrix from classified documents.
23
+ *
24
+ * @param docs - Raw documents to classify
25
+ * @param topic - Optional focus topic
26
+ * @param lang - Target language
27
+ * @param domains - Detected policy domains
28
+ * @returns Array of three stakeholder SWOT analyses
29
+ */
30
+ export declare function buildStakeholderSwot(docs: RawDocument[], topic: string | null, lang: Language, domains: string[]): AnalysisStakeholderSwot[];
31
+ /**
32
+ * Refine stakeholder SWOT entries using full-text document content.
33
+ * Replaces metadata-derived entries with richer passage-based entries
34
+ * when full text is available.
35
+ *
36
+ * @param initial - Current stakeholder SWOT array
37
+ * @param fullTextDocs - Documents with full-text content
38
+ * @param topic - Optional focus topic
39
+ * @param lang - Target language
40
+ * @returns Refined stakeholder SWOT array
41
+ */
42
+ export declare function refineStakeholderSwot(initial: AnalysisStakeholderSwot[], fullTextDocs: RawDocument[], topic: string | null, lang: Language): AnalysisStakeholderSwot[];
43
+ /**
44
+ * Calculate confidence score (0-100) calibrated on both document evidence
45
+ * quality **and** SWOT entry evidence backing.
46
+ *
47
+ * Score breakdown (total 100):
48
+ * - Evidence depth (70%): metadata enrichment, full-text, doc count, type variety
49
+ * - SWOT quality (30%): proportion of non-placeholder SWOT entries
50
+ *
51
+ * @param docs - Documents analysed
52
+ * @param stakeholderSwot - Optional SWOT entries (undefined → 15-point midpoint default)
53
+ * @returns Confidence score 0-100
54
+ */
55
+ export declare function calculateConfidenceScore(docs: RawDocument[], stakeholderSwot?: AnalysisStakeholderSwot[]): number;
56
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../scripts/ai-analysis/swot/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAGpE,OAAO,EACL,KAAK,UAAU,EAShB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EACV,iBAAiB,EACjB,uBAAuB,EACvB,oBAAoB,EACpB,YAAY,EACb,MAAM,aAAa,CAAC;AAOrB,eAAO,MAAM,SAAS,EAAE,UAOvB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,UAOvB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,UAO3B,CAAC;AAgBF,wCAAwC;AACxC,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAIvE;AAoBD,gFAAgF;AAChF,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE,MAAM,GAAG,IAAI,EACpB,IAAI,EAAE,QAAQ,EACd,eAAe,EAAE,MAAM,GACtB,iBAAiB,CAoBnB;AAED,mFAAmF;AACnF,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,oBAAoB,EAC1B,QAAQ,EAAE,YAAY,EACtB,KAAK,EAAE,MAAM,GAAG,IAAI,EACpB,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,MAAM,EAAE,GAChB,iBAAiB,CASnB;AAMD;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,WAAW,EAAE,EACnB,KAAK,EAAE,MAAM,GAAG,IAAI,EACpB,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,MAAM,EAAE,GAChB,uBAAuB,EAAE,CA+F3B;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,uBAAuB,EAAE,EAClC,YAAY,EAAE,WAAW,EAAE,EAC3B,KAAK,EAAE,MAAM,GAAG,IAAI,EACpB,IAAI,EAAE,QAAQ,GACb,uBAAuB,EAAE,CAmF3B;AAMD;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,WAAW,EAAE,EACnB,eAAe,CAAC,EAAE,uBAAuB,EAAE,GAC1C,MAAM,CA4BR"}