riksdagsmonitor 0.8.23 → 0.8.24

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 (546) hide show
  1. package/README.md +53 -1
  2. package/dist/lib/dashboards/party-dashboard.js +2 -1
  3. package/dist/lib/dashboards/party-dashboard.js.map +1 -1
  4. package/dist/lib/dashboards/risk-dashboard.js +2 -1
  5. package/dist/lib/dashboards/risk-dashboard.js.map +1 -1
  6. package/dist/lib/shared/index.d.ts +0 -1
  7. package/dist/lib/shared/index.d.ts.map +1 -1
  8. package/dist/lib/shared/index.js +3 -1
  9. package/dist/lib/shared/index.js.map +1 -1
  10. package/dist/lib/shared/register-globals.d.ts +1 -1
  11. package/dist/lib/shared/register-globals.d.ts.map +1 -1
  12. package/dist/lib/shared/register-globals.js +7 -1
  13. package/dist/lib/shared/register-globals.js.map +1 -1
  14. package/package.json +53 -21
  15. package/dist/scripts/analysis-reader.d.ts +0 -241
  16. package/dist/scripts/analysis-reader.d.ts.map +0 -1
  17. package/dist/scripts/analysis-reader.js +0 -531
  18. package/dist/scripts/analysis-reader.js.map +0 -1
  19. package/dist/scripts/article-quality-enhancer.d.ts +0 -148
  20. package/dist/scripts/article-quality-enhancer.d.ts.map +0 -1
  21. package/dist/scripts/article-quality-enhancer.js +0 -430
  22. package/dist/scripts/article-quality-enhancer.js.map +0 -1
  23. package/dist/scripts/article-template/constants.d.ts +0 -104
  24. package/dist/scripts/article-template/constants.d.ts.map +0 -1
  25. package/dist/scripts/article-template/constants.js +0 -225
  26. package/dist/scripts/article-template/constants.js.map +0 -1
  27. package/dist/scripts/article-template/helpers.d.ts +0 -83
  28. package/dist/scripts/article-template/helpers.d.ts.map +0 -1
  29. package/dist/scripts/article-template/helpers.js +0 -236
  30. package/dist/scripts/article-template/helpers.js.map +0 -1
  31. package/dist/scripts/article-template/index.d.ts +0 -39
  32. package/dist/scripts/article-template/index.d.ts.map +0 -1
  33. package/dist/scripts/article-template/index.js +0 -37
  34. package/dist/scripts/article-template/index.js.map +0 -1
  35. package/dist/scripts/article-template/registry.d.ts +0 -64
  36. package/dist/scripts/article-template/registry.d.ts.map +0 -1
  37. package/dist/scripts/article-template/registry.js +0 -405
  38. package/dist/scripts/article-template/registry.js.map +0 -1
  39. package/dist/scripts/article-template/template.d.ts +0 -18
  40. package/dist/scripts/article-template/template.d.ts.map +0 -1
  41. package/dist/scripts/article-template/template.js +0 -359
  42. package/dist/scripts/article-template/template.js.map +0 -1
  43. package/dist/scripts/article-template/types.d.ts +0 -90
  44. package/dist/scripts/article-template/types.d.ts.map +0 -1
  45. package/dist/scripts/article-template/types.js +0 -96
  46. package/dist/scripts/article-template/types.js.map +0 -1
  47. package/dist/scripts/article-template.d.ts +0 -18
  48. package/dist/scripts/article-template.d.ts.map +0 -1
  49. package/dist/scripts/article-template.js +0 -18
  50. package/dist/scripts/article-template.js.map +0 -1
  51. package/dist/scripts/catalog-downloaded-data.d.ts +0 -66
  52. package/dist/scripts/catalog-downloaded-data.d.ts.map +0 -1
  53. package/dist/scripts/catalog-downloaded-data.js +0 -239
  54. package/dist/scripts/catalog-downloaded-data.js.map +0 -1
  55. package/dist/scripts/check-cia-schema-updates.d.ts +0 -186
  56. package/dist/scripts/check-cia-schema-updates.d.ts.map +0 -1
  57. package/dist/scripts/check-cia-schema-updates.js +0 -363
  58. package/dist/scripts/check-cia-schema-updates.js.map +0 -1
  59. package/dist/scripts/data-transformers/calendar.d.ts +0 -16
  60. package/dist/scripts/data-transformers/calendar.d.ts.map +0 -1
  61. package/dist/scripts/data-transformers/calendar.js +0 -137
  62. package/dist/scripts/data-transformers/calendar.js.map +0 -1
  63. package/dist/scripts/data-transformers/constants/committee-names.d.ts +0 -15
  64. package/dist/scripts/data-transformers/constants/committee-names.d.ts.map +0 -1
  65. package/dist/scripts/data-transformers/constants/committee-names.js +0 -30
  66. package/dist/scripts/data-transformers/constants/committee-names.js.map +0 -1
  67. package/dist/scripts/data-transformers/constants/content-labels-part1.d.ts +0 -11
  68. package/dist/scripts/data-transformers/constants/content-labels-part1.d.ts.map +0 -1
  69. package/dist/scripts/data-transformers/constants/content-labels-part1.js +0 -900
  70. package/dist/scripts/data-transformers/constants/content-labels-part1.js.map +0 -1
  71. package/dist/scripts/data-transformers/constants/content-labels-part2.d.ts +0 -11
  72. package/dist/scripts/data-transformers/constants/content-labels-part2.d.ts.map +0 -1
  73. package/dist/scripts/data-transformers/constants/content-labels-part2.js +0 -900
  74. package/dist/scripts/data-transformers/constants/content-labels-part2.js.map +0 -1
  75. package/dist/scripts/data-transformers/constants/content-labels.d.ts +0 -13
  76. package/dist/scripts/data-transformers/constants/content-labels.d.ts.map +0 -1
  77. package/dist/scripts/data-transformers/constants/content-labels.js +0 -18
  78. package/dist/scripts/data-transformers/constants/content-labels.js.map +0 -1
  79. package/dist/scripts/data-transformers/constants/index.d.ts +0 -15
  80. package/dist/scripts/data-transformers/constants/index.d.ts.map +0 -1
  81. package/dist/scripts/data-transformers/constants/index.js +0 -15
  82. package/dist/scripts/data-transformers/constants/index.js.map +0 -1
  83. package/dist/scripts/data-transformers/constants/locale-map.d.ts +0 -13
  84. package/dist/scripts/data-transformers/constants/locale-map.d.ts.map +0 -1
  85. package/dist/scripts/data-transformers/constants/locale-map.js +0 -17
  86. package/dist/scripts/data-transformers/constants/locale-map.js.map +0 -1
  87. package/dist/scripts/data-transformers/constants.d.ts +0 -14
  88. package/dist/scripts/data-transformers/constants.d.ts.map +0 -1
  89. package/dist/scripts/data-transformers/constants.js +0 -14
  90. package/dist/scripts/data-transformers/constants.js.map +0 -1
  91. package/dist/scripts/data-transformers/content-generators/ai-mindmap-analyzer.d.ts +0 -64
  92. package/dist/scripts/data-transformers/content-generators/ai-mindmap-analyzer.d.ts.map +0 -1
  93. package/dist/scripts/data-transformers/content-generators/ai-mindmap-analyzer.js +0 -805
  94. package/dist/scripts/data-transformers/content-generators/ai-mindmap-analyzer.js.map +0 -1
  95. package/dist/scripts/data-transformers/content-generators/cia-overview-section.d.ts +0 -50
  96. package/dist/scripts/data-transformers/content-generators/cia-overview-section.d.ts.map +0 -1
  97. package/dist/scripts/data-transformers/content-generators/cia-overview-section.js +0 -310
  98. package/dist/scripts/data-transformers/content-generators/cia-overview-section.js.map +0 -1
  99. package/dist/scripts/data-transformers/content-generators/committee.d.ts +0 -12
  100. package/dist/scripts/data-transformers/content-generators/committee.d.ts.map +0 -1
  101. package/dist/scripts/data-transformers/content-generators/committee.js +0 -247
  102. package/dist/scripts/data-transformers/content-generators/committee.js.map +0 -1
  103. package/dist/scripts/data-transformers/content-generators/dashboard-section.d.ts +0 -124
  104. package/dist/scripts/data-transformers/content-generators/dashboard-section.d.ts.map +0 -1
  105. package/dist/scripts/data-transformers/content-generators/dashboard-section.js +0 -564
  106. package/dist/scripts/data-transformers/content-generators/dashboard-section.js.map +0 -1
  107. package/dist/scripts/data-transformers/content-generators/economic-dashboard-section.d.ts +0 -82
  108. package/dist/scripts/data-transformers/content-generators/economic-dashboard-section.d.ts.map +0 -1
  109. package/dist/scripts/data-transformers/content-generators/economic-dashboard-section.js +0 -321
  110. package/dist/scripts/data-transformers/content-generators/economic-dashboard-section.js.map +0 -1
  111. package/dist/scripts/data-transformers/content-generators/generic.d.ts +0 -12
  112. package/dist/scripts/data-transformers/content-generators/generic.d.ts.map +0 -1
  113. package/dist/scripts/data-transformers/content-generators/generic.js +0 -295
  114. package/dist/scripts/data-transformers/content-generators/generic.js.map +0 -1
  115. package/dist/scripts/data-transformers/content-generators/index.d.ts +0 -84
  116. package/dist/scripts/data-transformers/content-generators/index.d.ts.map +0 -1
  117. package/dist/scripts/data-transformers/content-generators/index.js +0 -47
  118. package/dist/scripts/data-transformers/content-generators/index.js.map +0 -1
  119. package/dist/scripts/data-transformers/content-generators/interpellations.d.ts +0 -12
  120. package/dist/scripts/data-transformers/content-generators/interpellations.d.ts.map +0 -1
  121. package/dist/scripts/data-transformers/content-generators/interpellations.js +0 -124
  122. package/dist/scripts/data-transformers/content-generators/interpellations.js.map +0 -1
  123. package/dist/scripts/data-transformers/content-generators/mindmap-section.d.ts +0 -137
  124. package/dist/scripts/data-transformers/content-generators/mindmap-section.d.ts.map +0 -1
  125. package/dist/scripts/data-transformers/content-generators/mindmap-section.js +0 -286
  126. package/dist/scripts/data-transformers/content-generators/mindmap-section.js.map +0 -1
  127. package/dist/scripts/data-transformers/content-generators/month-ahead.d.ts +0 -17
  128. package/dist/scripts/data-transformers/content-generators/month-ahead.d.ts.map +0 -1
  129. package/dist/scripts/data-transformers/content-generators/month-ahead.js +0 -212
  130. package/dist/scripts/data-transformers/content-generators/month-ahead.js.map +0 -1
  131. package/dist/scripts/data-transformers/content-generators/monthly-review.d.ts +0 -17
  132. package/dist/scripts/data-transformers/content-generators/monthly-review.d.ts.map +0 -1
  133. package/dist/scripts/data-transformers/content-generators/monthly-review.js +0 -173
  134. package/dist/scripts/data-transformers/content-generators/monthly-review.js.map +0 -1
  135. package/dist/scripts/data-transformers/content-generators/motions.d.ts +0 -12
  136. package/dist/scripts/data-transformers/content-generators/motions.d.ts.map +0 -1
  137. package/dist/scripts/data-transformers/content-generators/motions.js +0 -158
  138. package/dist/scripts/data-transformers/content-generators/motions.js.map +0 -1
  139. package/dist/scripts/data-transformers/content-generators/newsworthiness.d.ts +0 -62
  140. package/dist/scripts/data-transformers/content-generators/newsworthiness.d.ts.map +0 -1
  141. package/dist/scripts/data-transformers/content-generators/newsworthiness.js +0 -254
  142. package/dist/scripts/data-transformers/content-generators/newsworthiness.js.map +0 -1
  143. package/dist/scripts/data-transformers/content-generators/propositions.d.ts +0 -12
  144. package/dist/scripts/data-transformers/content-generators/propositions.d.ts.map +0 -1
  145. package/dist/scripts/data-transformers/content-generators/propositions.js +0 -263
  146. package/dist/scripts/data-transformers/content-generators/propositions.js.map +0 -1
  147. package/dist/scripts/data-transformers/content-generators/sankey-section.d.ts +0 -92
  148. package/dist/scripts/data-transformers/content-generators/sankey-section.d.ts.map +0 -1
  149. package/dist/scripts/data-transformers/content-generators/sankey-section.js +0 -257
  150. package/dist/scripts/data-transformers/content-generators/sankey-section.js.map +0 -1
  151. package/dist/scripts/data-transformers/content-generators/shared.d.ts +0 -139
  152. package/dist/scripts/data-transformers/content-generators/shared.d.ts.map +0 -1
  153. package/dist/scripts/data-transformers/content-generators/shared.js +0 -935
  154. package/dist/scripts/data-transformers/content-generators/shared.js.map +0 -1
  155. package/dist/scripts/data-transformers/content-generators/swot-section.d.ts +0 -50
  156. package/dist/scripts/data-transformers/content-generators/swot-section.d.ts.map +0 -1
  157. package/dist/scripts/data-transformers/content-generators/swot-section.js +0 -177
  158. package/dist/scripts/data-transformers/content-generators/swot-section.js.map +0 -1
  159. package/dist/scripts/data-transformers/content-generators/week-ahead.d.ts +0 -12
  160. package/dist/scripts/data-transformers/content-generators/week-ahead.d.ts.map +0 -1
  161. package/dist/scripts/data-transformers/content-generators/week-ahead.js +0 -332
  162. package/dist/scripts/data-transformers/content-generators/week-ahead.js.map +0 -1
  163. package/dist/scripts/data-transformers/content-generators.d.ts +0 -15
  164. package/dist/scripts/data-transformers/content-generators.d.ts.map +0 -1
  165. package/dist/scripts/data-transformers/content-generators.js +0 -14
  166. package/dist/scripts/data-transformers/content-generators.js.map +0 -1
  167. package/dist/scripts/data-transformers/document-analysis.d.ts +0 -58
  168. package/dist/scripts/data-transformers/document-analysis.d.ts.map +0 -1
  169. package/dist/scripts/data-transformers/document-analysis.js +0 -396
  170. package/dist/scripts/data-transformers/document-analysis.js.map +0 -1
  171. package/dist/scripts/data-transformers/helpers.d.ts +0 -144
  172. package/dist/scripts/data-transformers/helpers.d.ts.map +0 -1
  173. package/dist/scripts/data-transformers/helpers.js +0 -408
  174. package/dist/scripts/data-transformers/helpers.js.map +0 -1
  175. package/dist/scripts/data-transformers/index.d.ts +0 -45
  176. package/dist/scripts/data-transformers/index.d.ts.map +0 -1
  177. package/dist/scripts/data-transformers/index.js +0 -66
  178. package/dist/scripts/data-transformers/index.js.map +0 -1
  179. package/dist/scripts/data-transformers/metadata.d.ts +0 -42
  180. package/dist/scripts/data-transformers/metadata.d.ts.map +0 -1
  181. package/dist/scripts/data-transformers/metadata.js +0 -385
  182. package/dist/scripts/data-transformers/metadata.js.map +0 -1
  183. package/dist/scripts/data-transformers/policy-analysis.d.ts +0 -105
  184. package/dist/scripts/data-transformers/policy-analysis.d.ts.map +0 -1
  185. package/dist/scripts/data-transformers/policy-analysis.js +0 -686
  186. package/dist/scripts/data-transformers/policy-analysis.js.map +0 -1
  187. package/dist/scripts/data-transformers/risk-analysis.d.ts +0 -104
  188. package/dist/scripts/data-transformers/risk-analysis.d.ts.map +0 -1
  189. package/dist/scripts/data-transformers/risk-analysis.js +0 -279
  190. package/dist/scripts/data-transformers/risk-analysis.js.map +0 -1
  191. package/dist/scripts/data-transformers/types.d.ts +0 -260
  192. package/dist/scripts/data-transformers/types.d.ts.map +0 -1
  193. package/dist/scripts/data-transformers/types.js +0 -11
  194. package/dist/scripts/data-transformers/types.js.map +0 -1
  195. package/dist/scripts/data-transformers.d.ts +0 -23
  196. package/dist/scripts/data-transformers.d.ts.map +0 -1
  197. package/dist/scripts/data-transformers.js +0 -35
  198. package/dist/scripts/data-transformers.js.map +0 -1
  199. package/dist/scripts/deep-inspection/index.d.ts +0 -55
  200. package/dist/scripts/deep-inspection/index.d.ts.map +0 -1
  201. package/dist/scripts/deep-inspection/index.js +0 -66
  202. package/dist/scripts/deep-inspection/index.js.map +0 -1
  203. package/dist/scripts/detect-swedish-leakage.d.ts +0 -69
  204. package/dist/scripts/detect-swedish-leakage.d.ts.map +0 -1
  205. package/dist/scripts/detect-swedish-leakage.js +0 -417
  206. package/dist/scripts/detect-swedish-leakage.js.map +0 -1
  207. package/dist/scripts/editorial-framework.d.ts +0 -121
  208. package/dist/scripts/editorial-framework.d.ts.map +0 -1
  209. package/dist/scripts/editorial-framework.js +0 -364
  210. package/dist/scripts/editorial-framework.js.map +0 -1
  211. package/dist/scripts/editorial-pillars.d.ts +0 -43
  212. package/dist/scripts/editorial-pillars.d.ts.map +0 -1
  213. package/dist/scripts/editorial-pillars.js +0 -215
  214. package/dist/scripts/editorial-pillars.js.map +0 -1
  215. package/dist/scripts/extract-news-metadata.d.ts +0 -12
  216. package/dist/scripts/extract-news-metadata.d.ts.map +0 -1
  217. package/dist/scripts/extract-news-metadata.js +0 -107
  218. package/dist/scripts/extract-news-metadata.js.map +0 -1
  219. package/dist/scripts/extract-vocabulary.d.ts +0 -15
  220. package/dist/scripts/extract-vocabulary.d.ts.map +0 -1
  221. package/dist/scripts/extract-vocabulary.js +0 -255
  222. package/dist/scripts/extract-vocabulary.js.map +0 -1
  223. package/dist/scripts/fix-article-navigation.d.ts +0 -37
  224. package/dist/scripts/fix-article-navigation.d.ts.map +0 -1
  225. package/dist/scripts/fix-article-navigation.js +0 -198
  226. package/dist/scripts/fix-article-navigation.js.map +0 -1
  227. package/dist/scripts/fix-keywords-localization.d.ts +0 -18
  228. package/dist/scripts/fix-keywords-localization.d.ts.map +0 -1
  229. package/dist/scripts/fix-keywords-localization.js +0 -270
  230. package/dist/scripts/fix-keywords-localization.js.map +0 -1
  231. package/dist/scripts/fix-old-articles-branding.d.ts +0 -17
  232. package/dist/scripts/fix-old-articles-branding.d.ts.map +0 -1
  233. package/dist/scripts/fix-old-articles-branding.js +0 -229
  234. package/dist/scripts/fix-old-articles-branding.js.map +0 -1
  235. package/dist/scripts/generate-news-backport.d.ts +0 -16
  236. package/dist/scripts/generate-news-backport.d.ts.map +0 -1
  237. package/dist/scripts/generate-news-backport.js +0 -379
  238. package/dist/scripts/generate-news-backport.js.map +0 -1
  239. package/dist/scripts/generate-news-enhanced/ai-analysis-pipeline.d.ts +0 -141
  240. package/dist/scripts/generate-news-enhanced/ai-analysis-pipeline.d.ts.map +0 -1
  241. package/dist/scripts/generate-news-enhanced/ai-analysis-pipeline.js +0 -546
  242. package/dist/scripts/generate-news-enhanced/ai-analysis-pipeline.js.map +0 -1
  243. package/dist/scripts/generate-news-enhanced/analysis-cache.d.ts +0 -59
  244. package/dist/scripts/generate-news-enhanced/analysis-cache.d.ts.map +0 -1
  245. package/dist/scripts/generate-news-enhanced/analysis-cache.js +0 -116
  246. package/dist/scripts/generate-news-enhanced/analysis-cache.js.map +0 -1
  247. package/dist/scripts/generate-news-enhanced/analysis-labels.d.ts +0 -58
  248. package/dist/scripts/generate-news-enhanced/analysis-labels.d.ts.map +0 -1
  249. package/dist/scripts/generate-news-enhanced/analysis-labels.js +0 -144
  250. package/dist/scripts/generate-news-enhanced/analysis-labels.js.map +0 -1
  251. package/dist/scripts/generate-news-enhanced/config.d.ts +0 -58
  252. package/dist/scripts/generate-news-enhanced/config.d.ts.map +0 -1
  253. package/dist/scripts/generate-news-enhanced/config.js +0 -286
  254. package/dist/scripts/generate-news-enhanced/config.js.map +0 -1
  255. package/dist/scripts/generate-news-enhanced/generators.d.ts +0 -119
  256. package/dist/scripts/generate-news-enhanced/generators.d.ts.map +0 -1
  257. package/dist/scripts/generate-news-enhanced/generators.js +0 -2131
  258. package/dist/scripts/generate-news-enhanced/generators.js.map +0 -1
  259. package/dist/scripts/generate-news-enhanced/helpers.d.ts +0 -122
  260. package/dist/scripts/generate-news-enhanced/helpers.d.ts.map +0 -1
  261. package/dist/scripts/generate-news-enhanced/helpers.js +0 -468
  262. package/dist/scripts/generate-news-enhanced/helpers.js.map +0 -1
  263. package/dist/scripts/generate-news-enhanced/index.d.ts +0 -19
  264. package/dist/scripts/generate-news-enhanced/index.d.ts.map +0 -1
  265. package/dist/scripts/generate-news-enhanced/index.js +0 -221
  266. package/dist/scripts/generate-news-enhanced/index.js.map +0 -1
  267. package/dist/scripts/generate-news-enhanced/swot-analyzer.d.ts +0 -46
  268. package/dist/scripts/generate-news-enhanced/swot-analyzer.d.ts.map +0 -1
  269. package/dist/scripts/generate-news-enhanced/swot-analyzer.js +0 -1227
  270. package/dist/scripts/generate-news-enhanced/swot-analyzer.js.map +0 -1
  271. package/dist/scripts/generate-news-enhanced/types.d.ts +0 -34
  272. package/dist/scripts/generate-news-enhanced/types.d.ts.map +0 -1
  273. package/dist/scripts/generate-news-enhanced/types.js +0 -9
  274. package/dist/scripts/generate-news-enhanced/types.js.map +0 -1
  275. package/dist/scripts/generate-news-enhanced.d.ts +0 -25
  276. package/dist/scripts/generate-news-enhanced.d.ts.map +0 -1
  277. package/dist/scripts/generate-news-enhanced.js +0 -37
  278. package/dist/scripts/generate-news-enhanced.js.map +0 -1
  279. package/dist/scripts/generate-news-indexes/constants.d.ts +0 -20
  280. package/dist/scripts/generate-news-indexes/constants.d.ts.map +0 -1
  281. package/dist/scripts/generate-news-indexes/constants.js +0 -308
  282. package/dist/scripts/generate-news-indexes/constants.js.map +0 -1
  283. package/dist/scripts/generate-news-indexes/helpers.d.ts +0 -73
  284. package/dist/scripts/generate-news-indexes/helpers.d.ts.map +0 -1
  285. package/dist/scripts/generate-news-indexes/helpers.js +0 -352
  286. package/dist/scripts/generate-news-indexes/helpers.js.map +0 -1
  287. package/dist/scripts/generate-news-indexes/index.d.ts +0 -20
  288. package/dist/scripts/generate-news-indexes/index.d.ts.map +0 -1
  289. package/dist/scripts/generate-news-indexes/index.js +0 -75
  290. package/dist/scripts/generate-news-indexes/index.js.map +0 -1
  291. package/dist/scripts/generate-news-indexes/template.d.ts +0 -25
  292. package/dist/scripts/generate-news-indexes/template.d.ts.map +0 -1
  293. package/dist/scripts/generate-news-indexes/template.js +0 -644
  294. package/dist/scripts/generate-news-indexes/template.js.map +0 -1
  295. package/dist/scripts/generate-news-indexes/types.d.ts +0 -96
  296. package/dist/scripts/generate-news-indexes/types.d.ts.map +0 -1
  297. package/dist/scripts/generate-news-indexes/types.js +0 -9
  298. package/dist/scripts/generate-news-indexes/types.js.map +0 -1
  299. package/dist/scripts/generate-news-indexes.d.ts +0 -20
  300. package/dist/scripts/generate-news-indexes.d.ts.map +0 -1
  301. package/dist/scripts/generate-news-indexes.js +0 -19
  302. package/dist/scripts/generate-news-indexes.js.map +0 -1
  303. package/dist/scripts/generate-rss.d.ts +0 -48
  304. package/dist/scripts/generate-rss.d.ts.map +0 -1
  305. package/dist/scripts/generate-rss.js +0 -299
  306. package/dist/scripts/generate-rss.js.map +0 -1
  307. package/dist/scripts/generate-sitemap-html.d.ts +0 -79
  308. package/dist/scripts/generate-sitemap-html.d.ts.map +0 -1
  309. package/dist/scripts/generate-sitemap-html.js +0 -878
  310. package/dist/scripts/generate-sitemap-html.js.map +0 -1
  311. package/dist/scripts/generate-sitemap.d.ts +0 -23
  312. package/dist/scripts/generate-sitemap.d.ts.map +0 -1
  313. package/dist/scripts/generate-sitemap.js +0 -476
  314. package/dist/scripts/generate-sitemap.js.map +0 -1
  315. package/dist/scripts/generate-types-from-cia-schemas.d.ts +0 -176
  316. package/dist/scripts/generate-types-from-cia-schemas.d.ts.map +0 -1
  317. package/dist/scripts/generate-types-from-cia-schemas.js +0 -318
  318. package/dist/scripts/generate-types-from-cia-schemas.js.map +0 -1
  319. package/dist/scripts/government-role-validator.d.ts +0 -65
  320. package/dist/scripts/government-role-validator.d.ts.map +0 -1
  321. package/dist/scripts/government-role-validator.js +0 -217
  322. package/dist/scripts/government-role-validator.js.map +0 -1
  323. package/dist/scripts/html-utils.d.ts +0 -17
  324. package/dist/scripts/html-utils.d.ts.map +0 -1
  325. package/dist/scripts/html-utils.js +0 -29
  326. package/dist/scripts/html-utils.js.map +0 -1
  327. package/dist/scripts/load-cia-stats.d.ts +0 -89
  328. package/dist/scripts/load-cia-stats.d.ts.map +0 -1
  329. package/dist/scripts/load-cia-stats.js +0 -400
  330. package/dist/scripts/load-cia-stats.js.map +0 -1
  331. package/dist/scripts/mcp-client/client.d.ts +0 -73
  332. package/dist/scripts/mcp-client/client.d.ts.map +0 -1
  333. package/dist/scripts/mcp-client/client.js +0 -526
  334. package/dist/scripts/mcp-client/client.js.map +0 -1
  335. package/dist/scripts/mcp-client/document-types.d.ts +0 -23
  336. package/dist/scripts/mcp-client/document-types.d.ts.map +0 -1
  337. package/dist/scripts/mcp-client/document-types.js +0 -62
  338. package/dist/scripts/mcp-client/document-types.js.map +0 -1
  339. package/dist/scripts/mcp-client/index.d.ts +0 -34
  340. package/dist/scripts/mcp-client/index.d.ts.map +0 -1
  341. package/dist/scripts/mcp-client/index.js +0 -67
  342. package/dist/scripts/mcp-client/index.js.map +0 -1
  343. package/dist/scripts/mcp-client/transport.d.ts +0 -32
  344. package/dist/scripts/mcp-client/transport.d.ts.map +0 -1
  345. package/dist/scripts/mcp-client/transport.js +0 -102
  346. package/dist/scripts/mcp-client/transport.js.map +0 -1
  347. package/dist/scripts/mcp-client.d.ts +0 -18
  348. package/dist/scripts/mcp-client.d.ts.map +0 -1
  349. package/dist/scripts/mcp-client.js +0 -18
  350. package/dist/scripts/mcp-client.js.map +0 -1
  351. package/dist/scripts/mcp-query-cli.d.ts +0 -25
  352. package/dist/scripts/mcp-query-cli.d.ts.map +0 -1
  353. package/dist/scripts/mcp-query-cli.js +0 -66
  354. package/dist/scripts/mcp-query-cli.js.map +0 -1
  355. package/dist/scripts/news-types/breaking-news.d.ts +0 -178
  356. package/dist/scripts/news-types/breaking-news.d.ts.map +0 -1
  357. package/dist/scripts/news-types/breaking-news.js +0 -432
  358. package/dist/scripts/news-types/breaking-news.js.map +0 -1
  359. package/dist/scripts/news-types/committee-reports.d.ts +0 -212
  360. package/dist/scripts/news-types/committee-reports.d.ts.map +0 -1
  361. package/dist/scripts/news-types/committee-reports.js +0 -404
  362. package/dist/scripts/news-types/committee-reports.js.map +0 -1
  363. package/dist/scripts/news-types/month-ahead.d.ts +0 -71
  364. package/dist/scripts/news-types/month-ahead.d.ts.map +0 -1
  365. package/dist/scripts/news-types/month-ahead.js +0 -392
  366. package/dist/scripts/news-types/month-ahead.js.map +0 -1
  367. package/dist/scripts/news-types/monthly-review.d.ts +0 -61
  368. package/dist/scripts/news-types/monthly-review.d.ts.map +0 -1
  369. package/dist/scripts/news-types/monthly-review.js +0 -417
  370. package/dist/scripts/news-types/monthly-review.js.map +0 -1
  371. package/dist/scripts/news-types/motions.d.ts +0 -214
  372. package/dist/scripts/news-types/motions.d.ts.map +0 -1
  373. package/dist/scripts/news-types/motions.js +0 -447
  374. package/dist/scripts/news-types/motions.js.map +0 -1
  375. package/dist/scripts/news-types/propositions.d.ts +0 -204
  376. package/dist/scripts/news-types/propositions.d.ts.map +0 -1
  377. package/dist/scripts/news-types/propositions.js +0 -401
  378. package/dist/scripts/news-types/propositions.js.map +0 -1
  379. package/dist/scripts/news-types/week-ahead.d.ts +0 -231
  380. package/dist/scripts/news-types/week-ahead.d.ts.map +0 -1
  381. package/dist/scripts/news-types/week-ahead.js +0 -441
  382. package/dist/scripts/news-types/week-ahead.js.map +0 -1
  383. package/dist/scripts/news-types/weekly-review/analysis.d.ts +0 -47
  384. package/dist/scripts/news-types/weekly-review/analysis.d.ts.map +0 -1
  385. package/dist/scripts/news-types/weekly-review/analysis.js +0 -276
  386. package/dist/scripts/news-types/weekly-review/analysis.js.map +0 -1
  387. package/dist/scripts/news-types/weekly-review/data-loader.d.ts +0 -51
  388. package/dist/scripts/news-types/weekly-review/data-loader.d.ts.map +0 -1
  389. package/dist/scripts/news-types/weekly-review/data-loader.js +0 -298
  390. package/dist/scripts/news-types/weekly-review/data-loader.js.map +0 -1
  391. package/dist/scripts/news-types/weekly-review/generator.d.ts +0 -18
  392. package/dist/scripts/news-types/weekly-review/generator.d.ts.map +0 -1
  393. package/dist/scripts/news-types/weekly-review/generator.js +0 -284
  394. package/dist/scripts/news-types/weekly-review/generator.js.map +0 -1
  395. package/dist/scripts/news-types/weekly-review/index.d.ts +0 -20
  396. package/dist/scripts/news-types/weekly-review/index.d.ts.map +0 -1
  397. package/dist/scripts/news-types/weekly-review/index.js +0 -23
  398. package/dist/scripts/news-types/weekly-review/index.js.map +0 -1
  399. package/dist/scripts/news-types/weekly-review/types.d.ts +0 -72
  400. package/dist/scripts/news-types/weekly-review/types.d.ts.map +0 -1
  401. package/dist/scripts/news-types/weekly-review/types.js +0 -20
  402. package/dist/scripts/news-types/weekly-review/types.js.map +0 -1
  403. package/dist/scripts/news-types/weekly-review/validation.d.ts +0 -10
  404. package/dist/scripts/news-types/weekly-review/validation.d.ts.map +0 -1
  405. package/dist/scripts/news-types/weekly-review/validation.js +0 -95
  406. package/dist/scripts/news-types/weekly-review/validation.js.map +0 -1
  407. package/dist/scripts/news-types/weekly-review.d.ts +0 -15
  408. package/dist/scripts/news-types/weekly-review.d.ts.map +0 -1
  409. package/dist/scripts/news-types/weekly-review.js +0 -14
  410. package/dist/scripts/news-types/weekly-review.js.map +0 -1
  411. package/dist/scripts/party-variants.d.ts +0 -23
  412. package/dist/scripts/party-variants.d.ts.map +0 -1
  413. package/dist/scripts/party-variants.js +0 -50
  414. package/dist/scripts/party-variants.js.map +0 -1
  415. package/dist/scripts/pipeline/index.d.ts +0 -19
  416. package/dist/scripts/pipeline/index.d.ts.map +0 -1
  417. package/dist/scripts/pipeline/index.js +0 -17
  418. package/dist/scripts/pipeline/index.js.map +0 -1
  419. package/dist/scripts/pipeline/orchestrator.d.ts +0 -56
  420. package/dist/scripts/pipeline/orchestrator.d.ts.map +0 -1
  421. package/dist/scripts/pipeline/orchestrator.js +0 -147
  422. package/dist/scripts/pipeline/orchestrator.js.map +0 -1
  423. package/dist/scripts/pipeline/types.d.ts +0 -117
  424. package/dist/scripts/pipeline/types.d.ts.map +0 -1
  425. package/dist/scripts/pipeline/types.js +0 -13
  426. package/dist/scripts/pipeline/types.js.map +0 -1
  427. package/dist/scripts/pipeline/validation.d.ts +0 -66
  428. package/dist/scripts/pipeline/validation.d.ts.map +0 -1
  429. package/dist/scripts/pipeline/validation.js +0 -129
  430. package/dist/scripts/pipeline/validation.js.map +0 -1
  431. package/dist/scripts/populate-analysis-data.d.ts +0 -41
  432. package/dist/scripts/populate-analysis-data.d.ts.map +0 -1
  433. package/dist/scripts/populate-analysis-data.js +0 -255
  434. package/dist/scripts/populate-analysis-data.js.map +0 -1
  435. package/dist/scripts/pre-article-analysis/data-downloader.d.ts +0 -80
  436. package/dist/scripts/pre-article-analysis/data-downloader.d.ts.map +0 -1
  437. package/dist/scripts/pre-article-analysis/data-downloader.js +0 -230
  438. package/dist/scripts/pre-article-analysis/data-downloader.js.map +0 -1
  439. package/dist/scripts/pre-article-analysis/data-persistence.d.ts +0 -141
  440. package/dist/scripts/pre-article-analysis/data-persistence.d.ts.map +0 -1
  441. package/dist/scripts/pre-article-analysis/data-persistence.js +0 -345
  442. package/dist/scripts/pre-article-analysis/data-persistence.js.map +0 -1
  443. package/dist/scripts/pre-article-analysis/markdown-serializer.d.ts +0 -158
  444. package/dist/scripts/pre-article-analysis/markdown-serializer.d.ts.map +0 -1
  445. package/dist/scripts/pre-article-analysis/markdown-serializer.js +0 -648
  446. package/dist/scripts/pre-article-analysis/markdown-serializer.js.map +0 -1
  447. package/dist/scripts/pre-article-analysis/pdf-converter.d.ts +0 -58
  448. package/dist/scripts/pre-article-analysis/pdf-converter.d.ts.map +0 -1
  449. package/dist/scripts/pre-article-analysis/pdf-converter.js +0 -142
  450. package/dist/scripts/pre-article-analysis/pdf-converter.js.map +0 -1
  451. package/dist/scripts/pre-article-analysis.d.ts +0 -42
  452. package/dist/scripts/pre-article-analysis.d.ts.map +0 -1
  453. package/dist/scripts/pre-article-analysis.js +0 -642
  454. package/dist/scripts/pre-article-analysis.js.map +0 -1
  455. package/dist/scripts/scb-client.d.ts +0 -104
  456. package/dist/scripts/scb-client.d.ts.map +0 -1
  457. package/dist/scripts/scb-client.js +0 -286
  458. package/dist/scripts/scb-client.js.map +0 -1
  459. package/dist/scripts/scb-context.d.ts +0 -88
  460. package/dist/scripts/scb-context.d.ts.map +0 -1
  461. package/dist/scripts/scb-context.js +0 -307
  462. package/dist/scripts/scb-context.js.map +0 -1
  463. package/dist/scripts/shared/version.d.ts +0 -9
  464. package/dist/scripts/shared/version.d.ts.map +0 -1
  465. package/dist/scripts/shared/version.js +0 -28
  466. package/dist/scripts/shared/version.js.map +0 -1
  467. package/dist/scripts/statistical-claims-detector.d.ts +0 -119
  468. package/dist/scripts/statistical-claims-detector.d.ts.map +0 -1
  469. package/dist/scripts/statistical-claims-detector.js +0 -391
  470. package/dist/scripts/statistical-claims-detector.js.map +0 -1
  471. package/dist/scripts/sync-cia-schemas.d.ts +0 -52
  472. package/dist/scripts/sync-cia-schemas.d.ts.map +0 -1
  473. package/dist/scripts/sync-cia-schemas.js +0 -195
  474. package/dist/scripts/sync-cia-schemas.js.map +0 -1
  475. package/dist/scripts/translation-dictionary.d.ts +0 -45
  476. package/dist/scripts/translation-dictionary.d.ts.map +0 -1
  477. package/dist/scripts/translation-dictionary.js +0 -3642
  478. package/dist/scripts/translation-dictionary.js.map +0 -1
  479. package/dist/scripts/types/article.d.ts +0 -392
  480. package/dist/scripts/types/article.d.ts.map +0 -1
  481. package/dist/scripts/types/article.js +0 -6
  482. package/dist/scripts/types/article.js.map +0 -1
  483. package/dist/scripts/types/content.d.ts +0 -167
  484. package/dist/scripts/types/content.d.ts.map +0 -1
  485. package/dist/scripts/types/content.js +0 -6
  486. package/dist/scripts/types/content.js.map +0 -1
  487. package/dist/scripts/types/editorial.d.ts +0 -17
  488. package/dist/scripts/types/editorial.d.ts.map +0 -1
  489. package/dist/scripts/types/editorial.js +0 -6
  490. package/dist/scripts/types/editorial.js.map +0 -1
  491. package/dist/scripts/types/language.d.ts +0 -7
  492. package/dist/scripts/types/language.d.ts.map +0 -1
  493. package/dist/scripts/types/language.js +0 -6
  494. package/dist/scripts/types/language.js.map +0 -1
  495. package/dist/scripts/types/mcp.d.ts +0 -117
  496. package/dist/scripts/types/mcp.d.ts.map +0 -1
  497. package/dist/scripts/types/mcp.js +0 -6
  498. package/dist/scripts/types/mcp.js.map +0 -1
  499. package/dist/scripts/types/party.d.ts +0 -9
  500. package/dist/scripts/types/party.d.ts.map +0 -1
  501. package/dist/scripts/types/party.js +0 -6
  502. package/dist/scripts/types/party.js.map +0 -1
  503. package/dist/scripts/types/validation.d.ts +0 -136
  504. package/dist/scripts/types/validation.d.ts.map +0 -1
  505. package/dist/scripts/types/validation.js +0 -6
  506. package/dist/scripts/types/validation.js.map +0 -1
  507. package/dist/scripts/types/workflow.d.ts +0 -78
  508. package/dist/scripts/types/workflow.d.ts.map +0 -1
  509. package/dist/scripts/types/workflow.js +0 -6
  510. package/dist/scripts/types/workflow.js.map +0 -1
  511. package/dist/scripts/update-stats-from-cia.d.ts +0 -44
  512. package/dist/scripts/update-stats-from-cia.d.ts.map +0 -1
  513. package/dist/scripts/update-stats-from-cia.js +0 -310
  514. package/dist/scripts/update-stats-from-cia.js.map +0 -1
  515. package/dist/scripts/validate-against-cia-schemas.d.ts +0 -126
  516. package/dist/scripts/validate-against-cia-schemas.d.ts.map +0 -1
  517. package/dist/scripts/validate-against-cia-schemas.js +0 -299
  518. package/dist/scripts/validate-against-cia-schemas.js.map +0 -1
  519. package/dist/scripts/validate-cross-references.d.ts +0 -49
  520. package/dist/scripts/validate-cross-references.d.ts.map +0 -1
  521. package/dist/scripts/validate-cross-references.js +0 -183
  522. package/dist/scripts/validate-cross-references.js.map +0 -1
  523. package/dist/scripts/validate-file-ownership.d.ts +0 -68
  524. package/dist/scripts/validate-file-ownership.d.ts.map +0 -1
  525. package/dist/scripts/validate-file-ownership.js +0 -135
  526. package/dist/scripts/validate-file-ownership.js.map +0 -1
  527. package/dist/scripts/validate-news-translations.d.ts +0 -27
  528. package/dist/scripts/validate-news-translations.d.ts.map +0 -1
  529. package/dist/scripts/validate-news-translations.js +0 -258
  530. package/dist/scripts/validate-news-translations.js.map +0 -1
  531. package/dist/scripts/validate-translations.d.ts +0 -162
  532. package/dist/scripts/validate-translations.d.ts.map +0 -1
  533. package/dist/scripts/validate-translations.js +0 -378
  534. package/dist/scripts/validate-translations.js.map +0 -1
  535. package/dist/scripts/workflow-state-coordinator.d.ts +0 -354
  536. package/dist/scripts/workflow-state-coordinator.d.ts.map +0 -1
  537. package/dist/scripts/workflow-state-coordinator.js +0 -876
  538. package/dist/scripts/workflow-state-coordinator.js.map +0 -1
  539. package/dist/scripts/world-bank-client.d.ts +0 -122
  540. package/dist/scripts/world-bank-client.d.ts.map +0 -1
  541. package/dist/scripts/world-bank-client.js +0 -192
  542. package/dist/scripts/world-bank-client.js.map +0 -1
  543. package/dist/scripts/world-bank-context.d.ts +0 -88
  544. package/dist/scripts/world-bank-context.d.ts.map +0 -1
  545. package/dist/scripts/world-bank-context.js +0 -331
  546. package/dist/scripts/world-bank-context.js.map +0 -1
