riksdagsmonitor 0.8.12 → 0.8.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (779) hide show
  1. package/dist/lib/cia/dashboard-init.d.ts +26 -0
  2. package/dist/lib/cia/dashboard-init.d.ts.map +1 -0
  3. package/dist/lib/cia/dashboard-init.js +108 -0
  4. package/dist/lib/cia/dashboard-init.js.map +1 -0
  5. package/dist/lib/cia/data-loader.d.ts +408 -0
  6. package/dist/lib/cia/data-loader.d.ts.map +1 -0
  7. package/dist/lib/cia/data-loader.js +867 -0
  8. package/dist/lib/cia/data-loader.js.map +1 -0
  9. package/dist/lib/cia/election-predictions.d.ts +78 -0
  10. package/dist/lib/cia/election-predictions.d.ts.map +1 -0
  11. package/dist/lib/cia/election-predictions.js +259 -0
  12. package/dist/lib/cia/election-predictions.js.map +1 -0
  13. package/dist/lib/cia/i18n-translations.d.ts +111 -0
  14. package/dist/lib/cia/i18n-translations.d.ts.map +1 -0
  15. package/dist/lib/cia/i18n-translations.js +619 -0
  16. package/dist/lib/cia/i18n-translations.js.map +1 -0
  17. package/dist/lib/cia/visualizations.d.ts +64 -0
  18. package/dist/lib/cia/visualizations.d.ts.map +1 -0
  19. package/dist/lib/cia/visualizations.js +662 -0
  20. package/dist/lib/cia/visualizations.js.map +1 -0
  21. package/dist/lib/dashboards/anomaly-detection.d.ts +44 -0
  22. package/dist/lib/dashboards/anomaly-detection.d.ts.map +1 -0
  23. package/dist/lib/dashboards/anomaly-detection.js +1017 -0
  24. package/dist/lib/dashboards/anomaly-detection.js.map +1 -0
  25. package/dist/lib/dashboards/coalition-dashboard.d.ts +36 -0
  26. package/dist/lib/dashboards/coalition-dashboard.d.ts.map +1 -0
  27. package/dist/lib/dashboards/coalition-dashboard.js +629 -0
  28. package/dist/lib/dashboards/coalition-dashboard.js.map +1 -0
  29. package/dist/lib/dashboards/coalition-loader.d.ts +43 -0
  30. package/dist/lib/dashboards/coalition-loader.d.ts.map +1 -0
  31. package/dist/lib/dashboards/coalition-loader.js +665 -0
  32. package/dist/lib/dashboards/coalition-loader.js.map +1 -0
  33. package/dist/lib/dashboards/committees-dashboard.d.ts +23 -0
  34. package/dist/lib/dashboards/committees-dashboard.d.ts.map +1 -0
  35. package/dist/lib/dashboards/committees-dashboard.js +886 -0
  36. package/dist/lib/dashboards/committees-dashboard.js.map +1 -0
  37. package/dist/lib/dashboards/election-cycle.d.ts +62 -0
  38. package/dist/lib/dashboards/election-cycle.d.ts.map +1 -0
  39. package/dist/lib/dashboards/election-cycle.js +484 -0
  40. package/dist/lib/dashboards/election-cycle.js.map +1 -0
  41. package/dist/lib/dashboards/ministry-dashboard.d.ts +46 -0
  42. package/dist/lib/dashboards/ministry-dashboard.d.ts.map +1 -0
  43. package/dist/lib/dashboards/ministry-dashboard.js +1114 -0
  44. package/dist/lib/dashboards/ministry-dashboard.js.map +1 -0
  45. package/dist/lib/dashboards/party-dashboard.d.ts +56 -0
  46. package/dist/lib/dashboards/party-dashboard.d.ts.map +1 -0
  47. package/dist/lib/dashboards/party-dashboard.js +981 -0
  48. package/dist/lib/dashboards/party-dashboard.js.map +1 -0
  49. package/dist/lib/dashboards/politician-dashboard.d.ts +41 -0
  50. package/dist/lib/dashboards/politician-dashboard.d.ts.map +1 -0
  51. package/dist/lib/dashboards/politician-dashboard.js +611 -0
  52. package/dist/lib/dashboards/politician-dashboard.js.map +1 -0
  53. package/dist/lib/dashboards/pre-election.d.ts +64 -0
  54. package/dist/lib/dashboards/pre-election.d.ts.map +1 -0
  55. package/dist/lib/dashboards/pre-election.js +604 -0
  56. package/dist/lib/dashboards/pre-election.js.map +1 -0
  57. package/dist/lib/dashboards/risk-dashboard.d.ts +37 -0
  58. package/dist/lib/dashboards/risk-dashboard.d.ts.map +1 -0
  59. package/dist/lib/dashboards/risk-dashboard.js +863 -0
  60. package/dist/lib/dashboards/risk-dashboard.js.map +1 -0
  61. package/dist/lib/dashboards/seasonal-patterns.d.ts +24 -0
  62. package/dist/lib/dashboards/seasonal-patterns.d.ts.map +1 -0
  63. package/dist/lib/dashboards/seasonal-patterns.js +535 -0
  64. package/dist/lib/dashboards/seasonal-patterns.js.map +1 -0
  65. package/dist/lib/dashboards/stats-loader.d.ts +35 -0
  66. package/dist/lib/dashboards/stats-loader.d.ts.map +1 -0
  67. package/dist/lib/dashboards/stats-loader.js +145 -0
  68. package/dist/lib/dashboards/stats-loader.js.map +1 -0
  69. package/dist/lib/shared/chart-factory.d.ts.map +1 -0
  70. package/dist/lib/shared/chart-factory.js.map +1 -0
  71. package/dist/lib/shared/data-loader.d.ts.map +1 -0
  72. package/dist/lib/shared/data-loader.js.map +1 -0
  73. package/dist/lib/shared/dom-utils.d.ts.map +1 -0
  74. package/dist/lib/shared/dom-utils.js.map +1 -0
  75. package/dist/lib/shared/error-boundary.d.ts.map +1 -0
  76. package/dist/lib/shared/error-boundary.js.map +1 -0
  77. package/dist/lib/shared/fallback-ui.d.ts.map +1 -0
  78. package/dist/lib/shared/fallback-ui.js.map +1 -0
  79. package/dist/lib/shared/index.d.ts.map +1 -0
  80. package/dist/lib/shared/index.js.map +1 -0
  81. package/dist/lib/shared/logger.d.ts.map +1 -0
  82. package/dist/lib/shared/logger.js.map +1 -0
  83. package/dist/lib/shared/register-globals.d.ts +14 -0
  84. package/dist/lib/shared/register-globals.d.ts.map +1 -0
  85. package/dist/lib/shared/register-globals.js +21 -0
  86. package/dist/lib/shared/register-globals.js.map +1 -0
  87. package/dist/lib/shared/theme.d.ts.map +1 -0
  88. package/dist/lib/shared/theme.js.map +1 -0
  89. package/dist/lib/shared/types.d.ts.map +1 -0
  90. package/dist/lib/shared/types.js.map +1 -0
  91. package/dist/lib/ui/back-to-top.d.ts +13 -0
  92. package/dist/lib/ui/back-to-top.d.ts.map +1 -0
  93. package/dist/lib/ui/back-to-top.js +48 -0
  94. package/dist/lib/ui/back-to-top.js.map +1 -0
  95. package/dist/scripts/ai-analysis/coalition-detector.d.ts +28 -0
  96. package/dist/scripts/ai-analysis/coalition-detector.d.ts.map +1 -0
  97. package/dist/scripts/ai-analysis/coalition-detector.js +242 -0
  98. package/dist/scripts/ai-analysis/coalition-detector.js.map +1 -0
  99. package/dist/scripts/ai-analysis/dashboard-analyzer.d.ts +73 -0
  100. package/dist/scripts/ai-analysis/dashboard-analyzer.d.ts.map +1 -0
  101. package/dist/scripts/ai-analysis/dashboard-analyzer.js +511 -0
  102. package/dist/scripts/ai-analysis/dashboard-analyzer.js.map +1 -0
  103. package/dist/scripts/ai-analysis/document-analyzer.d.ts +196 -0
  104. package/dist/scripts/ai-analysis/document-analyzer.d.ts.map +1 -0
  105. package/dist/scripts/ai-analysis/document-analyzer.js +1001 -0
  106. package/dist/scripts/ai-analysis/document-analyzer.js.map +1 -0
  107. package/dist/scripts/ai-analysis/domains/index.d.ts +15 -0
  108. package/dist/scripts/ai-analysis/domains/index.d.ts.map +1 -0
  109. package/dist/scripts/ai-analysis/domains/index.js +494 -0
  110. package/dist/scripts/ai-analysis/domains/index.js.map +1 -0
  111. package/dist/scripts/ai-analysis/helpers.d.ts +43 -0
  112. package/dist/scripts/ai-analysis/helpers.d.ts.map +1 -0
  113. package/dist/scripts/ai-analysis/helpers.js +79 -0
  114. package/dist/scripts/ai-analysis/helpers.js.map +1 -0
  115. package/dist/scripts/ai-analysis/index.d.ts +15 -0
  116. package/dist/scripts/ai-analysis/index.d.ts.map +1 -0
  117. package/dist/scripts/ai-analysis/index.js +14 -0
  118. package/dist/scripts/ai-analysis/index.js.map +1 -0
  119. package/dist/scripts/ai-analysis/pipeline.d.ts +41 -0
  120. package/dist/scripts/ai-analysis/pipeline.d.ts.map +1 -0
  121. package/dist/scripts/ai-analysis/pipeline.js +208 -0
  122. package/dist/scripts/ai-analysis/pipeline.js.map +1 -0
  123. package/dist/scripts/ai-analysis/political-significance.d.ts +63 -0
  124. package/dist/scripts/ai-analysis/political-significance.d.ts.map +1 -0
  125. package/dist/scripts/ai-analysis/political-significance.js +227 -0
  126. package/dist/scripts/ai-analysis/political-significance.js.map +1 -0
  127. package/dist/scripts/ai-analysis/quality-assessor.d.ts +104 -0
  128. package/dist/scripts/ai-analysis/quality-assessor.d.ts.map +1 -0
  129. package/dist/scripts/ai-analysis/quality-assessor.js +554 -0
  130. package/dist/scripts/ai-analysis/quality-assessor.js.map +1 -0
  131. package/dist/scripts/ai-analysis/swot/index.d.ts +56 -0
  132. package/dist/scripts/ai-analysis/swot/index.d.ts.map +1 -0
  133. package/dist/scripts/ai-analysis/swot/index.js +360 -0
  134. package/dist/scripts/ai-analysis/swot/index.js.map +1 -0
  135. package/dist/scripts/ai-analysis/swot/placeholders.d.ts +30 -0
  136. package/dist/scripts/ai-analysis/swot/placeholders.d.ts.map +1 -0
  137. package/dist/scripts/ai-analysis/swot/placeholders.js +381 -0
  138. package/dist/scripts/ai-analysis/swot/placeholders.js.map +1 -0
  139. package/dist/scripts/ai-analysis/types.d.ts +333 -0
  140. package/dist/scripts/ai-analysis/types.d.ts.map +1 -0
  141. package/dist/scripts/ai-analysis/types.js +19 -0
  142. package/dist/scripts/ai-analysis/types.js.map +1 -0
  143. package/dist/scripts/ai-analysis/visualisation/index.d.ts +15 -0
  144. package/dist/scripts/ai-analysis/visualisation/index.d.ts.map +1 -0
  145. package/dist/scripts/ai-analysis/visualisation/index.js +179 -0
  146. package/dist/scripts/ai-analysis/visualisation/index.js.map +1 -0
  147. package/dist/scripts/analysis-framework/cross-reference.d.ts +35 -0
  148. package/dist/scripts/analysis-framework/cross-reference.d.ts.map +1 -0
  149. package/dist/scripts/analysis-framework/cross-reference.js +290 -0
  150. package/dist/scripts/analysis-framework/cross-reference.js.map +1 -0
  151. package/dist/scripts/analysis-framework/index.d.ts +79 -0
  152. package/dist/scripts/analysis-framework/index.d.ts.map +1 -0
  153. package/dist/scripts/analysis-framework/index.js +133 -0
  154. package/dist/scripts/analysis-framework/index.js.map +1 -0
  155. package/dist/scripts/analysis-framework/lenses/citizen.d.ts +29 -0
  156. package/dist/scripts/analysis-framework/lenses/citizen.d.ts.map +1 -0
  157. package/dist/scripts/analysis-framework/lenses/citizen.js +220 -0
  158. package/dist/scripts/analysis-framework/lenses/citizen.js.map +1 -0
  159. package/dist/scripts/analysis-framework/lenses/economic.d.ts +29 -0
  160. package/dist/scripts/analysis-framework/lenses/economic.d.ts.map +1 -0
  161. package/dist/scripts/analysis-framework/lenses/economic.js +227 -0
  162. package/dist/scripts/analysis-framework/lenses/economic.js.map +1 -0
  163. package/dist/scripts/analysis-framework/lenses/government.d.ts +32 -0
  164. package/dist/scripts/analysis-framework/lenses/government.d.ts.map +1 -0
  165. package/dist/scripts/analysis-framework/lenses/government.js +265 -0
  166. package/dist/scripts/analysis-framework/lenses/government.js.map +1 -0
  167. package/dist/scripts/analysis-framework/lenses/international.d.ts +29 -0
  168. package/dist/scripts/analysis-framework/lenses/international.d.ts.map +1 -0
  169. package/dist/scripts/analysis-framework/lenses/international.js +248 -0
  170. package/dist/scripts/analysis-framework/lenses/international.js.map +1 -0
  171. package/dist/scripts/analysis-framework/lenses/media.d.ts +29 -0
  172. package/dist/scripts/analysis-framework/lenses/media.d.ts.map +1 -0
  173. package/dist/scripts/analysis-framework/lenses/media.js +211 -0
  174. package/dist/scripts/analysis-framework/lenses/media.js.map +1 -0
  175. package/dist/scripts/analysis-framework/lenses/opposition.d.ts +29 -0
  176. package/dist/scripts/analysis-framework/lenses/opposition.d.ts.map +1 -0
  177. package/dist/scripts/analysis-framework/lenses/opposition.js +234 -0
  178. package/dist/scripts/analysis-framework/lenses/opposition.js.map +1 -0
  179. package/dist/scripts/analysis-framework/methodology-types.d.ts +309 -0
  180. package/dist/scripts/analysis-framework/methodology-types.d.ts.map +1 -0
  181. package/dist/scripts/analysis-framework/methodology-types.js +38 -0
  182. package/dist/scripts/analysis-framework/methodology-types.js.map +1 -0
  183. package/dist/scripts/analysis-framework/political-classification.d.ts +58 -0
  184. package/dist/scripts/analysis-framework/political-classification.d.ts.map +1 -0
  185. package/dist/scripts/analysis-framework/political-classification.js +414 -0
  186. package/dist/scripts/analysis-framework/political-classification.js.map +1 -0
  187. package/dist/scripts/analysis-framework/political-risk-assessment.d.ts +74 -0
  188. package/dist/scripts/analysis-framework/political-risk-assessment.d.ts.map +1 -0
  189. package/dist/scripts/analysis-framework/political-risk-assessment.js +656 -0
  190. package/dist/scripts/analysis-framework/political-risk-assessment.js.map +1 -0
  191. package/dist/scripts/analysis-framework/political-threat-analysis.d.ts +65 -0
  192. package/dist/scripts/analysis-framework/political-threat-analysis.d.ts.map +1 -0
  193. package/dist/scripts/analysis-framework/political-threat-analysis.js +553 -0
  194. package/dist/scripts/analysis-framework/political-threat-analysis.js.map +1 -0
  195. package/dist/scripts/analysis-framework/significance-scorer.d.ts +62 -0
  196. package/dist/scripts/analysis-framework/significance-scorer.d.ts.map +1 -0
  197. package/dist/scripts/analysis-framework/significance-scorer.js +196 -0
  198. package/dist/scripts/analysis-framework/significance-scorer.js.map +1 -0
  199. package/dist/scripts/analysis-framework/types.d.ts +138 -0
  200. package/dist/scripts/analysis-framework/types.d.ts.map +1 -0
  201. package/dist/scripts/analysis-framework/types.js +12 -0
  202. package/dist/scripts/analysis-framework/types.js.map +1 -0
  203. package/dist/scripts/analysis-reader.d.ts +240 -0
  204. package/dist/scripts/analysis-reader.d.ts.map +1 -0
  205. package/dist/scripts/analysis-reader.js +495 -0
  206. package/dist/scripts/analysis-reader.js.map +1 -0
  207. package/dist/scripts/article-quality-enhancer.d.ts +148 -0
  208. package/dist/scripts/article-quality-enhancer.d.ts.map +1 -0
  209. package/dist/scripts/article-quality-enhancer.js +430 -0
  210. package/dist/scripts/article-quality-enhancer.js.map +1 -0
  211. package/dist/scripts/article-template/constants.d.ts +104 -0
  212. package/dist/scripts/article-template/constants.d.ts.map +1 -0
  213. package/dist/scripts/article-template/constants.js +225 -0
  214. package/dist/scripts/article-template/constants.js.map +1 -0
  215. package/dist/scripts/article-template/helpers.d.ts +83 -0
  216. package/dist/scripts/article-template/helpers.d.ts.map +1 -0
  217. package/dist/scripts/article-template/helpers.js +236 -0
  218. package/dist/scripts/article-template/helpers.js.map +1 -0
  219. package/dist/scripts/article-template/index.d.ts +39 -0
  220. package/dist/scripts/article-template/index.d.ts.map +1 -0
  221. package/dist/scripts/article-template/index.js +37 -0
  222. package/dist/scripts/article-template/index.js.map +1 -0
  223. package/dist/scripts/article-template/registry.d.ts +64 -0
  224. package/dist/scripts/article-template/registry.d.ts.map +1 -0
  225. package/dist/scripts/article-template/registry.js +405 -0
  226. package/dist/scripts/article-template/registry.js.map +1 -0
  227. package/dist/scripts/article-template/template.d.ts +18 -0
  228. package/dist/scripts/article-template/template.d.ts.map +1 -0
  229. package/dist/scripts/article-template/template.js +359 -0
  230. package/dist/scripts/article-template/template.js.map +1 -0
  231. package/dist/scripts/article-template/types.d.ts +90 -0
  232. package/dist/scripts/article-template/types.d.ts.map +1 -0
  233. package/dist/scripts/article-template/types.js +96 -0
  234. package/dist/scripts/article-template/types.js.map +1 -0
  235. package/dist/scripts/article-template.d.ts +18 -0
  236. package/dist/scripts/article-template.d.ts.map +1 -0
  237. package/dist/scripts/article-template.js +18 -0
  238. package/dist/scripts/article-template.js.map +1 -0
  239. package/dist/scripts/catalog-downloaded-data.d.ts +66 -0
  240. package/dist/scripts/catalog-downloaded-data.d.ts.map +1 -0
  241. package/dist/scripts/catalog-downloaded-data.js +239 -0
  242. package/dist/scripts/catalog-downloaded-data.js.map +1 -0
  243. package/dist/scripts/check-cia-schema-updates.d.ts +186 -0
  244. package/dist/scripts/check-cia-schema-updates.d.ts.map +1 -0
  245. package/dist/scripts/check-cia-schema-updates.js +363 -0
  246. package/dist/scripts/check-cia-schema-updates.js.map +1 -0
  247. package/dist/scripts/data-transformers/calendar.d.ts +16 -0
  248. package/dist/scripts/data-transformers/calendar.d.ts.map +1 -0
  249. package/dist/scripts/data-transformers/calendar.js +137 -0
  250. package/dist/scripts/data-transformers/calendar.js.map +1 -0
  251. package/dist/scripts/data-transformers/constants/committee-names.d.ts +15 -0
  252. package/dist/scripts/data-transformers/constants/committee-names.d.ts.map +1 -0
  253. package/dist/scripts/data-transformers/constants/committee-names.js +30 -0
  254. package/dist/scripts/data-transformers/constants/committee-names.js.map +1 -0
  255. package/dist/scripts/data-transformers/constants/content-labels-part1.d.ts +11 -0
  256. package/dist/scripts/data-transformers/constants/content-labels-part1.d.ts.map +1 -0
  257. package/dist/scripts/data-transformers/constants/content-labels-part1.js +900 -0
  258. package/dist/scripts/data-transformers/constants/content-labels-part1.js.map +1 -0
  259. package/dist/scripts/data-transformers/constants/content-labels-part2.d.ts +11 -0
  260. package/dist/scripts/data-transformers/constants/content-labels-part2.d.ts.map +1 -0
  261. package/dist/scripts/data-transformers/constants/content-labels-part2.js +900 -0
  262. package/dist/scripts/data-transformers/constants/content-labels-part2.js.map +1 -0
  263. package/dist/scripts/data-transformers/constants/content-labels.d.ts +13 -0
  264. package/dist/scripts/data-transformers/constants/content-labels.d.ts.map +1 -0
  265. package/dist/scripts/data-transformers/constants/content-labels.js +18 -0
  266. package/dist/scripts/data-transformers/constants/content-labels.js.map +1 -0
  267. package/dist/scripts/data-transformers/constants/index.d.ts +15 -0
  268. package/dist/scripts/data-transformers/constants/index.d.ts.map +1 -0
  269. package/dist/scripts/data-transformers/constants/index.js +15 -0
  270. package/dist/scripts/data-transformers/constants/index.js.map +1 -0
  271. package/dist/scripts/data-transformers/constants/locale-map.d.ts +13 -0
  272. package/dist/scripts/data-transformers/constants/locale-map.d.ts.map +1 -0
  273. package/dist/scripts/data-transformers/constants/locale-map.js +17 -0
  274. package/dist/scripts/data-transformers/constants/locale-map.js.map +1 -0
  275. package/dist/scripts/data-transformers/constants.d.ts +14 -0
  276. package/dist/scripts/data-transformers/constants.d.ts.map +1 -0
  277. package/dist/scripts/data-transformers/constants.js +14 -0
  278. package/dist/scripts/data-transformers/constants.js.map +1 -0
  279. package/dist/scripts/data-transformers/content-generators/ai-mindmap-analyzer.d.ts +64 -0
  280. package/dist/scripts/data-transformers/content-generators/ai-mindmap-analyzer.d.ts.map +1 -0
  281. package/dist/scripts/data-transformers/content-generators/ai-mindmap-analyzer.js +805 -0
  282. package/dist/scripts/data-transformers/content-generators/ai-mindmap-analyzer.js.map +1 -0
  283. package/dist/scripts/data-transformers/content-generators/ai-swot-analyzer.d.ts +89 -0
  284. package/dist/scripts/data-transformers/content-generators/ai-swot-analyzer.d.ts.map +1 -0
  285. package/dist/scripts/data-transformers/content-generators/ai-swot-analyzer.js +667 -0
  286. package/dist/scripts/data-transformers/content-generators/ai-swot-analyzer.js.map +1 -0
  287. package/dist/scripts/data-transformers/content-generators/cia-overview-section.d.ts +50 -0
  288. package/dist/scripts/data-transformers/content-generators/cia-overview-section.d.ts.map +1 -0
  289. package/dist/scripts/data-transformers/content-generators/cia-overview-section.js +310 -0
  290. package/dist/scripts/data-transformers/content-generators/cia-overview-section.js.map +1 -0
  291. package/dist/scripts/data-transformers/content-generators/committee.d.ts +12 -0
  292. package/dist/scripts/data-transformers/content-generators/committee.d.ts.map +1 -0
  293. package/dist/scripts/data-transformers/content-generators/committee.js +247 -0
  294. package/dist/scripts/data-transformers/content-generators/committee.js.map +1 -0
  295. package/dist/scripts/data-transformers/content-generators/dashboard-section.d.ts +124 -0
  296. package/dist/scripts/data-transformers/content-generators/dashboard-section.d.ts.map +1 -0
  297. package/dist/scripts/data-transformers/content-generators/dashboard-section.js +564 -0
  298. package/dist/scripts/data-transformers/content-generators/dashboard-section.js.map +1 -0
  299. package/dist/scripts/data-transformers/content-generators/economic-dashboard-section.d.ts +82 -0
  300. package/dist/scripts/data-transformers/content-generators/economic-dashboard-section.d.ts.map +1 -0
  301. package/dist/scripts/data-transformers/content-generators/economic-dashboard-section.js +321 -0
  302. package/dist/scripts/data-transformers/content-generators/economic-dashboard-section.js.map +1 -0
  303. package/dist/scripts/data-transformers/content-generators/generic.d.ts +12 -0
  304. package/dist/scripts/data-transformers/content-generators/generic.d.ts.map +1 -0
  305. package/dist/scripts/data-transformers/content-generators/generic.js +295 -0
  306. package/dist/scripts/data-transformers/content-generators/generic.js.map +1 -0
  307. package/dist/scripts/data-transformers/content-generators/index.d.ts +56 -0
  308. package/dist/scripts/data-transformers/content-generators/index.d.ts.map +1 -0
  309. package/dist/scripts/data-transformers/content-generators/index.js +45 -0
  310. package/dist/scripts/data-transformers/content-generators/index.js.map +1 -0
  311. package/dist/scripts/data-transformers/content-generators/interpellations.d.ts +12 -0
  312. package/dist/scripts/data-transformers/content-generators/interpellations.d.ts.map +1 -0
  313. package/dist/scripts/data-transformers/content-generators/interpellations.js +124 -0
  314. package/dist/scripts/data-transformers/content-generators/interpellations.js.map +1 -0
  315. package/dist/scripts/data-transformers/content-generators/mindmap-section.d.ts +137 -0
  316. package/dist/scripts/data-transformers/content-generators/mindmap-section.d.ts.map +1 -0
  317. package/dist/scripts/data-transformers/content-generators/mindmap-section.js +286 -0
  318. package/dist/scripts/data-transformers/content-generators/mindmap-section.js.map +1 -0
  319. package/dist/scripts/data-transformers/content-generators/month-ahead.d.ts +17 -0
  320. package/dist/scripts/data-transformers/content-generators/month-ahead.d.ts.map +1 -0
  321. package/dist/scripts/data-transformers/content-generators/month-ahead.js +212 -0
  322. package/dist/scripts/data-transformers/content-generators/month-ahead.js.map +1 -0
  323. package/dist/scripts/data-transformers/content-generators/monthly-review.d.ts +17 -0
  324. package/dist/scripts/data-transformers/content-generators/monthly-review.d.ts.map +1 -0
  325. package/dist/scripts/data-transformers/content-generators/monthly-review.js +173 -0
  326. package/dist/scripts/data-transformers/content-generators/monthly-review.js.map +1 -0
  327. package/dist/scripts/data-transformers/content-generators/motions.d.ts +12 -0
  328. package/dist/scripts/data-transformers/content-generators/motions.d.ts.map +1 -0
  329. package/dist/scripts/data-transformers/content-generators/motions.js +158 -0
  330. package/dist/scripts/data-transformers/content-generators/motions.js.map +1 -0
  331. package/dist/scripts/data-transformers/content-generators/newsworthiness.d.ts +52 -0
  332. package/dist/scripts/data-transformers/content-generators/newsworthiness.d.ts.map +1 -0
  333. package/dist/scripts/data-transformers/content-generators/newsworthiness.js +244 -0
  334. package/dist/scripts/data-transformers/content-generators/newsworthiness.js.map +1 -0
  335. package/dist/scripts/data-transformers/content-generators/propositions.d.ts +12 -0
  336. package/dist/scripts/data-transformers/content-generators/propositions.d.ts.map +1 -0
  337. package/dist/scripts/data-transformers/content-generators/propositions.js +263 -0
  338. package/dist/scripts/data-transformers/content-generators/propositions.js.map +1 -0
  339. package/dist/scripts/data-transformers/content-generators/sankey-section.d.ts +92 -0
  340. package/dist/scripts/data-transformers/content-generators/sankey-section.d.ts.map +1 -0
  341. package/dist/scripts/data-transformers/content-generators/sankey-section.js +257 -0
  342. package/dist/scripts/data-transformers/content-generators/sankey-section.js.map +1 -0
  343. package/dist/scripts/data-transformers/content-generators/shared.d.ts +81 -0
  344. package/dist/scripts/data-transformers/content-generators/shared.d.ts.map +1 -0
  345. package/dist/scripts/data-transformers/content-generators/shared.js +913 -0
  346. package/dist/scripts/data-transformers/content-generators/shared.js.map +1 -0
  347. package/dist/scripts/data-transformers/content-generators/stakeholder-swot-section.d.ts +83 -0
  348. package/dist/scripts/data-transformers/content-generators/stakeholder-swot-section.d.ts.map +1 -0
  349. package/dist/scripts/data-transformers/content-generators/stakeholder-swot-section.js +219 -0
  350. package/dist/scripts/data-transformers/content-generators/stakeholder-swot-section.js.map +1 -0
  351. package/dist/scripts/data-transformers/content-generators/swot-section.d.ts +50 -0
  352. package/dist/scripts/data-transformers/content-generators/swot-section.d.ts.map +1 -0
  353. package/dist/scripts/data-transformers/content-generators/swot-section.js +177 -0
  354. package/dist/scripts/data-transformers/content-generators/swot-section.js.map +1 -0
  355. package/dist/scripts/data-transformers/content-generators/week-ahead.d.ts +12 -0
  356. package/dist/scripts/data-transformers/content-generators/week-ahead.d.ts.map +1 -0
  357. package/dist/scripts/data-transformers/content-generators/week-ahead.js +332 -0
  358. package/dist/scripts/data-transformers/content-generators/week-ahead.js.map +1 -0
  359. package/dist/scripts/data-transformers/content-generators.d.ts +15 -0
  360. package/dist/scripts/data-transformers/content-generators.d.ts.map +1 -0
  361. package/dist/scripts/data-transformers/content-generators.js +14 -0
  362. package/dist/scripts/data-transformers/content-generators.js.map +1 -0
  363. package/dist/scripts/data-transformers/document-analysis.d.ts +58 -0
  364. package/dist/scripts/data-transformers/document-analysis.d.ts.map +1 -0
  365. package/dist/scripts/data-transformers/document-analysis.js +396 -0
  366. package/dist/scripts/data-transformers/document-analysis.js.map +1 -0
  367. package/dist/scripts/data-transformers/helpers.d.ts +144 -0
  368. package/dist/scripts/data-transformers/helpers.d.ts.map +1 -0
  369. package/dist/scripts/data-transformers/helpers.js +408 -0
  370. package/dist/scripts/data-transformers/helpers.js.map +1 -0
  371. package/dist/scripts/data-transformers/index.d.ts +45 -0
  372. package/dist/scripts/data-transformers/index.d.ts.map +1 -0
  373. package/dist/scripts/data-transformers/index.js +66 -0
  374. package/dist/scripts/data-transformers/index.js.map +1 -0
  375. package/dist/scripts/data-transformers/metadata.d.ts +42 -0
  376. package/dist/scripts/data-transformers/metadata.d.ts.map +1 -0
  377. package/dist/scripts/data-transformers/metadata.js +385 -0
  378. package/dist/scripts/data-transformers/metadata.js.map +1 -0
  379. package/dist/scripts/data-transformers/policy-analysis.d.ts +105 -0
  380. package/dist/scripts/data-transformers/policy-analysis.d.ts.map +1 -0
  381. package/dist/scripts/data-transformers/policy-analysis.js +686 -0
  382. package/dist/scripts/data-transformers/policy-analysis.js.map +1 -0
  383. package/dist/scripts/data-transformers/risk-analysis.d.ts +104 -0
  384. package/dist/scripts/data-transformers/risk-analysis.d.ts.map +1 -0
  385. package/dist/scripts/data-transformers/risk-analysis.js +279 -0
  386. package/dist/scripts/data-transformers/risk-analysis.js.map +1 -0
  387. package/dist/scripts/data-transformers/types.d.ts +260 -0
  388. package/dist/scripts/data-transformers/types.d.ts.map +1 -0
  389. package/dist/scripts/data-transformers/types.js +11 -0
  390. package/dist/scripts/data-transformers/types.js.map +1 -0
  391. package/dist/scripts/data-transformers.d.ts +23 -0
  392. package/dist/scripts/data-transformers.d.ts.map +1 -0
  393. package/dist/scripts/data-transformers.js +35 -0
  394. package/dist/scripts/data-transformers.js.map +1 -0
  395. package/dist/scripts/deep-inspection/index.d.ts +55 -0
  396. package/dist/scripts/deep-inspection/index.d.ts.map +1 -0
  397. package/dist/scripts/deep-inspection/index.js +66 -0
  398. package/dist/scripts/deep-inspection/index.js.map +1 -0
  399. package/dist/scripts/detect-swedish-leakage.d.ts +69 -0
  400. package/dist/scripts/detect-swedish-leakage.d.ts.map +1 -0
  401. package/dist/scripts/detect-swedish-leakage.js +417 -0
  402. package/dist/scripts/detect-swedish-leakage.js.map +1 -0
  403. package/dist/scripts/editorial-framework.d.ts +121 -0
  404. package/dist/scripts/editorial-framework.d.ts.map +1 -0
  405. package/dist/scripts/editorial-framework.js +364 -0
  406. package/dist/scripts/editorial-framework.js.map +1 -0
  407. package/dist/scripts/editorial-pillars.d.ts +43 -0
  408. package/dist/scripts/editorial-pillars.d.ts.map +1 -0
  409. package/dist/scripts/editorial-pillars.js +215 -0
  410. package/dist/scripts/editorial-pillars.js.map +1 -0
  411. package/dist/scripts/extract-news-metadata.d.ts +12 -0
  412. package/dist/scripts/extract-news-metadata.d.ts.map +1 -0
  413. package/dist/scripts/extract-news-metadata.js +107 -0
  414. package/dist/scripts/extract-news-metadata.js.map +1 -0
  415. package/dist/scripts/extract-vocabulary.d.ts +15 -0
  416. package/dist/scripts/extract-vocabulary.d.ts.map +1 -0
  417. package/dist/scripts/extract-vocabulary.js +255 -0
  418. package/dist/scripts/extract-vocabulary.js.map +1 -0
  419. package/dist/scripts/fix-article-navigation.d.ts +37 -0
  420. package/dist/scripts/fix-article-navigation.d.ts.map +1 -0
  421. package/dist/scripts/fix-article-navigation.js +198 -0
  422. package/dist/scripts/fix-article-navigation.js.map +1 -0
  423. package/dist/scripts/fix-keywords-localization.d.ts +18 -0
  424. package/dist/scripts/fix-keywords-localization.d.ts.map +1 -0
  425. package/dist/scripts/fix-keywords-localization.js +270 -0
  426. package/dist/scripts/fix-keywords-localization.js.map +1 -0
  427. package/dist/scripts/fix-old-articles-branding.d.ts +17 -0
  428. package/dist/scripts/fix-old-articles-branding.d.ts.map +1 -0
  429. package/dist/scripts/fix-old-articles-branding.js +229 -0
  430. package/dist/scripts/fix-old-articles-branding.js.map +1 -0
  431. package/dist/scripts/generate-news-backport.d.ts +16 -0
  432. package/dist/scripts/generate-news-backport.d.ts.map +1 -0
  433. package/dist/scripts/generate-news-backport.js +379 -0
  434. package/dist/scripts/generate-news-backport.js.map +1 -0
  435. package/dist/scripts/generate-news-enhanced/ai-analysis-pipeline.d.ts +124 -0
  436. package/dist/scripts/generate-news-enhanced/ai-analysis-pipeline.d.ts.map +1 -0
  437. package/dist/scripts/generate-news-enhanced/ai-analysis-pipeline.js +529 -0
  438. package/dist/scripts/generate-news-enhanced/ai-analysis-pipeline.js.map +1 -0
  439. package/dist/scripts/generate-news-enhanced/analysis-cache.d.ts +59 -0
  440. package/dist/scripts/generate-news-enhanced/analysis-cache.d.ts.map +1 -0
  441. package/dist/scripts/generate-news-enhanced/analysis-cache.js +116 -0
  442. package/dist/scripts/generate-news-enhanced/analysis-cache.js.map +1 -0
  443. package/dist/scripts/generate-news-enhanced/analysis-labels.d.ts +58 -0
  444. package/dist/scripts/generate-news-enhanced/analysis-labels.d.ts.map +1 -0
  445. package/dist/scripts/generate-news-enhanced/analysis-labels.js +144 -0
  446. package/dist/scripts/generate-news-enhanced/analysis-labels.js.map +1 -0
  447. package/dist/scripts/generate-news-enhanced/config.d.ts +57 -0
  448. package/dist/scripts/generate-news-enhanced/config.d.ts.map +1 -0
  449. package/dist/scripts/generate-news-enhanced/config.js +286 -0
  450. package/dist/scripts/generate-news-enhanced/config.js.map +1 -0
  451. package/dist/scripts/generate-news-enhanced/generators.d.ts +119 -0
  452. package/dist/scripts/generate-news-enhanced/generators.d.ts.map +1 -0
  453. package/dist/scripts/generate-news-enhanced/generators.js +2108 -0
  454. package/dist/scripts/generate-news-enhanced/generators.js.map +1 -0
  455. package/dist/scripts/generate-news-enhanced/helpers.d.ts +123 -0
  456. package/dist/scripts/generate-news-enhanced/helpers.d.ts.map +1 -0
  457. package/dist/scripts/generate-news-enhanced/helpers.js +438 -0
  458. package/dist/scripts/generate-news-enhanced/helpers.js.map +1 -0
  459. package/dist/scripts/generate-news-enhanced/index.d.ts +19 -0
  460. package/dist/scripts/generate-news-enhanced/index.d.ts.map +1 -0
  461. package/dist/scripts/generate-news-enhanced/index.js +221 -0
  462. package/dist/scripts/generate-news-enhanced/index.js.map +1 -0
  463. package/dist/scripts/generate-news-enhanced/swot-analyzer.d.ts +35 -0
  464. package/dist/scripts/generate-news-enhanced/swot-analyzer.d.ts.map +1 -0
  465. package/dist/scripts/generate-news-enhanced/swot-analyzer.js +1179 -0
  466. package/dist/scripts/generate-news-enhanced/swot-analyzer.js.map +1 -0
  467. package/dist/scripts/generate-news-enhanced/types.d.ts +34 -0
  468. package/dist/scripts/generate-news-enhanced/types.d.ts.map +1 -0
  469. package/dist/scripts/generate-news-enhanced/types.js +9 -0
  470. package/dist/scripts/generate-news-enhanced/types.js.map +1 -0
  471. package/dist/scripts/generate-news-enhanced.d.ts +25 -0
  472. package/dist/scripts/generate-news-enhanced.d.ts.map +1 -0
  473. package/dist/scripts/generate-news-enhanced.js +37 -0
  474. package/dist/scripts/generate-news-enhanced.js.map +1 -0
  475. package/dist/scripts/generate-news-indexes/constants.d.ts +20 -0
  476. package/dist/scripts/generate-news-indexes/constants.d.ts.map +1 -0
  477. package/dist/scripts/generate-news-indexes/constants.js +308 -0
  478. package/dist/scripts/generate-news-indexes/constants.js.map +1 -0
  479. package/dist/scripts/generate-news-indexes/helpers.d.ts +73 -0
  480. package/dist/scripts/generate-news-indexes/helpers.d.ts.map +1 -0
  481. package/dist/scripts/generate-news-indexes/helpers.js +352 -0
  482. package/dist/scripts/generate-news-indexes/helpers.js.map +1 -0
  483. package/dist/scripts/generate-news-indexes/index.d.ts +20 -0
  484. package/dist/scripts/generate-news-indexes/index.d.ts.map +1 -0
  485. package/dist/scripts/generate-news-indexes/index.js +75 -0
  486. package/dist/scripts/generate-news-indexes/index.js.map +1 -0
  487. package/dist/scripts/generate-news-indexes/template.d.ts +25 -0
  488. package/dist/scripts/generate-news-indexes/template.d.ts.map +1 -0
  489. package/dist/scripts/generate-news-indexes/template.js +644 -0
  490. package/dist/scripts/generate-news-indexes/template.js.map +1 -0
  491. package/dist/scripts/generate-news-indexes/types.d.ts +96 -0
  492. package/dist/scripts/generate-news-indexes/types.d.ts.map +1 -0
  493. package/dist/scripts/generate-news-indexes/types.js +9 -0
  494. package/dist/scripts/generate-news-indexes/types.js.map +1 -0
  495. package/dist/scripts/generate-news-indexes.d.ts +20 -0
  496. package/dist/scripts/generate-news-indexes.d.ts.map +1 -0
  497. package/dist/scripts/generate-news-indexes.js +19 -0
  498. package/dist/scripts/generate-news-indexes.js.map +1 -0
  499. package/dist/scripts/generate-rss.d.ts +48 -0
  500. package/dist/scripts/generate-rss.d.ts.map +1 -0
  501. package/dist/scripts/generate-rss.js +299 -0
  502. package/dist/scripts/generate-rss.js.map +1 -0
  503. package/dist/scripts/generate-sitemap-html.d.ts +79 -0
  504. package/dist/scripts/generate-sitemap-html.d.ts.map +1 -0
  505. package/dist/scripts/generate-sitemap-html.js +878 -0
  506. package/dist/scripts/generate-sitemap-html.js.map +1 -0
  507. package/dist/scripts/generate-sitemap.d.ts +23 -0
  508. package/dist/scripts/generate-sitemap.d.ts.map +1 -0
  509. package/dist/scripts/generate-sitemap.js +476 -0
  510. package/dist/scripts/generate-sitemap.js.map +1 -0
  511. package/dist/scripts/generate-types-from-cia-schemas.d.ts +176 -0
  512. package/dist/scripts/generate-types-from-cia-schemas.d.ts.map +1 -0
  513. package/dist/scripts/generate-types-from-cia-schemas.js +318 -0
  514. package/dist/scripts/generate-types-from-cia-schemas.js.map +1 -0
  515. package/dist/scripts/government-role-validator.d.ts +65 -0
  516. package/dist/scripts/government-role-validator.d.ts.map +1 -0
  517. package/dist/scripts/government-role-validator.js +217 -0
  518. package/dist/scripts/government-role-validator.js.map +1 -0
  519. package/dist/scripts/html-utils.d.ts +17 -0
  520. package/dist/scripts/html-utils.d.ts.map +1 -0
  521. package/dist/scripts/html-utils.js +29 -0
  522. package/dist/scripts/html-utils.js.map +1 -0
  523. package/dist/scripts/load-cia-stats.d.ts +89 -0
  524. package/dist/scripts/load-cia-stats.d.ts.map +1 -0
  525. package/dist/scripts/load-cia-stats.js +400 -0
  526. package/dist/scripts/load-cia-stats.js.map +1 -0
  527. package/dist/scripts/mcp-client/client.d.ts +73 -0
  528. package/dist/scripts/mcp-client/client.d.ts.map +1 -0
  529. package/dist/scripts/mcp-client/client.js +526 -0
  530. package/dist/scripts/mcp-client/client.js.map +1 -0
  531. package/dist/scripts/mcp-client/document-types.d.ts +23 -0
  532. package/dist/scripts/mcp-client/document-types.d.ts.map +1 -0
  533. package/dist/scripts/mcp-client/document-types.js +62 -0
  534. package/dist/scripts/mcp-client/document-types.js.map +1 -0
  535. package/dist/scripts/mcp-client/index.d.ts +34 -0
  536. package/dist/scripts/mcp-client/index.d.ts.map +1 -0
  537. package/dist/scripts/mcp-client/index.js +67 -0
  538. package/dist/scripts/mcp-client/index.js.map +1 -0
  539. package/dist/scripts/mcp-client/transport.d.ts +32 -0
  540. package/dist/scripts/mcp-client/transport.d.ts.map +1 -0
  541. package/dist/scripts/mcp-client/transport.js +102 -0
  542. package/dist/scripts/mcp-client/transport.js.map +1 -0
  543. package/dist/scripts/mcp-client.d.ts +18 -0
  544. package/dist/scripts/mcp-client.d.ts.map +1 -0
  545. package/dist/scripts/mcp-client.js +18 -0
  546. package/dist/scripts/mcp-client.js.map +1 -0
  547. package/dist/scripts/mcp-query-cli.d.ts +25 -0
  548. package/dist/scripts/mcp-query-cli.d.ts.map +1 -0
  549. package/dist/scripts/mcp-query-cli.js +66 -0
  550. package/dist/scripts/mcp-query-cli.js.map +1 -0
  551. package/dist/scripts/news-types/breaking-news.d.ts +178 -0
  552. package/dist/scripts/news-types/breaking-news.d.ts.map +1 -0
  553. package/dist/scripts/news-types/breaking-news.js +428 -0
  554. package/dist/scripts/news-types/breaking-news.js.map +1 -0
  555. package/dist/scripts/news-types/committee-reports.d.ts +212 -0
  556. package/dist/scripts/news-types/committee-reports.d.ts.map +1 -0
  557. package/dist/scripts/news-types/committee-reports.js +404 -0
  558. package/dist/scripts/news-types/committee-reports.js.map +1 -0
  559. package/dist/scripts/news-types/month-ahead.d.ts +71 -0
  560. package/dist/scripts/news-types/month-ahead.d.ts.map +1 -0
  561. package/dist/scripts/news-types/month-ahead.js +392 -0
  562. package/dist/scripts/news-types/month-ahead.js.map +1 -0
  563. package/dist/scripts/news-types/monthly-review.d.ts +61 -0
  564. package/dist/scripts/news-types/monthly-review.d.ts.map +1 -0
  565. package/dist/scripts/news-types/monthly-review.js +417 -0
  566. package/dist/scripts/news-types/monthly-review.js.map +1 -0
  567. package/dist/scripts/news-types/motions.d.ts +214 -0
  568. package/dist/scripts/news-types/motions.d.ts.map +1 -0
  569. package/dist/scripts/news-types/motions.js +447 -0
  570. package/dist/scripts/news-types/motions.js.map +1 -0
  571. package/dist/scripts/news-types/propositions.d.ts +204 -0
  572. package/dist/scripts/news-types/propositions.d.ts.map +1 -0
  573. package/dist/scripts/news-types/propositions.js +401 -0
  574. package/dist/scripts/news-types/propositions.js.map +1 -0
  575. package/dist/scripts/news-types/week-ahead.d.ts +231 -0
  576. package/dist/scripts/news-types/week-ahead.d.ts.map +1 -0
  577. package/dist/scripts/news-types/week-ahead.js +441 -0
  578. package/dist/scripts/news-types/week-ahead.js.map +1 -0
  579. package/dist/scripts/news-types/weekly-review/analysis.d.ts +47 -0
  580. package/dist/scripts/news-types/weekly-review/analysis.d.ts.map +1 -0
  581. package/dist/scripts/news-types/weekly-review/analysis.js +276 -0
  582. package/dist/scripts/news-types/weekly-review/analysis.js.map +1 -0
  583. package/dist/scripts/news-types/weekly-review/data-loader.d.ts +51 -0
  584. package/dist/scripts/news-types/weekly-review/data-loader.d.ts.map +1 -0
  585. package/dist/scripts/news-types/weekly-review/data-loader.js +298 -0
  586. package/dist/scripts/news-types/weekly-review/data-loader.js.map +1 -0
  587. package/dist/scripts/news-types/weekly-review/generator.d.ts +18 -0
  588. package/dist/scripts/news-types/weekly-review/generator.d.ts.map +1 -0
  589. package/dist/scripts/news-types/weekly-review/generator.js +284 -0
  590. package/dist/scripts/news-types/weekly-review/generator.js.map +1 -0
  591. package/dist/scripts/news-types/weekly-review/index.d.ts +20 -0
  592. package/dist/scripts/news-types/weekly-review/index.d.ts.map +1 -0
  593. package/dist/scripts/news-types/weekly-review/index.js +23 -0
  594. package/dist/scripts/news-types/weekly-review/index.js.map +1 -0
  595. package/dist/scripts/news-types/weekly-review/types.d.ts +72 -0
  596. package/dist/scripts/news-types/weekly-review/types.d.ts.map +1 -0
  597. package/dist/scripts/news-types/weekly-review/types.js +20 -0
  598. package/dist/scripts/news-types/weekly-review/types.js.map +1 -0
  599. package/dist/scripts/news-types/weekly-review/validation.d.ts +10 -0
  600. package/dist/scripts/news-types/weekly-review/validation.d.ts.map +1 -0
  601. package/dist/scripts/news-types/weekly-review/validation.js +95 -0
  602. package/dist/scripts/news-types/weekly-review/validation.js.map +1 -0
  603. package/dist/scripts/news-types/weekly-review.d.ts +15 -0
  604. package/dist/scripts/news-types/weekly-review.d.ts.map +1 -0
  605. package/dist/scripts/news-types/weekly-review.js +14 -0
  606. package/dist/scripts/news-types/weekly-review.js.map +1 -0
  607. package/dist/scripts/party-variants.d.ts +23 -0
  608. package/dist/scripts/party-variants.d.ts.map +1 -0
  609. package/dist/scripts/party-variants.js +50 -0
  610. package/dist/scripts/party-variants.js.map +1 -0
  611. package/dist/scripts/pipeline/index.d.ts +19 -0
  612. package/dist/scripts/pipeline/index.d.ts.map +1 -0
  613. package/dist/scripts/pipeline/index.js +17 -0
  614. package/dist/scripts/pipeline/index.js.map +1 -0
  615. package/dist/scripts/pipeline/orchestrator.d.ts +56 -0
  616. package/dist/scripts/pipeline/orchestrator.d.ts.map +1 -0
  617. package/dist/scripts/pipeline/orchestrator.js +147 -0
  618. package/dist/scripts/pipeline/orchestrator.js.map +1 -0
  619. package/dist/scripts/pipeline/types.d.ts +117 -0
  620. package/dist/scripts/pipeline/types.d.ts.map +1 -0
  621. package/dist/scripts/pipeline/types.js +13 -0
  622. package/dist/scripts/pipeline/types.js.map +1 -0
  623. package/dist/scripts/pipeline/validation.d.ts +66 -0
  624. package/dist/scripts/pipeline/validation.d.ts.map +1 -0
  625. package/dist/scripts/pipeline/validation.js +129 -0
  626. package/dist/scripts/pipeline/validation.js.map +1 -0
  627. package/dist/scripts/populate-analysis-data.d.ts +41 -0
  628. package/dist/scripts/populate-analysis-data.d.ts.map +1 -0
  629. package/dist/scripts/populate-analysis-data.js +255 -0
  630. package/dist/scripts/populate-analysis-data.js.map +1 -0
  631. package/dist/scripts/pre-article-analysis/data-downloader.d.ts +80 -0
  632. package/dist/scripts/pre-article-analysis/data-downloader.d.ts.map +1 -0
  633. package/dist/scripts/pre-article-analysis/data-downloader.js +230 -0
  634. package/dist/scripts/pre-article-analysis/data-downloader.js.map +1 -0
  635. package/dist/scripts/pre-article-analysis/data-persistence.d.ts +141 -0
  636. package/dist/scripts/pre-article-analysis/data-persistence.d.ts.map +1 -0
  637. package/dist/scripts/pre-article-analysis/data-persistence.js +345 -0
  638. package/dist/scripts/pre-article-analysis/data-persistence.js.map +1 -0
  639. package/dist/scripts/pre-article-analysis/markdown-serializer.d.ts +95 -0
  640. package/dist/scripts/pre-article-analysis/markdown-serializer.d.ts.map +1 -0
  641. package/dist/scripts/pre-article-analysis/markdown-serializer.js +648 -0
  642. package/dist/scripts/pre-article-analysis/markdown-serializer.js.map +1 -0
  643. package/dist/scripts/pre-article-analysis/pdf-converter.d.ts +58 -0
  644. package/dist/scripts/pre-article-analysis/pdf-converter.d.ts.map +1 -0
  645. package/dist/scripts/pre-article-analysis/pdf-converter.js +142 -0
  646. package/dist/scripts/pre-article-analysis/pdf-converter.js.map +1 -0
  647. package/dist/scripts/pre-article-analysis.d.ts +41 -0
  648. package/dist/scripts/pre-article-analysis.d.ts.map +1 -0
  649. package/dist/scripts/pre-article-analysis.js +578 -0
  650. package/dist/scripts/pre-article-analysis.js.map +1 -0
  651. package/dist/scripts/scb-client.d.ts +104 -0
  652. package/dist/scripts/scb-client.d.ts.map +1 -0
  653. package/dist/scripts/scb-client.js +286 -0
  654. package/dist/scripts/scb-client.js.map +1 -0
  655. package/dist/scripts/scb-context.d.ts +88 -0
  656. package/dist/scripts/scb-context.d.ts.map +1 -0
  657. package/dist/scripts/scb-context.js +307 -0
  658. package/dist/scripts/scb-context.js.map +1 -0
  659. package/dist/scripts/shared/version.d.ts +9 -0
  660. package/dist/scripts/shared/version.d.ts.map +1 -0
  661. package/dist/scripts/shared/version.js +28 -0
  662. package/dist/scripts/shared/version.js.map +1 -0
  663. package/dist/scripts/statistical-claims-detector.d.ts +119 -0
  664. package/dist/scripts/statistical-claims-detector.d.ts.map +1 -0
  665. package/dist/scripts/statistical-claims-detector.js +391 -0
  666. package/dist/scripts/statistical-claims-detector.js.map +1 -0
  667. package/dist/scripts/sync-cia-schemas.d.ts +52 -0
  668. package/dist/scripts/sync-cia-schemas.d.ts.map +1 -0
  669. package/dist/scripts/sync-cia-schemas.js +195 -0
  670. package/dist/scripts/sync-cia-schemas.js.map +1 -0
  671. package/dist/scripts/translation-dictionary.d.ts +45 -0
  672. package/dist/scripts/translation-dictionary.d.ts.map +1 -0
  673. package/dist/scripts/translation-dictionary.js +3642 -0
  674. package/dist/scripts/translation-dictionary.js.map +1 -0
  675. package/dist/scripts/types/article.d.ts +362 -0
  676. package/dist/scripts/types/article.d.ts.map +1 -0
  677. package/dist/scripts/types/article.js +6 -0
  678. package/dist/scripts/types/article.js.map +1 -0
  679. package/dist/scripts/types/content.d.ts +167 -0
  680. package/dist/scripts/types/content.d.ts.map +1 -0
  681. package/dist/scripts/types/content.js +6 -0
  682. package/dist/scripts/types/content.js.map +1 -0
  683. package/dist/scripts/types/editorial.d.ts +17 -0
  684. package/dist/scripts/types/editorial.d.ts.map +1 -0
  685. package/dist/scripts/types/editorial.js +6 -0
  686. package/dist/scripts/types/editorial.js.map +1 -0
  687. package/dist/scripts/types/language.d.ts +7 -0
  688. package/dist/scripts/types/language.d.ts.map +1 -0
  689. package/dist/scripts/types/language.js +6 -0
  690. package/dist/scripts/types/language.js.map +1 -0
  691. package/dist/scripts/types/mcp.d.ts +117 -0
  692. package/dist/scripts/types/mcp.d.ts.map +1 -0
  693. package/dist/scripts/types/mcp.js +6 -0
  694. package/dist/scripts/types/mcp.js.map +1 -0
  695. package/dist/scripts/types/party.d.ts +9 -0
  696. package/dist/scripts/types/party.d.ts.map +1 -0
  697. package/dist/scripts/types/party.js +6 -0
  698. package/dist/scripts/types/party.js.map +1 -0
  699. package/dist/scripts/types/validation.d.ts +136 -0
  700. package/dist/scripts/types/validation.d.ts.map +1 -0
  701. package/dist/scripts/types/validation.js +6 -0
  702. package/dist/scripts/types/validation.js.map +1 -0
  703. package/dist/scripts/types/workflow.d.ts +78 -0
  704. package/dist/scripts/types/workflow.d.ts.map +1 -0
  705. package/dist/scripts/types/workflow.js +6 -0
  706. package/dist/scripts/types/workflow.js.map +1 -0
  707. package/dist/scripts/update-stats-from-cia.d.ts +44 -0
  708. package/dist/scripts/update-stats-from-cia.d.ts.map +1 -0
  709. package/dist/scripts/update-stats-from-cia.js +310 -0
  710. package/dist/scripts/update-stats-from-cia.js.map +1 -0
  711. package/dist/scripts/validate-against-cia-schemas.d.ts +126 -0
  712. package/dist/scripts/validate-against-cia-schemas.d.ts.map +1 -0
  713. package/dist/scripts/validate-against-cia-schemas.js +299 -0
  714. package/dist/scripts/validate-against-cia-schemas.js.map +1 -0
  715. package/dist/scripts/validate-cross-references.d.ts +49 -0
  716. package/dist/scripts/validate-cross-references.d.ts.map +1 -0
  717. package/dist/scripts/validate-cross-references.js +183 -0
  718. package/dist/scripts/validate-cross-references.js.map +1 -0
  719. package/dist/scripts/validate-file-ownership.d.ts +68 -0
  720. package/dist/scripts/validate-file-ownership.d.ts.map +1 -0
  721. package/dist/scripts/validate-file-ownership.js +135 -0
  722. package/dist/scripts/validate-file-ownership.js.map +1 -0
  723. package/dist/scripts/validate-news-translations.d.ts +27 -0
  724. package/dist/scripts/validate-news-translations.d.ts.map +1 -0
  725. package/dist/scripts/validate-news-translations.js +258 -0
  726. package/dist/scripts/validate-news-translations.js.map +1 -0
  727. package/dist/scripts/validate-translations.d.ts +162 -0
  728. package/dist/scripts/validate-translations.d.ts.map +1 -0
  729. package/dist/scripts/validate-translations.js +378 -0
  730. package/dist/scripts/validate-translations.js.map +1 -0
  731. package/dist/scripts/workflow-state-coordinator.d.ts +354 -0
  732. package/dist/scripts/workflow-state-coordinator.d.ts.map +1 -0
  733. package/dist/scripts/workflow-state-coordinator.js +876 -0
  734. package/dist/scripts/workflow-state-coordinator.js.map +1 -0
  735. package/dist/scripts/world-bank-client.d.ts +122 -0
  736. package/dist/scripts/world-bank-client.d.ts.map +1 -0
  737. package/dist/scripts/world-bank-client.js +192 -0
  738. package/dist/scripts/world-bank-client.js.map +1 -0
  739. package/dist/scripts/world-bank-context.d.ts +88 -0
  740. package/dist/scripts/world-bank-context.d.ts.map +1 -0
  741. package/dist/scripts/world-bank-context.js +331 -0
  742. package/dist/scripts/world-bank-context.js.map +1 -0
  743. package/package.json +32 -7
  744. package/dist/lib/chart-factory.d.ts.map +0 -1
  745. package/dist/lib/chart-factory.js.map +0 -1
  746. package/dist/lib/data-loader.d.ts.map +0 -1
  747. package/dist/lib/data-loader.js.map +0 -1
  748. package/dist/lib/dom-utils.d.ts.map +0 -1
  749. package/dist/lib/dom-utils.js.map +0 -1
  750. package/dist/lib/error-boundary.d.ts.map +0 -1
  751. package/dist/lib/error-boundary.js.map +0 -1
  752. package/dist/lib/fallback-ui.d.ts.map +0 -1
  753. package/dist/lib/fallback-ui.js.map +0 -1
  754. package/dist/lib/index.d.ts.map +0 -1
  755. package/dist/lib/index.js.map +0 -1
  756. package/dist/lib/logger.d.ts.map +0 -1
  757. package/dist/lib/logger.js.map +0 -1
  758. package/dist/lib/theme.d.ts.map +0 -1
  759. package/dist/lib/theme.js.map +0 -1
  760. package/dist/lib/types.d.ts.map +0 -1
  761. package/dist/lib/types.js.map +0 -1
  762. /package/dist/lib/{chart-factory.d.ts → shared/chart-factory.d.ts} +0 -0
  763. /package/dist/lib/{chart-factory.js → shared/chart-factory.js} +0 -0
  764. /package/dist/lib/{data-loader.d.ts → shared/data-loader.d.ts} +0 -0
  765. /package/dist/lib/{data-loader.js → shared/data-loader.js} +0 -0
  766. /package/dist/lib/{dom-utils.d.ts → shared/dom-utils.d.ts} +0 -0
  767. /package/dist/lib/{dom-utils.js → shared/dom-utils.js} +0 -0
  768. /package/dist/lib/{error-boundary.d.ts → shared/error-boundary.d.ts} +0 -0
  769. /package/dist/lib/{error-boundary.js → shared/error-boundary.js} +0 -0
  770. /package/dist/lib/{fallback-ui.d.ts → shared/fallback-ui.d.ts} +0 -0
  771. /package/dist/lib/{fallback-ui.js → shared/fallback-ui.js} +0 -0
  772. /package/dist/lib/{index.d.ts → shared/index.d.ts} +0 -0
  773. /package/dist/lib/{index.js → shared/index.js} +0 -0
  774. /package/dist/lib/{logger.d.ts → shared/logger.d.ts} +0 -0
  775. /package/dist/lib/{logger.js → shared/logger.js} +0 -0
  776. /package/dist/lib/{theme.d.ts → shared/theme.d.ts} +0 -0
  777. /package/dist/lib/{theme.js → shared/theme.js} +0 -0
  778. /package/dist/lib/{types.d.ts → shared/types.d.ts} +0 -0
  779. /package/dist/lib/{types.js → shared/types.js} +0 -0
@@ -0,0 +1,417 @@
1
+ /**
2
+ * @module ContentGeneration/MonthlyReview
3
+ * @category ContentGeneration
4
+ *
5
+ * @title Monthly Review Article Generator - Retrospective Monthly Analysis
6
+ *
7
+ * @description
8
+ * Generates comprehensive monthly review articles analyzing the past 30 days
9
+ * of parliamentary activity using the same 5-step enrichment pipeline as weekly-review:
10
+ * 1. search_dokument – find document IDs and types for the period
11
+ * 2. get_betankanden / get_propositioner / get_motioner – typed metadata fetchers
12
+ * 3. get_dokument_innehall – load every document completely (concurrency 3)
13
+ * 4. search_anforanden – fetch speeches from the same period
14
+ * 5. CIA static context – secondary historical context only
15
+ *
16
+ * @author Hack23 AB
17
+ * @license Apache-2.0
18
+ */
19
+ import { MCPClient } from '../mcp-client.js';
20
+ import { generateArticleContent, extractWatchPoints, generateMetadata, calculateReadTime, generateSources, } from '../data-transformers.js';
21
+ import { enrichWithFullText, attachSpeechesToDocuments, loadCIAContext, } from './weekly-review.js';
22
+ import { getCurrentRiksmote } from './motions.js';
23
+ import { generateArticleHTML } from '../article-template.js';
24
+ import { generateCiaOverviewSection } from '../data-transformers/content-generators/cia-overview-section.js';
25
+ import { generateDynamicTitle, getAnalysisEnrichment } from '../generate-news-enhanced/helpers.js';
26
+ import { buildArticleVisualizationSections } from '../generate-news-enhanced/generators.js';
27
+ /**
28
+ * Required MCP tools for monthly-review articles
29
+ */
30
+ export const REQUIRED_TOOLS = [
31
+ 'search_dokument',
32
+ 'get_dokument_innehall',
33
+ 'search_anforanden',
34
+ 'get_betankanden',
35
+ 'get_propositioner',
36
+ 'get_motioner',
37
+ ];
38
+ /**
39
+ * Format date for article slug
40
+ */
41
+ export function formatDateForSlug(date = new Date()) {
42
+ return date.toISOString().split('T')[0] ?? '';
43
+ }
44
+ /**
45
+ * Generate Monthly Review article in specified languages using the full enrichment pipeline.
46
+ */
47
+ export async function generateMonthlyReview(options = {}) {
48
+ const { languages = ['en', 'sv'], lookbackDays = 30, writeArticle = null } = options;
49
+ console.log('📊 Generating Monthly Review article...');
50
+ const mcpCalls = [];
51
+ try {
52
+ const client = new MCPClient();
53
+ const today = new Date();
54
+ const startDate = new Date(today);
55
+ startDate.setDate(startDate.getDate() - lookbackDays);
56
+ const fromStr = formatDateForSlug(startDate);
57
+ const toStr = formatDateForSlug(today);
58
+ // Step 1: search_dokument for document IDs and types
59
+ console.log(` 🔄 Step 1 — Searching documents ${fromStr} → ${toStr}...`);
60
+ const allDocs = await client.searchDocuments({
61
+ from_date: fromStr,
62
+ to_date: toStr,
63
+ limit: 50,
64
+ });
65
+ mcpCalls.push({ tool: 'search_dokument', result: allDocs });
66
+ // Step 2: typed metadata fetchers (robust: errors → empty [])
67
+ console.log(' 🔄 Step 2 — Fetching typed metadata (reports, propositions, motions)...');
68
+ const rm = getCurrentRiksmote(today);
69
+ const [recentReports, recentPropositions, recentMotions] = await Promise.all([
70
+ Promise.resolve().then(() => client.fetchCommitteeReports(30, rm))
71
+ .catch((err) => { console.error('Failed to fetch committee reports:', err); return []; }),
72
+ Promise.resolve().then(() => client.fetchPropositions(20, rm))
73
+ .catch((err) => { console.error('Failed to fetch propositions:', err); return []; }),
74
+ Promise.resolve().then(() => client.fetchMotions(20, rm))
75
+ .catch((err) => { console.error('Failed to fetch motions:', err); return []; }),
76
+ ]);
77
+ // Record MCP calls for traceability
78
+ mcpCalls.push({ tool: 'get_betankanden', result: recentReports });
79
+ mcpCalls.push({ tool: 'get_propositioner', result: recentPropositions });
80
+ mcpCalls.push({ tool: 'get_motioner', result: recentMotions });
81
+ // Filter typed results to the lookback window so only in-period documents are merged
82
+ const filterByDate = (docs) => docs.filter(d => {
83
+ const rec = d;
84
+ const docDate = rec['datum'] ?? rec['date'] ?? '';
85
+ if (!docDate)
86
+ return true; // no date field — keep (can't filter)
87
+ return docDate >= fromStr && docDate <= toStr;
88
+ });
89
+ const filteredReports = filterByDate(recentReports);
90
+ const filteredPropositions = filterByDate(recentPropositions);
91
+ const filteredMotions = filterByDate(recentMotions);
92
+ // Merge: typed docs first (have dok_id), then search extras
93
+ const typedDocs = [...filteredReports, ...filteredPropositions, ...filteredMotions];
94
+ const typedDocIds = new Set(typedDocs.flatMap(d => {
95
+ const id = d.dok_id;
96
+ return id ? [id] : [];
97
+ }));
98
+ const searchExtras = allDocs.filter(d => {
99
+ const id = d.dok_id;
100
+ const type = d.doktyp;
101
+ return id && type && !typedDocIds.has(id);
102
+ });
103
+ const documents = typedDocs.length > 0
104
+ ? [...typedDocs, ...searchExtras]
105
+ : allDocs;
106
+ // Tag doktyp defaults where missing
107
+ for (const d of documents) {
108
+ const rec = d;
109
+ if (!rec['doktyp']) {
110
+ if (filteredReports.includes(d))
111
+ rec['doktyp'] = 'bet';
112
+ else if (filteredPropositions.includes(d))
113
+ rec['doktyp'] = 'prop';
114
+ else if (filteredMotions.includes(d))
115
+ rec['doktyp'] = 'mot';
116
+ }
117
+ }
118
+ console.log(` 📊 Found ${documents.length} documents (${filteredReports.length} reports, ${filteredPropositions.length} propositions, ${filteredMotions.length} motions within lookback window)`);
119
+ if (documents.length === 0) {
120
+ console.log(' ℹ️ No documents found for the past month, skipping');
121
+ return { success: true, files: 0, mcpCalls };
122
+ }
123
+ // Step 3: enrich each document with full text
124
+ console.log(' 🔄 Step 3 — Loading full document content...');
125
+ await enrichWithFullText(client, documents, mcpCalls, 3);
126
+ // Step 4: fetch speeches from the period
127
+ console.log(' 🔄 Step 4 — Fetching speeches from the period...');
128
+ const rawSpeeches = await Promise.resolve()
129
+ .then(() => client.searchSpeeches({ from: fromStr, to: toStr, limit: 100 }))
130
+ .catch((err) => { console.error('Failed to fetch speeches:', err); return []; });
131
+ const speeches = Array.isArray(rawSpeeches) ? rawSpeeches : [];
132
+ mcpCalls.push({ tool: 'search_anforanden', result: speeches });
133
+ console.log(` 🗣 Found ${speeches.length} speeches`);
134
+ attachSpeechesToDocuments(documents, speeches);
135
+ // Step 5: CIA intelligence context (secondary, historical)
136
+ console.log(' 🔄 Step 5 — Loading CIA intelligence context...');
137
+ const ciaContext = loadCIAContext();
138
+ console.log(` 🧠 CIA context: ${ciaContext.partyPerformance.length} parties, coalition stability ${ciaContext.coalitionStability.stabilityScore}/100, motion denial rate ${ciaContext.overallMotionDenialRate}%`);
139
+ // Step 6: Fetch previous 2 months for multi-month trend analysis
140
+ console.log(' 🔄 Step 6 — Fetching previous months for trend analysis...');
141
+ const prevStart = new Date(startDate);
142
+ prevStart.setDate(prevStart.getDate() - lookbackDays);
143
+ const prev2Start = new Date(prevStart);
144
+ prev2Start.setDate(prev2Start.getDate() - lookbackDays);
145
+ const [prevMonthDocs, twoMonthsDocs] = await Promise.all([
146
+ // Use a higher per-period cap to better approximate total volume for trend metrics; full-text enrichment is not needed here
147
+ client.searchDocuments({ from_date: formatDateForSlug(prevStart), to_date: fromStr, limit: 1000 })
148
+ .catch((error) => {
149
+ console.error('MonthlyReview Step 6 — search_dokument failed for previous month trend window', { from_date: formatDateForSlug(prevStart), to_date: fromStr, limit: 1000 }, error);
150
+ return [];
151
+ }),
152
+ client.searchDocuments({ from_date: formatDateForSlug(prev2Start), to_date: formatDateForSlug(prevStart), limit: 1000 })
153
+ .catch((error) => {
154
+ console.error('MonthlyReview Step 6 — search_dokument failed for two-months-ago trend window', { from_date: formatDateForSlug(prev2Start), to_date: formatDateForSlug(prevStart), limit: 1000 }, error);
155
+ return [];
156
+ }),
157
+ ]);
158
+ mcpCalls.push({ tool: 'search_dokument', result: prevMonthDocs });
159
+ mcpCalls.push({ tool: 'search_dokument', result: twoMonthsDocs });
160
+ // Compute MonthlyMetrics from current-month data
161
+ const reportCount = documents.filter(d => d.doktyp === 'bet').length;
162
+ const propositionCount = documents.filter(d => d.doktyp === 'prop').length;
163
+ const motionCount = documents.filter(d => d.doktyp === 'mot').length;
164
+ // Party rankings: aggregate motions and speeches by party
165
+ // Filter party keys: trim whitespace and drop unknown/empty sentinels (returns null to exclude)
166
+ // Note: distinct from the normalizePartyKey helper in helpers.ts which maps unknowns to 'other'
167
+ const filterPartyKey = (raw) => {
168
+ const value = String(raw ?? '').trim();
169
+ if (!value)
170
+ return null;
171
+ const lower = value.toLowerCase();
172
+ if (lower === 'unknown' || lower === 'okänd')
173
+ return null;
174
+ return value;
175
+ };
176
+ const partyMotions = {};
177
+ const partySpeeches = {};
178
+ for (const doc of documents) {
179
+ const rec = doc;
180
+ if (rec['doktyp'] === 'mot') {
181
+ const p = filterPartyKey(rec['parti']);
182
+ if (p !== null)
183
+ partyMotions[p] = (partyMotions[p] ?? 0) + 1;
184
+ }
185
+ }
186
+ for (const speech of speeches) {
187
+ const p = filterPartyKey(speech['parti']);
188
+ if (p !== null)
189
+ partySpeeches[p] = (partySpeeches[p] ?? 0) + 1;
190
+ }
191
+ const allParties = new Set([...Object.keys(partyMotions), ...Object.keys(partySpeeches)]);
192
+ const partyRankings = Array.from(allParties)
193
+ .map(party => ({
194
+ party,
195
+ motionCount: partyMotions[party] ?? 0,
196
+ speechCount: partySpeeches[party] ?? 0,
197
+ }))
198
+ .sort((a, b) => (b.motionCount + b.speechCount) - (a.motionCount + a.speechCount));
199
+ const monthlyMetrics = {
200
+ totalDocuments: documents.length,
201
+ reportCount,
202
+ propositionCount,
203
+ motionCount,
204
+ speechCount: speeches.length,
205
+ previousMonthDocCount: Array.isArray(prevMonthDocs) ? prevMonthDocs.length : 0,
206
+ twoMonthsAgoDocCount: Array.isArray(twoMonthsDocs) ? twoMonthsDocs.length : 0,
207
+ partyRankings,
208
+ legislativeEfficiencyRate: propositionCount > 0 ? reportCount / propositionCount : 0,
209
+ };
210
+ console.log(` 📈 Monthly metrics: ${documents.length} docs this month, ${monthlyMetrics.previousMonthDocCount} last month, ${partyRankings.length} active parties`);
211
+ const slug = `${formatDateForSlug(today)}-monthly-review`;
212
+ const articles = [];
213
+ const enrichment = await getAnalysisEnrichment();
214
+ for (const lang of languages) {
215
+ console.log(` 🌐 Generating ${lang.toUpperCase()} version...`);
216
+ const content = generateArticleContent({ documents, reports: recentReports, propositions: recentPropositions, motions: recentMotions, ciaContext, monthlyMetrics }, 'monthly-review', lang);
217
+ const watchPoints = extractWatchPoints({ documents }, lang);
218
+ const metadata = generateMetadata({ documents }, 'monthly-review', lang);
219
+ const readTime = calculateReadTime(content);
220
+ const sources = generateSources([
221
+ 'search_dokument', 'get_dokument_innehall', 'search_anforanden',
222
+ 'get_betankanden', 'get_propositioner', 'get_motioner',
223
+ ]);
224
+ const titles = getTitles(lang, documents.length);
225
+ // Enrich English title/subtitle with content-based highlights
226
+ const enriched = lang === 'en' ? generateDynamicTitle(titles.title, content, documents.length) : titles;
227
+ const ciaSection = generateCiaOverviewSection({ cia: ciaContext, lang });
228
+ // Build additional visualization sections (SWOT, dashboard, economic)
229
+ const extraSections = buildArticleVisualizationSections(documents, null, lang);
230
+ const html = generateArticleHTML({
231
+ slug: `${slug}-${lang}.html`,
232
+ title: enriched.title,
233
+ subtitle: enriched.subtitle,
234
+ date: today.toISOString().split('T')[0] ?? '',
235
+ type: 'retrospective',
236
+ readTime,
237
+ lang,
238
+ content,
239
+ watchPoints,
240
+ sources,
241
+ keywords: metadata.keywords,
242
+ topics: metadata.topics,
243
+ tags: metadata.tags,
244
+ sections: [ciaSection, ...extraSections],
245
+ ...(enrichment ?? {}),
246
+ });
247
+ articles.push({
248
+ lang,
249
+ html,
250
+ filename: `${slug}-${lang}.html`,
251
+ slug: `${slug}-${lang}`,
252
+ });
253
+ if (writeArticle) {
254
+ await writeArticle(html, `${slug}-${lang}.html`);
255
+ console.log(` ✅ ${lang.toUpperCase()} version generated`);
256
+ }
257
+ }
258
+ return {
259
+ success: true,
260
+ files: languages.length,
261
+ slug,
262
+ articles,
263
+ mcpCalls,
264
+ crossReferences: {
265
+ event: `${documents.length} documents over ${lookbackDays} days`,
266
+ sources: ['search_dokument', 'get_dokument_innehall', 'search_anforanden', 'get_betankanden', 'get_propositioner', 'get_motioner'],
267
+ }
268
+ };
269
+ }
270
+ catch (error) {
271
+ console.error('❌ Error generating Monthly Review:', error.message);
272
+ return {
273
+ success: false,
274
+ error: error.message,
275
+ mcpCalls
276
+ };
277
+ }
278
+ }
279
+ /**
280
+ * Get language-specific titles
281
+ */
282
+ function getTitles(lang, documentCount) {
283
+ const titles = {
284
+ en: {
285
+ title: `Monthly Review: Parliament in Perspective`,
286
+ subtitle: `Comprehensive analysis of ${documentCount} developments from the past month in Swedish politics`
287
+ },
288
+ sv: {
289
+ title: `Månadskrönika: Riksdagen i perspektiv`,
290
+ subtitle: `Omfattande analys av ${documentCount} händelser från den gångna månaden`
291
+ },
292
+ da: {
293
+ title: `Månedsgennemgang: Parlamentet i perspektiv`,
294
+ subtitle: `Omfattende analyse af ${documentCount} begivenheder fra den forgangne måned`
295
+ },
296
+ no: {
297
+ title: `Månedsgjennomgang: Stortinget i perspektiv`,
298
+ subtitle: `Omfattende analyse av ${documentCount} hendelser fra den siste måneden`
299
+ },
300
+ fi: {
301
+ title: `Kuukausikatsaus: Eduskunta perspektiivissä`,
302
+ subtitle: `Kattava analyysi ${documentCount} tapahtumasta viime kuukaudelta`
303
+ },
304
+ de: {
305
+ title: `Monatsrückblick: Parlament in Perspektive`,
306
+ subtitle: `Umfassende Analyse von ${documentCount} Entwicklungen des vergangenen Monats`
307
+ },
308
+ fr: {
309
+ title: `Revue mensuelle : Le Parlement en perspective`,
310
+ subtitle: `Analyse complète de ${documentCount} développements du mois écoulé`
311
+ },
312
+ es: {
313
+ title: `Revisión mensual: El Parlamento en perspectiva`,
314
+ subtitle: `Análisis integral de ${documentCount} desarrollos del mes pasado`
315
+ },
316
+ nl: {
317
+ title: `Maandelijkse terugblik: Parlement in perspectief`,
318
+ subtitle: `Uitgebreide analyse van ${documentCount} ontwikkelingen van de afgelopen maand`
319
+ },
320
+ ar: {
321
+ title: `المراجعة الشهرية: البرلمان في منظور`,
322
+ subtitle: `تحليل شامل لـ ${documentCount} تطور من الشهر الماضي`
323
+ },
324
+ he: {
325
+ title: `סקירה חודשית: הפרלמנט בפרספקטיבה`,
326
+ subtitle: `ניתוח מקיף של ${documentCount} התפתחויות מהחודש שעבר`
327
+ },
328
+ ja: {
329
+ title: `月間レビュー:議会を展望する`,
330
+ subtitle: `先月の${documentCount}件の動向の包括的分析`
331
+ },
332
+ ko: {
333
+ title: `월간 리뷰: 의회 전망`,
334
+ subtitle: `지난 달 ${documentCount}건의 동향에 대한 종합 분석`
335
+ },
336
+ zh: {
337
+ title: `月度回顾:议会纵览`,
338
+ subtitle: `过去一个月${documentCount}项发展的综合分析`
339
+ }
340
+ };
341
+ return titles[lang] || titles.en;
342
+ }
343
+ /**
344
+ * Validate monthly review article structure
345
+ */
346
+ export function validateMonthlyReview(article) {
347
+ const hasMonthlySummary = checkMonthlySummary(article);
348
+ const hasMinimumSources = countSources(article) >= 3;
349
+ const hasRetrospectiveTone = checkRetrospectiveTone(article);
350
+ const hasTrendAnalysis = checkTrendAnalysis(article);
351
+ const hasPartyRankings = checkPartyRankings(article);
352
+ const hasLegislativeEfficiency = checkLegislativeEfficiency(article);
353
+ const hasMonthInNumbers = checkMonthInNumbers(article);
354
+ return {
355
+ hasMonthlySummary,
356
+ hasMinimumSources,
357
+ hasRetrospectiveTone,
358
+ hasTrendAnalysis,
359
+ hasPartyRankings,
360
+ hasLegislativeEfficiency,
361
+ hasMonthInNumbers,
362
+ passed: hasMonthlySummary &&
363
+ hasMinimumSources &&
364
+ hasRetrospectiveTone &&
365
+ hasTrendAnalysis &&
366
+ hasPartyRankings &&
367
+ hasLegislativeEfficiency &&
368
+ hasMonthInNumbers
369
+ };
370
+ }
371
+ function checkMonthlySummary(article) {
372
+ if (!article || !article.content)
373
+ return false;
374
+ return article.content.toLowerCase().includes('month') ||
375
+ article.content.toLowerCase().includes('summary') ||
376
+ article.content.toLowerCase().includes('review') ||
377
+ article.content.toLowerCase().includes('retrospective');
378
+ }
379
+ function countSources(article) {
380
+ if (!article || !article.sources)
381
+ return 0;
382
+ return Array.isArray(article.sources) ? article.sources.length : 0;
383
+ }
384
+ function checkRetrospectiveTone(article) {
385
+ if (!article || !article.content)
386
+ return false;
387
+ const retroKeywords = ['concluded', 'passed', 'voted', 'decided', 'approved', 'rejected', 'completed', 'achieved'];
388
+ return retroKeywords.some(keyword => article.content.toLowerCase().includes(keyword));
389
+ }
390
+ function checkTrendAnalysis(article) {
391
+ if (!article || !article.content)
392
+ return false;
393
+ const trendKeywords = ['trend', 'pattern', 'increase', 'decrease', 'shift', 'trajectory', 'momentum'];
394
+ return trendKeywords.some(keyword => article.content.toLowerCase().includes(keyword));
395
+ }
396
+ function checkPartyRankings(article) {
397
+ if (!article || !article.content)
398
+ return false;
399
+ return article.content.includes('Party Performance Rankings') ||
400
+ article.content.includes('Partiernas prestationsrankning') ||
401
+ article.content.includes('🏆');
402
+ }
403
+ function checkLegislativeEfficiency(article) {
404
+ if (!article || !article.content)
405
+ return false;
406
+ return article.content.includes('Legislative Efficiency') ||
407
+ article.content.includes('Lagstiftningseffektivitet') ||
408
+ article.content.includes('⚖️');
409
+ }
410
+ function checkMonthInNumbers(article) {
411
+ if (!article || !article.content)
412
+ return false;
413
+ return article.content.includes('Month in Numbers') ||
414
+ article.content.includes('Månaden i siffror') ||
415
+ article.content.includes('📊');
416
+ }
417
+ //# sourceMappingURL=monthly-review.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monthly-review.js","sourceRoot":"","sources":["../../../scripts/news-types/monthly-review.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,214 @@
1
+ /**
2
+ * @module ContentGeneration/OppositionAnalysis
3
+ * @category ContentGeneration
4
+ *
5
+ * @title Opposition Motions Article Generator - Legislative Initiative Intelligence
6
+ *
7
+ * @description
8
+ * **INTELLIGENCE OPERATIVE PERSPECTIVE**
9
+ *
10
+ * This module generates analysis articles on opposition motions (motioner), which are
11
+ * parliamentary proposals for policy change submitted by opposition parties and some
12
+ * government coalition members. Motions represent the parliamentary toolkit for policy
13
+ * challenge and alternatives, making them critical for understanding opposition
14
+ * strategy and emerging policy ideas that may later influence government policy.
15
+ *
16
+ * **PARLIAMENTARY CONTEXT - SWEDISH LEGISLATIVE PROCESS:**
17
+ * The Swedish legislative process involves multiple parliamentary document types:
18
+ * 1. **Propositioner** (Government Proposals): Executive branch initiates bills
19
+ * 2. **Motioner** (Motions): Opposition/members propose alternatives
20
+ * 3. **Betänkanden** (Committee Reports): Committees analyze proposals
21
+ * 4. **Skrivelser** (Government Reports): Executive reports to parliament
22
+ * 5. **Frågor** (Written Questions): Members demand government clarification
23
+ *
24
+ * Motions exist in this ecosystem as the primary tool for opposition leverage,
25
+ * allowing non-governing parties to shape the agenda and challenge government policy.
26
+ *
27
+ * **OPPOSITION MOTION INTELLIGENCE VALUE:**
28
+ * Motions reveal:
29
+ * 1. **Alternative Policy Directions**: What opposition wants to change
30
+ * 2. **Coalition Fault Lines**: Issues dividing government coalition
31
+ * 3. **Emerging Policy Ideas**: Proposals not yet on government agenda
32
+ * 4. **Party Positioning**: Which parties cooperate on specific issues
33
+ * 5. **Time-to-Victory Prediction**: Which opposition ideas may gain government support
34
+ *
35
+ * **MOTION TYPES & CHARACTERISTICS:**
36
+ * - **Policy Motions**: Comprehensive proposal for new direction
37
+ * - **Amendment Motions**: Modification to existing policy
38
+ * - **Rhetorical Motions**: Statement of principle (often symbolic)
39
+ * - **Procedural Motions**: Changes to parliamentary rules
40
+ * - **Budget Motions**: Alternative budget proposals during budget process
41
+ *
42
+ * **ARTICLE STRUCTURE:**
43
+ * Each opposition motion article includes:
44
+ * 1. **Motion Summary**: What's being proposed and by whom
45
+ * 2. **Policy Problem**: Why opposition believes change is needed
46
+ * 3. **Proposed Solution**: Specific policy recommendation
47
+ * 4. **Government Position**: Official response and likelihood of adoption
48
+ * 5. **Coalition Implications**: Which parties support/oppose the motion
49
+ * 6. **Timeline & Impact**: When would implementation occur, affected sectors
50
+ *
51
+ * **MCP DATA SOURCE:**
52
+ * Primary tool: get_motioner
53
+ * - Retrieves parliamentary motion records from riksdag platform
54
+ * - Includes motion text, sponsorship, current status
55
+ * - Enables systematic opposition coverage
56
+ *
57
+ * Additional tools (all implemented with graceful degradation):
58
+ * - search_dokument_fulltext: Full-text policy alternative analysis
59
+ * - analyze_g0v_by_department: Government department response tracking
60
+ * - search_anforanden: Debate context and party positioning
61
+ *
62
+ * **OPERATIONAL WORKFLOW:**
63
+ * 1. Query MCP: Fetch recent motions (default: 10 most recent)
64
+ * 2. Filter Analysis: Identify motions with policy significance
65
+ * 3. Government Response: Look up government statement if available
66
+ * 4. Impact Assessment: Estimate likelihood of adoption
67
+ * 5. Article Generation: Create narrative with contextual analysis
68
+ * 6. Multilingual Creation: Generate 14-language editions
69
+ * 7. Publication: Deploy to news directory
70
+ *
71
+ * **PARTY STRATEGY ANALYSIS:**
72
+ * Opposition motions serve multiple strategic purposes:
73
+ *
74
+ * **Social Democrats (S)** - Major Opposition:
75
+ * - Systematic policy proposals for when they return to power
76
+ * - Cooperation opportunities with other center-left parties
77
+ * - Pressure on government coalition weaknesses
78
+ *
79
+ * **Moderates (M)** - Usually Coalition:
80
+ * - Occasionally submit motions in policy disputes
81
+ * - Bridges to other center-right parties
82
+ * - Strategic positioning for future coalition shifts
83
+ *
84
+ * **Sweden Democrats (SD)** - Oppositional:
85
+ * - Immigration and security policy focus
86
+ * - Cross-party alliance building on specific issues
87
+ * - Strategic pressure on coalition on security matters
88
+ *
89
+ * **Left Party (V)** - Opposition:
90
+ * - Labor rights and welfare state advocacy
91
+ * - Tactical alliance with Social Democrats
92
+ * - Symbolic motions on socialist principles
93
+ *
94
+ * **Other Parties** (KD, L, C, MP, FI):
95
+ * - Issue-specific motions aligned with constituencies
96
+ * - Coalition or opposition depending on government composition
97
+ * - Significant for niche policy areas
98
+ *
99
+ * **INTELLIGENCE APPLICATIONS:**
100
+ * 1. **Opposition Morale Tracking**: Frequency and ambition of motions
101
+ * 2. **Cross-Party Coalition**: Identify emerging non-governmental coalitions
102
+ * 3. **Policy Direction Detection**: Emerging issues before government acts
103
+ * 4. **Vulnerability Identification**: Government weak points under attack
104
+ * 5. **Timeline Prediction**: When opposition ideas become policy
105
+ *
106
+ * **RISK ASSESSMENT FRAMEWORK:**
107
+ * Opposition motion analysis feeds into risk assessment:
108
+ * - **Coalition Stability**: Frequency of internal coalition conflict motions
109
+ * - **Political Momentum**: Which parties gaining traction with ideas
110
+ * - **Agenda Shifting**: Policy areas gaining opposition attention
111
+ * - **Pressure Points**: Where government facing most challenge
112
+ *
113
+ * **PERFORMANCE CHARACTERISTICS:**
114
+ * - MCP Query: ~400ms for 10 latest motions
115
+ * - Article Generation: ~2 seconds per motion
116
+ * - Translation: ~5 seconds per motion (parallel)
117
+ * - Total: ~12 seconds for batch (10 motions, 14 languages)
118
+ *
119
+ * **LANGUAGE CONSIDERATIONS:**
120
+ * Motion language is dense and technical, presenting translation challenges:
121
+ * - Swedish: Formal parliamentary language with specific terminology
122
+ * - English: Translation often requires policy context explanation
123
+ * - Nordic Languages: Similar legislative traditions enable closer translation
124
+ * - Other Languages: Require significant contextualization
125
+ *
126
+ * **FAILURE HANDLING:**
127
+ * - Missing Motion Text: Generate article with summary only
128
+ * - Government Response Unavailable: Note that response pending
129
+ * - MCP Service Down: Skip batch, retry on schedule
130
+ * - Empty Results: Log informational, no articles generated
131
+ *
132
+ * **GDPR COMPLIANCE:**
133
+ * - Motion sponsors are public figures (public record)
134
+ * - Member statements in motions are public
135
+ * - Data retention follows parliamentary archive standards
136
+ * - Supporting audit trail for regulatory compliance
137
+ *
138
+ * @osint Opposition Strategy Intelligence
139
+ * - Maps opposition party alliances through motion sponsorship
140
+ * - Tracks emerging opposition policy direction
141
+ * - Identifies opposition leadership and influential members
142
+ * - Analyzes cross-party coalition patterns for future government
143
+ *
144
+ * @risk Government Pressure Assessment
145
+ * - Opposition motions indicate policy challenges
146
+ * - Coalition stress detectable through internal conflict motions
147
+ * - Early warning of potential policy shifts
148
+ * - Momentum changes in political landscape
149
+ *
150
+ * @gdpr Public Parliamentary Record
151
+ * - Motions are public documents
152
+ * - Sponsorship publicly recorded
153
+ * - Data retention follows parliamentary standards
154
+ * - Supporting historical record for democracy transparency
155
+ *
156
+ * @security Legislative Integrity
157
+ * - Motion authenticity verified through official MCP source
158
+ * - Sponsorship verification prevents attribution errors
159
+ * - Timestamp validation prevents tampering
160
+ * - Official status confirmation from riksdag records
161
+ *
162
+ * @author Hack23 AB (Opposition Intelligence & Legislative Analysis)
163
+ * @license Apache-2.0
164
+ * @version 2.0.0
165
+ * @since 2024-08-22
166
+ * @see scripts/data-transformers.js (Content Generation Utilities)
167
+ * @see scripts/article-template.js (HTML Rendering)
168
+ * @see Issue #137 (Opposition Tracking Enhancement)
169
+ * @see https://www.riksdagen.se/ (Riksdag Parliamentary Records)
170
+ */
171
+ import type { Language } from '../types/language.js';
172
+ import type { GenerationResult } from '../types/article.js';
173
+ /**
174
+ * Required MCP tools for motions articles
175
+ *
176
+ * Restored to full 4-tool specification (2026-02-26):
177
+ * All four tools are now implemented with graceful degradation on failure.
178
+ */
179
+ export declare const REQUIRED_TOOLS: readonly string[];
180
+ export interface TitleSet {
181
+ title: string;
182
+ subtitle: string;
183
+ }
184
+ export interface MotionsValidationResult {
185
+ hasMotions: boolean;
186
+ hasMinimumSources: boolean;
187
+ hasOppositionAnalysis: boolean;
188
+ passed: boolean;
189
+ }
190
+ export interface ArticleInput {
191
+ content?: string;
192
+ sources?: string[];
193
+ [key: string]: unknown;
194
+ }
195
+ export interface GenerationOptions {
196
+ languages?: Language[];
197
+ limit?: number;
198
+ writeArticle?: ((html: string, filename: string) => Promise<void>) | null;
199
+ }
200
+ /**
201
+ * Format date for article slug
202
+ */
203
+ export declare function formatDateForSlug(date?: Date): string;
204
+ /**
205
+ * Calculate the current Swedish riksmöte (parliamentary session) string.
206
+ * The session runs September–August: e.g. September 2025 → "2025/26".
207
+ */
208
+ export declare function getCurrentRiksmote(date?: Date): string;
209
+ /**
210
+ * Generate Opposition Motions article
211
+ */
212
+ export declare function generateMotions(options?: GenerationOptions): Promise<GenerationResult>;
213
+ export declare function validateMotions(article: ArticleInput): MotionsValidationResult;
214
+ //# sourceMappingURL=motions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"motions.d.ts","sourceRoot":"","sources":["../../../scripts/news-types/motions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyKG;AAeH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAqC,gBAAgB,EAAiB,MAAM,qBAAqB,CAAC;AAE9G;;;;;GAKG;AACH,eAAO,MAAM,cAAc,EAAE,SAAS,MAAM,EAK3C,CAAC;AAEF,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,OAAO,CAAC;IACpB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;CAC3E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,GAAE,IAAiB,GAAG,MAAM,CAEjE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,GAAE,IAAiB,GAAG,MAAM,CAMlE;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAgKhG;AAoED,wBAAgB,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,uBAAuB,CAW9E"}