@@ -1,298 +0,0 @@
1
- /**
2
- * @module news-types/weekly-review/data-loader
3
- * @description Data loading and processing utilities for weekly-review articles.
4
- * Handles CIA context loading, CSV parsing, document full-text enrichment,
5
- * and speech attachment.
6
- *
7
- * @author Hack23 AB
8
- * @license Apache-2.0
9
- */
10
- import { readFileSync, existsSync } from 'fs';
11
- import { join, dirname } from 'path';
12
- import { fileURLToPath } from 'url';
13
- import Papa from 'papaparse';
14
- import { isPersonProfileText, } from '../../data-transformers.js';
15
- /** Current Riksdag parties (2022 election onwards). */
16
- const RIKSDAG_PARTIES = new Set(['M', 'SD', 'KD', 'L', 'C', 'S', 'V', 'MP']);
17
- export function formatDateForSlug(date = new Date()) {
18
- return date.toISOString().split('T')[0] ?? '';
19
- }
20
- /**
21
- * Resolve the repo data directory path.
22
- * Works both in Node.js ESM and from compiled paths.
23
- */
24
- export function repoDataDir() {
25
- try {
26
- const __dirname = dirname(fileURLToPath(import.meta.url));
27
- // From scripts/news-types/weekly-review/ → up three levels to repo root → data/
28
- return join(__dirname, '..', '..', '..', 'data');
29
- }
30
- catch {
31
- return join(process.cwd(), 'data');
32
- }
33
- }
34
- /**
35
- * Resolve the cia-data directory path (repo root/cia-data).
36
- */
37
- function resolveCIADataDir() {
38
- try {
39
- const __dirname = dirname(fileURLToPath(import.meta.url));
40
- // From scripts/news-types/weekly-review/ → up three levels to repo root → cia-data/
41
- return join(__dirname, '..', '..', '..', 'cia-data');
42
- }
43
- catch {
44
- return join(process.cwd(), 'cia-data');
45
- }
46
- }
47
- /**
48
- * Parse a CSV file into an array of row objects keyed by header names.
49
- * Uses PapaParse for correct RFC 4180 handling (escaped quotes, embedded
50
- * commas, multi-line fields).
51
- * Returns an empty array if the file does not exist or cannot be parsed.
52
- */
53
- function parseCsvFile(filePath) {
54
- if (!existsSync(filePath)) {
55
- console.warn(`CIA data file not found: ${filePath}`);
56
- return [];
57
- }
58
- try {
59
- const text = readFileSync(filePath, 'utf-8');
60
- const result = Papa.parse(text, {
61
- header: true,
62
- skipEmptyLines: true,
63
- });
64
- if (result.errors.length > 0) {
65
- console.warn(`CSV parsing warnings for ${filePath}:`, result.errors);
66
- }
67
- return result.data;
68
- }
69
- catch (err) {
70
- console.error(`Failed to parse CSV ${filePath}:`, err);
71
- return [];
72
- }
73
- }
74
- // RIKSDAG_PARTIES is defined at the top of this file
75
- /**
76
- * Load CIA intelligence context from real CSV files in cia-data/.
77
- * Sources:
78
- * • cia-data/party/view_party_performance_metrics_sample.csv – win rates, documents, rebel rate
79
- * • cia-data/view_riksdagen_party_summary_sample.csv – current seat counts
80
- * • cia-data/party/distribution_coalition_alignment.csv – inter-party alignment
81
- * • cia-data/view_riksdagen_committee_decisions.csv – committee decision outcomes
82
- *
83
- * Returns a populated CIAContext or a minimal fallback when files are missing.
84
- */
85
- export function loadCIAContext() {
86
- const ciaDir = resolveCIADataDir();
87
- // ── 1. Seat counts from view_riksdagen_party_summary_sample.csv ──────────
88
- const seatMap = new Map();
89
- const partySummaryRows = parseCsvFile(join(ciaDir, 'view_riksdagen_party_summary_sample.csv'));
90
- for (const row of partySummaryRows) {
91
- const party = row['party']?.trim();
92
- if (party)
93
- seatMap.set(party, parseInt(row['total_active_parliament'] ?? '0', 10) || 0);
94
- }
95
- // ── 2. Party performance from view_party_performance_metrics_sample.csv ──
96
- const partyPerformance = [];
97
- const partyMetricsRows = parseCsvFile(join(ciaDir, 'party', 'view_party_performance_metrics_sample.csv'));
98
- for (const row of partyMetricsRows) {
99
- const id = row['party']?.trim() ?? '';
100
- if (!RIKSDAG_PARTIES.has(id))
101
- continue;
102
- const avgWinRate = parseFloat(row['avg_win_rate'] ?? '0') || 0;
103
- const avgRebelRate = parseFloat(row['avg_rebel_rate'] ?? '0') || 0;
104
- const docsLastYear = parseInt(row['documents_last_year'] ?? '0', 10) || 0;
105
- const ministers = parseInt(row['current_ministers'] ?? '0', 10) || 0;
106
- const perfLevel = row['performance_level']?.trim() ?? '';
107
- partyPerformance.push({
108
- id,
109
- partyName: row['party_name']?.trim() ?? id,
110
- metrics: {
111
- seats: seatMap.get(id) ?? 0,
112
- // avg_win_rate is 0-100 percentage (e.g. M=86.49, S=43.40)
113
- successRate: avgWinRate,
114
- motionsSubmitted: docsLastYear,
115
- motionsPassed: Math.round(avgWinRate * docsLastYear / 100),
116
- // avg_rebel_rate is a 0-1 decimal ratio (e.g. S=0.06 → 6% rebel rate)
117
- cohesionScore: Math.round((1 - avgRebelRate) * 100),
118
- },
119
- trends: {
120
- supportTrend: ministers > 0 ? 'stable' : (avgWinRate < 50 ? 'declining' : 'stable'),
121
- activityTrend: perfLevel === 'EXCELLENT' ? 'increasing' : perfLevel === 'BELOW_AVERAGE' ? 'declining' : 'stable',
122
- },
123
- });
124
- }
125
- // ── 3. Coalition stability from distribution_coalition_alignment.csv ─────
126
- const coalignRows = parseCsvFile(join(ciaDir, 'party', 'distribution_coalition_alignment.csv'));
127
- // Government bloc: M + KD + L + SD (SD provides confidence-and-supply support)
128
- const GOV_PARTIES = new Set(['M', 'KD', 'L', 'SD']);
129
- const govSeats = partyPerformance
130
- .filter(p => GOV_PARTIES.has(p.id))
131
- .reduce((s, p) => s + p.metrics.seats, 0);
132
- const totalSeats = 349;
133
- const majorityNeeded = Math.floor(totalSeats / 2) + 1; // 175
134
- const majorityMargin = govSeats - majorityNeeded;
135
- // Average alignment among the three formal government parties (M, KD, L)
136
- const coreGovPairs = new Set(['M-KD', 'M-L', 'KD-L', 'KD-M', 'L-M', 'L-KD']);
137
- let alignmentSum = 0;
138
- let alignmentCount = 0;
139
- for (const row of coalignRows) {
140
- const pair = `${row['party1']?.trim() ?? ''}-${row['party2']?.trim() ?? ''}`;
141
- if (coreGovPairs.has(pair)) {
142
- alignmentSum += parseFloat(row['alignment_rate'] ?? '0') || 0;
143
- alignmentCount++;
144
- }
145
- }
146
- const stabilityScore = alignmentCount > 0
147
- ? Math.round((alignmentSum / alignmentCount) * 100)
148
- : 75;
149
- const riskLevel = majorityMargin <= 0 ? 'high' : majorityMargin <= 2 ? 'moderate' : 'low';
150
- const coalitionStability = {
151
- stabilityScore,
152
- riskLevel,
153
- // Base 20% defection probability, reduced 3% per seat of margin, minimum 5%
154
- defectionProbability: Math.max(5, Math.round(20 - majorityMargin * 3)),
155
- majorityMargin: Math.max(0, majorityMargin),
156
- };
157
- // ── 4. Voting patterns from coalition alignment (top 5 party pairs) ───────
158
- const votingPatterns = {
159
- keyIssues: coalignRows.slice(0, 5).map(row => ({
160
- topic: `${row['party1']?.trim() ?? ''}-${row['party2']?.trim() ?? ''} alignment`,
161
- coalitionAlignment: Math.round((parseFloat(row['alignment_rate'] ?? '0') || 0) * 100),
162
- oppositionAlignment: Math.round((1 - (parseFloat(row['alignment_rate'] ?? '0') || 0)) * 100),
163
- crossPartyVotes: parseInt(row['aligned_votes'] ?? '0', 10) || 0,
164
- })),
165
- };
166
- // ── 5. Motion denial rate from committee decision outcomes ────────────────
167
- let overallMotionDenialRate = 96; // historical baseline from CIA data
168
- const decisionsRows = parseCsvFile(join(ciaDir, 'view_riksdagen_committee_decisions.csv'));
169
- if (decisionsRows.length > 0) {
170
- const committeeWins = decisionsRows.filter(r => r['winner']?.trim().toLowerCase() === 'utskottet').length;
171
- overallMotionDenialRate = Math.round((committeeWins / decisionsRows.length) * 100);
172
- }
173
- console.log(` 📊 CIA CSV context: ${partyPerformance.length} parties, ` +
174
- `gov seats ${govSeats}/${totalSeats} (margin ${majorityMargin}), ` +
175
- `stability ${stabilityScore}/100, denial rate ${overallMotionDenialRate}%`);
176
- return { partyPerformance, coalitionStability, votingPatterns, overallMotionDenialRate };
177
- }
178
- /**
179
- * Enrich a flat list of documents with full text via get_dokument_innehall.
180
- * Mutates each document in place; never throws — failures are logged and skipped.
181
- */
182
- export async function enrichWithFullText(client, documents, mcpCalls, concurrency = 3) {
183
- console.log(` 📖 Enriching ${documents.length} documents with full text (concurrency ${concurrency})...`);
184
- let enriched = 0;
185
- for (let i = 0; i < documents.length; i += concurrency) {
186
- const batch = documents.slice(i, i + concurrency);
187
- await Promise.allSettled(batch.map(async (doc) => {
188
- const dokId = doc.dok_id
189
- ?? doc.dokumentnamn
190
- ?? doc.id;
191
- if (!dokId)
192
- return;
193
- try {
194
- const details = await client.fetchDocumentDetails(dokId, true);
195
- mcpCalls.push({ tool: 'get_dokument_innehall', result: details });
196
- // Merge full text fields into document.
197
- // NOTE: details['text'] from get_dokument_innehall is a raw database metadata
198
- // dump (IDs, dates, URLs), NOT human-readable prose — do not use as fullText.
199
- // Also: some documents return politician profile text (MP status like
200
- // "Tjänstgörande riksdagsledamot..." or "Avliden YYYY-MM-DD...") in their
201
- // notis/summary/fullText fields — discard these to prevent them from
202
- // appearing as article content.
203
- const sanitize = (s) => {
204
- const str = s ?? '';
205
- return isPersonProfileText(str) ? '' : str;
206
- };
207
- const d = doc;
208
- d['fullText'] = sanitize(details['fullText'])
209
- || sanitize(details['summary'])
210
- || sanitize(details['notis'])
211
- || '';
212
- d['fullContent'] = details['html'] ?? '';
213
- if (!d['summary'] && details['summary'])
214
- d['summary'] = sanitize(details['summary']);
215
- if (!d['notis'] && details['notis'])
216
- d['notis'] = sanitize(details['notis']);
217
- d['contentFetched'] = true;
218
- enriched++;
219
- }
220
- catch (err) {
221
- console.error(` ⚠ Failed to fetch full text for ${dokId}:`, err.message);
222
- }
223
- }));
224
- // Small delay between batches to avoid rate limiting
225
- if (i + concurrency < documents.length) {
226
- await new Promise(r => setTimeout(r, 300));
227
- }
228
- }
229
- console.log(` ✅ Enriched ${enriched}/${documents.length} documents with full text`);
230
- }
231
- /**
232
- * Attach related speeches to documents that share the same dokId.
233
- */
234
- export function attachSpeechesToDocuments(documents, speeches) {
235
- if (speeches.length === 0)
236
- return;
237
- // Build a loose index: dok_id → speeches
238
- const speechIndex = new Map();
239
- for (const s of speeches) {
240
- const ref = String(s['intressent_id'] ?? s['dok_id'] ?? s['rel_dok_id'] ?? '');
241
- if (!ref)
242
- continue;
243
- if (!speechIndex.has(ref))
244
- speechIndex.set(ref, []);
245
- speechIndex.get(ref).push({
246
- talare: s['talare'],
247
- parti: s['parti'],
248
- text: s['anforande_text']?.slice(0, 300),
249
- anforande_nummer: s['anforande_nummer'],
250
- });
251
- }
252
- for (const doc of documents) {
253
- const dokId = doc.dok_id ?? '';
254
- const related = speechIndex.get(dokId);
255
- if (related && related.length > 0) {
256
- doc.speeches = related;
257
- }
258
- }
259
- }
260
- /**
261
- * Normalize CIAContext so defectionProbability is in [0, 1].
262
- *
263
- * risk-analysis.ts multiplies it by 100, so out-of-range values can
264
- * explode scores. Expected input formats:
265
- * - (0, 1] — already a proper probability fraction; kept as-is.
266
- * Note: exactly 1.0 is treated as 100% (not as 1% whole-percent).
267
- * - (1, ∞) — treated as a whole-percent (loadCIAContext returns min 5,
268
- * e.g. 50 means 50% → normalized to 0.5); clamped to 1.
269
- * - Non-finite or ≤ 0 — coerced to 0 (no defection risk).
270
- */
271
- export function normalizedCIAContext(ctx) {
272
- const defProb = ctx.coalitionStability?.defectionProbability;
273
- if (typeof defProb !== 'number')
274
- return ctx;
275
- let normalized;
276
- if (!Number.isFinite(defProb) || defProb <= 0) {
277
- // Non-finite or non-positive: no defection risk.
278
- normalized = 0;
279
- }
280
- else if (defProb <= 1) {
281
- // Already a fraction in (0, 1]: keep as-is (1.0 = 100% probability).
282
- normalized = defProb;
283
- }
284
- else {
285
- // Whole-percent value (e.g. loadCIAContext min 5): convert to fraction and clamp.
286
- normalized = Math.min(1, defProb / 100);
287
- }
288
- if (normalized === defProb)
289
- return ctx;
290
- return {
291
- ...ctx,
292
- coalitionStability: {
293
- ...ctx.coalitionStability,
294
- defectionProbability: normalized,
295
- },
296
- };
297
- }
298
- //# sourceMappingURL=data-loader.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"data-loader.js","sourceRoot":"","sources":["../../../../scripts/news-types/weekly-review/data-loader.ts"],"names":[],"mappings":"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"}
@@ -1,18 +0,0 @@
1
- /**
2
- * @module news-types/weekly-review/generator
3
- * @description Main generateWeeklyReview function and title generation helper.
4
- * Orchestrates the full data pipeline from MCP API calls to final HTML output.
5
- *
6
- * @author Hack23 AB
7
- * @license Apache-2.0
8
- */
9
- import type { GenerationResult } from '../../types/article.js';
10
- import type { GenerationOptions } from './types.js';
11
- export declare function generateWeeklyReview(options?: GenerationOptions): Promise<GenerationResult>;
12
- /**
13
- * Build visualization sections (SWOT, dashboard, economic) for weekly review articles.
14
- */
15
- /**
16
- * Validate weekly review article structure
17
- */
18
- //# sourceMappingURL=generator.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../../../scripts/news-types/weekly-review/generator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAaH,OAAO,KAAK,EAAqC,gBAAgB,EAAiB,MAAM,wBAAwB,CAAC;AAEjH,OAAO,KAAK,EAAE,iBAAiB,EAA0B,MAAM,YAAY,CAAC;AAa5E,wBAAsB,oBAAoB,CAAC,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA8NrG;AAoED;;GAEG;AACH;;GAEG"}
@@ -1,284 +0,0 @@
1
- /**
2
- * @module news-types/weekly-review/generator
3
- * @description Main generateWeeklyReview function and title generation helper.
4
- * Orchestrates the full data pipeline from MCP API calls to final HTML output.
5
- *
6
- * @author Hack23 AB
7
- * @license Apache-2.0
8
- */
9
- import { MCPClient } from '../../mcp-client.js';
10
- import { generateArticleContent, extractWatchPoints, generateMetadata, calculateReadTime, generateSources, } from '../../data-transformers.js';
11
- import { generateArticleHTML } from '../../article-template.js';
12
- import { getCurrentRiksmote } from '../motions.js';
13
- import { REQUIRED_TOOLS } from './types.js';
14
- import { loadCIAContext, enrichWithFullText, attachSpeechesToDocuments, formatDateForSlug } from './data-loader.js';
15
- import { analyzeCoalitionStress, calculateWeeklyActivityMetrics, generateCoalitionDynamicsSection, generateWeeklyActivitySection, } from './analysis.js';
16
- import { generateCiaOverviewSection } from '../../data-transformers/content-generators/cia-overview-section.js';
17
- import { generateDynamicTitle, getAnalysisEnrichment } from '../../generate-news-enhanced/helpers.js';
18
- import { buildArticleVisualizationSections } from '../../generate-news-enhanced/generators.js';
19
- export async function generateWeeklyReview(options = {}) {
20
- const { languages = ['en', 'sv'], lookbackDays = 7, writeArticle = null } = options;
21
- console.log('📊 Generating Weekly Review article (full-document analysis pipeline)...');
22
- const mcpCalls = [];
23
- try {
24
- const client = new MCPClient();
25
- const today = new Date();
26
- const startDate = new Date(today);
27
- startDate.setDate(startDate.getDate() - lookbackDays);
28
- const fromStr = formatDateForSlug(startDate);
29
- const toStr = formatDateForSlug(today);
30
- console.log(` 🔄 Step 1 — Searching documents ${fromStr} → ${toStr}...`);
31
- // ── Step 1: search_dokument to discover IDs and types ──────────────────
32
- const allDocs = await client.searchDocuments({
33
- from_date: fromStr,
34
- to_date: toStr,
35
- limit: 200,
36
- });
37
- mcpCalls.push({ tool: 'search_dokument', result: allDocs });
38
- const filterRecent = (docs) => docs.filter(d => {
39
- const date = d.datum ?? d.publicerad ?? '';
40
- return date >= fromStr && date <= toStr;
41
- });
42
- // ── Step 2: type-specific fetchers for richer metadata (non-fatal) ─────
43
- console.log(' 🔄 Step 2 — Fetching typed metadata (reports, propositions, motions)...');
44
- const rm = getCurrentRiksmote(today);
45
- const [reports, propositions, motions] = await Promise.all([
46
- Promise.resolve()
47
- .then(() => client.fetchCommitteeReports(50, rm))
48
- .catch((err) => { console.error('Failed to fetch committee reports:', err); return []; }),
49
- Promise.resolve()
50
- .then(() => client.fetchPropositions(50, rm))
51
- .catch((err) => { console.error('Failed to fetch propositions:', err); return []; }),
52
- Promise.resolve()
53
- .then(() => client.fetchMotions(50, rm))
54
- .catch((err) => { console.error('Failed to fetch motions:', err); return []; }),
55
- ]);
56
- const recentReports = filterRecent(reports);
57
- const recentPropositions = filterRecent(propositions);
58
- const recentMotions = filterRecent(motions);
59
- for (const d of recentReports) {
60
- if (!d.doktyp)
61
- d.doktyp = 'bet';
62
- }
63
- for (const d of recentPropositions) {
64
- if (!d.doktyp)
65
- d.doktyp = 'prop';
66
- }
67
- for (const d of recentMotions) {
68
- if (!d.doktyp)
69
- d.doktyp = 'mot';
70
- }
71
- mcpCalls.push({ tool: 'get_betankanden', result: recentReports });
72
- mcpCalls.push({ tool: 'get_propositioner', result: recentPropositions });
73
- mcpCalls.push({ tool: 'get_motioner', result: recentMotions });
74
- // Merge: typed docs (with dok_id) are highest quality; supplement with
75
- // real documents from general search (those that have both dok_id and doktyp).
76
- const typedDocs = [...recentReports, ...recentPropositions, ...recentMotions];
77
- const typedDocIds = new Set(typedDocs.flatMap(d => {
78
- const id = d.dok_id;
79
- return id ? [id] : [];
80
- }));
81
- const searchExtras = allDocs.filter(d => {
82
- const id = d.dok_id;
83
- const type = d.doktyp;
84
- return id && type && !typedDocIds.has(id);
85
- });
86
- // Use typed + extras when available; fall back to raw search results (test mocks / edge cases)
87
- const documents = typedDocs.length > 0 || searchExtras.length > 0
88
- ? [...typedDocs, ...searchExtras]
89
- : allDocs;
90
- console.log(` 📊 Found ${documents.length} documents (${recentReports.length} reports, ${recentPropositions.length} propositions, ${recentMotions.length} motions)`);
91
- if (documents.length === 0) {
92
- console.log(' ℹ️ No documents found for the past week, skipping');
93
- return { success: true, files: 0, mcpCalls };
94
- }
95
- // ── Step 3: load each document completely via get_dokument_innehall ────
96
- console.log(' 🔄 Step 3 — Loading full document content...');
97
- await enrichWithFullText(client, documents, mcpCalls, 3);
98
- // ── Step 4: fetch speeches from the period ─────────────────────────────
99
- console.log(' 🔄 Step 4 — Fetching speeches from the period...');
100
- const speeches = await Promise.resolve()
101
- .then(() => client.searchSpeeches({ rm, from: fromStr, to: toStr, limit: 100 }))
102
- .catch((err) => { console.error('Failed to fetch speeches:', err); return []; });
103
- mcpCalls.push({ tool: 'search_anforanden', result: speeches });
104
- attachSpeechesToDocuments(documents, speeches);
105
- console.log(` 🗣 Found ${speeches.length} speeches`);
106
- // ── Step 5: load CIA intelligence context from static data ─────────────
107
- console.log(' 🔄 Step 5 — Loading CIA intelligence context...');
108
- const ciaContext = loadCIAContext();
109
- console.log(` 🧠 CIA context: ${ciaContext.partyPerformance.length} parties, coalition stability ${ciaContext.coalitionStability.stabilityScore}/100, motion denial rate ${ciaContext.overallMotionDenialRate}%`);
110
- // ── Step 6: fetch voting records for coalition stress analysis ─────────
111
- console.log(' 🔄 Step 6 — Fetching voting records for coalition stress analysis...');
112
- let votingRecords = [];
113
- try {
114
- // search_voteringar does not support date params; use rm+limit then filter by datum.
115
- // Derive the riksmöte(s) from both ends of the date range using the shared
116
- // getCurrentRiksmote utility (Sep boundary: month >= 8 → new session).
117
- const startRm = getCurrentRiksmote(startDate);
118
- const endRm = getCurrentRiksmote(today);
119
- const rmValues = startRm === endRm ? [startRm] : [startRm, endRm];
120
- const allVotesArrays = await Promise.all(rmValues.map(rm => client.fetchVotingRecords({ rm, limit: 200 })));
121
- const allVotes = allVotesArrays.flat();
122
- // Post-query filter to the weekly window using the datum field.
123
- votingRecords = allVotes.filter(r => {
124
- const d = r.datum;
125
- if (typeof d !== 'string')
126
- return false;
127
- // Extract YYYY-MM-DD via regex to handle ISO timestamps and timezone suffixes
128
- // (e.g. '2026-02-10T10:00:00' or '2026-09-05+02:00').
129
- const match = /^\d{4}-\d{2}-\d{2}/.exec(d);
130
- if (!match)
131
- return false;
132
- const dateStr = match[0];
133
- return dateStr >= fromStr && dateStr <= toStr;
134
- });
135
- }
136
- catch (err) {
137
- console.error('Failed to fetch voting records:', err);
138
- }
139
- mcpCalls.push({ tool: 'search_voteringar', result: votingRecords });
140
- console.log(` 🗳 Found ${votingRecords.length} voting records`);
141
- // ── Compute coalition stress and week-over-week metrics ────────────────
142
- const coalitionStress = analyzeCoalitionStress(votingRecords, ciaContext);
143
- const weekMetrics = calculateWeeklyActivityMetrics(documents, speeches, votingRecords, ciaContext);
144
- console.log(` 📈 Coalition risk: ${coalitionStress.riskIndex.level} (${coalitionStress.riskIndex.score}/100), activity: ${weekMetrics.activityChange}`);
145
- // ── Generate articles ──────────────────────────────────────────────────
146
- const slug = `${formatDateForSlug(today)}-weekly-review`;
147
- const articles = [];
148
- const enrichment = await getAnalysisEnrichment();
149
- for (const lang of languages) {
150
- console.log(` 🌐 Generating ${lang.toUpperCase()} version...`);
151
- const content = generateArticleContent({ documents, ciaContext }, 'weekly-review', lang);
152
- const coalitionSection = generateCoalitionDynamicsSection(coalitionStress, lang);
153
- const weekOverWeekSection = generateWeeklyActivitySection(weekMetrics, lang);
154
- const fullContent = content + coalitionSection + weekOverWeekSection;
155
- const watchPoints = extractWatchPoints({ documents, ciaContext }, lang);
156
- const metadata = generateMetadata({ documents, ciaContext }, 'weekly-review', lang);
157
- const readTime = calculateReadTime(fullContent);
158
- const sources = generateSources([...REQUIRED_TOOLS]);
159
- const titles = getTitles(lang, documents.length);
160
- // Enrich English title/subtitle with content-based highlights
161
- const enriched = lang === 'en' ? generateDynamicTitle(titles.title, fullContent, documents.length) : titles;
162
- const ciaSection = generateCiaOverviewSection({ cia: ciaContext, lang });
163
- // Build additional visualization sections (SWOT, dashboard, economic)
164
- const extraSections = buildArticleVisualizationSections(documents, null, lang);
165
- const html = generateArticleHTML({
166
- slug: `${slug}-${lang}.html`,
167
- title: enriched.title,
168
- subtitle: enriched.subtitle,
169
- date: today.toISOString().split('T')[0] ?? '',
170
- type: 'retrospective',
171
- readTime,
172
- lang,
173
- content: fullContent,
174
- watchPoints,
175
- sources,
176
- keywords: metadata.keywords,
177
- topics: metadata.topics,
178
- tags: metadata.tags,
179
- sections: [ciaSection, ...extraSections],
180
- ...(enrichment ?? {}),
181
- });
182
- articles.push({
183
- lang,
184
- html,
185
- filename: `${slug}-${lang}.html`,
186
- slug: `${slug}-${lang}`
187
- });
188
- if (writeArticle) {
189
- await writeArticle(html, `${slug}-${lang}.html`);
190
- console.log(` ✅ ${lang.toUpperCase()} version generated`);
191
- }
192
- }
193
- return {
194
- success: true,
195
- files: languages.length,
196
- slug,
197
- articles,
198
- mcpCalls,
199
- crossReferences: {
200
- event: `${documents.length} documents over ${lookbackDays} days`,
201
- sources: ['search_dokument', 'get_dokument_innehall', 'search_anforanden', 'get_betankanden', 'get_propositioner', 'get_motioner', 'search_voteringar']
202
- }
203
- };
204
- }
205
- catch (error) {
206
- console.error('❌ Error generating Weekly Review:', error.message);
207
- return {
208
- success: false,
209
- error: error.message,
210
- mcpCalls
211
- };
212
- }
213
- }
214
- /**
215
- * Get language-specific titles
216
- */
217
- function getTitles(lang, documentCount) {
218
- const titles = {
219
- en: {
220
- title: `Weekly Review: Parliament in Retrospect`,
221
- subtitle: `Analysis of ${documentCount} key developments from the past week in Swedish politics`
222
- },
223
- sv: {
224
- title: `Veckans sammanfattning: Riksdagen i retrospektiv`,
225
- subtitle: `Analys av ${documentCount} viktiga händelser från den gångna veckan`
226
- },
227
- da: {
228
- title: `Ugentlig gennemgang: Parlamentet i tilbageblik`,
229
- subtitle: `Analyse af ${documentCount} vigtige begivenheder fra den forgangne uge`
230
- },
231
- no: {
232
- title: `Ukentlig gjennomgang: Stortinget i retrospekt`,
233
- subtitle: `Analyse av ${documentCount} viktige hendelser fra den siste uken`
234
- },
235
- fi: {
236
- title: `Viikkokatsaus: Eduskunta jälkikäteen`,
237
- subtitle: `Analyysi ${documentCount} tärkeästä tapahtumasta viime viikolta`
238
- },
239
- de: {
240
- title: `Wochenrückblick: Parlament in Rückschau`,
241
- subtitle: `Analyse von ${documentCount} wichtigen Entwicklungen der vergangenen Woche`
242
- },
243
- fr: {
244
- title: `Revue hebdomadaire : Le Parlement en rétrospective`,
245
- subtitle: `Analyse de ${documentCount} développements clés de la semaine écoulée`
246
- },
247
- es: {
248
- title: `Revisión semanal: El Parlamento en retrospectiva`,
249
- subtitle: `Análisis de ${documentCount} desarrollos clave de la semana pasada`
250
- },
251
- nl: {
252
- title: `Wekelijkse terugblik: Parlement in retrospectief`,
253
- subtitle: `Analyse van ${documentCount} belangrijke ontwikkelingen van de afgelopen week`
254
- },
255
- ar: {
256
- title: `المراجعة الأسبوعية: البرلمان في استعراض`,
257
- subtitle: `تحليل ${documentCount} تطورات رئيسية من الأسبوع الماضي`
258
- },
259
- he: {
260
- title: `סקירה שבועית: הפרלמנט בראי`,
261
- subtitle: `ניתוח ${documentCount} התפתחויות מרכזיות מהשבוע שעבר`
262
- },
263
- ja: {
264
- title: `週間レビュー:議会の振り返り`,
265
- subtitle: `先週の${documentCount}件の主要な動向の分析`
266
- },
267
- ko: {
268
- title: `주간 리뷰: 의회 회고`,
269
- subtitle: `지난 주 ${documentCount}건의 주요 동향 분석`
270
- },
271
- zh: {
272
- title: `每周回顾:议会回顾`,
273
- subtitle: `过去一周${documentCount}项重要发展的分析`
274
- }
275
- };
276
- return titles[lang] || titles.en;
277
- }
278
- /**
279
- * Build visualization sections (SWOT, dashboard, economic) for weekly review articles.
280
- */
281
- /**
282
- * Validate weekly review article structure
283
- */
284
- //# sourceMappingURL=generator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../scripts/news-types/weekly-review/generator.ts"],"names":[],"mappings":"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"}