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,141 +0,0 @@
1
- /**
2
- * @module pre-article-analysis/data-persistence
3
- * @description Persists raw MCP data to a structured, version-controlled
4
- * directory tree under `analysis/data/`. Every document, vote, event, or
5
- * MP record fetched from MCP tools is written here with a consistent
6
- * filename derived from its official Riksdag identifier (e.g. `dok_id`,
7
- * `intressent_id`, `bet`).
8
- *
9
- * **Collision-free design** (v2):
10
- * - **Data files** (`{id}.json`) contain ONLY the raw source data — no
11
- * injected metadata. Two parallel workflows writing the same document
12
- * produce byte-identical output, eliminating git merge conflicts.
13
- * - **Sidecar metadata** (`{id}.meta.json`) tracks provenance (at minimum
14
- * fetch timestamp and MCP tool name) in a separate file that is safely
15
- * overwritten on each run. Riksdag/Riksdag-regeringen documents also
16
- * include `riksmöte` and `documentType`, while external MCP tools
17
- * (World Bank, SCB, etc.) use tool-specific fields (e.g. indicator /
18
- * country, tableId / query) instead.
19
- * - **All MCP tools**: riksdag-regering, World Bank, SCB, and any other
20
- * MCP tool responses are stored under `analysis/data/`.
21
- *
22
- * Design principles:
23
- * - **Upsert**: writes overwrite existing files (mutable data like MP
24
- * profiles) or create new ones (immutable data like dated votes).
25
- * - **Provenance**: sidecar `.meta.json` files track fetch origin.
26
- * - **Date-stamped**: time-bound data (votes, events) is stored under
27
- * `analysis/data/{type}/YYYY-MM-DD/` subdirectories.
28
- * - **Side-effect-aware**: this module intentionally writes to disk;
29
- * callers control when persistence is triggered.
30
- *
31
- * @author Hack23 AB
32
- * @license Apache-2.0
33
- */
34
- import type { RawDocument } from '../data-transformers/types.js';
35
- import type { DownloadedData, DocumentTypeKey } from './data-downloader.js';
36
- /** All known document/data types that appear in sidecar metadata. */
37
- export type PersistenceDocumentType = DocumentTypeKey | 'events' | 'mps' | 'government' | 'worldbank' | 'scb' | string;
38
- /** Sidecar metadata written alongside data files. */
39
- export interface PersistenceMetadata {
40
- fetchedAt: string;
41
- mcpTool: string;
42
- riksmote: string;
43
- documentType: PersistenceDocumentType;
44
- }
45
- /** Summary returned after a persistence run. */
46
- export interface PersistenceResult {
47
- /**
48
- * Total logical records persisted.
49
- *
50
- * Note: a single logical record may produce multiple physical files or
51
- * data/sidecar pairs (for example, votes written under both
52
- * `documents/votes/` and `votes/{date}/`), but it is counted once here.
53
- */
54
- written: number;
55
- /** Total null/empty entries skipped. */
56
- skipped: number;
57
- /** Root directory the data was written to. */
58
- dataRoot: string;
59
- }
60
- /** Description of an MCP tool call for generic response storage. */
61
- export interface MCPToolCall {
62
- /** MCP tool name (e.g. 'get_propositioner', 'search_tables', 'get-country-info') */
63
- tool: string;
64
- /** Parameters passed to the tool */
65
- params: Record<string, unknown>;
66
- /** MCP server identifier (e.g. 'riksdag-regering', 'scb', 'world-bank') */
67
- server: string;
68
- }
69
- /**
70
- * Resolve the best identifier for a document.
71
- * Falls back through the standard candidate chain.
72
- */
73
- export declare function resolveDocId(doc: RawDocument, index: number): string;
74
- /**
75
- * Persist all downloaded MCP data to the structured `analysis/data/` tree.
76
- *
77
- * Documents are organised by type under `analysis/data/documents/{type}/`.
78
- * Date-stamped data (votes, events) is further partitioned by date.
79
- *
80
- * Data files contain only raw source data (no metadata injection) to ensure
81
- * parallel workflows writing the same document produce identical output,
82
- * preventing git merge conflicts.
83
- *
84
- * @param data - Downloaded data collections from `downloadAllDocuments()`
85
- * @param riksmote - Current riksmöte identifier (e.g. "2025/26")
86
- * @param mcpToolMap - Map of document type → MCP tool name for provenance
87
- * @param dataRoot - Override for the data root directory (for testing)
88
- * @returns Summary of files written and skipped.
89
- */
90
- export declare function persistDownloadedData(data: DownloadedData, riksmote: string, mcpToolMap?: Partial<Record<DocumentTypeKey, string>>, dataRoot?: string): PersistenceResult;
91
- /**
92
- * Persist a set of calendar events to `analysis/data/events/{date}/`.
93
- * @param dataRoot - Override for the data root directory (for testing)
94
- */
95
- export declare function persistEvents(events: RawDocument[], riksmote: string, dataRoot?: string): PersistenceResult;
96
- /**
97
- * Persist MP profiles to `analysis/data/mps/`.
98
- * @param dataRoot - Override for the data root directory (for testing)
99
- */
100
- export declare function persistMPs(mps: RawDocument[], riksmote: string, dataRoot?: string): PersistenceResult;
101
- /**
102
- * Persist a generic MCP tool response. Supports any MCP server (riksdag,
103
- * SCB, World Bank, etc.). Responses are stored under:
104
- * `analysis/data/mcp-responses/{server}/{tool}/{id}.json`
105
- *
106
- * The response data is stored as-is (no metadata injection). A sidecar
107
- * `.meta.json` tracks provenance.
108
- *
109
- * @param call - Description of the MCP tool call
110
- * @param response - Raw response data from the MCP tool
111
- * @param id - Unique identifier for this response (e.g. dok_id, table_id, country code)
112
- * @param dataRoot - Override for the data root directory (for testing)
113
- * @returns The absolute path where the response was written.
114
- */
115
- export declare function persistMCPResponse(call: MCPToolCall, response: unknown, id: string, dataRoot?: string, riksmote?: string): string;
116
- /**
117
- * Persist World Bank API response data.
118
- * Stored under `analysis/data/worldbank/{indicator}/{country}.json`
119
- *
120
- * @param indicator - World Bank indicator ID (e.g. 'NY.GDP.MKTP.CD')
121
- * @param country - Country code (e.g. 'SWE')
122
- * @param response - Raw API response data
123
- * @param dataRoot - Override for the data root directory (for testing)
124
- */
125
- export declare function persistWorldBankData(indicator: string, country: string, response: unknown, dataRoot?: string): string;
126
- /**
127
- * Persist SCB (Statistics Sweden) table data.
128
- * Stored under `analysis/data/scb/{tableId}.json`
129
- *
130
- * @param tableId - SCB table identifier (e.g. 'BE0101A')
131
- * @param response - Raw SCB API response data
132
- * @param query - Optional query parameters used for provenance
133
- * @param dataRoot - Override for the data root directory (for testing)
134
- */
135
- export declare function persistSCBData(tableId: string, response: unknown, query?: Record<string, unknown>, dataRoot?: string): string;
136
- /**
137
- * Return the absolute path to the data repository root.
138
- * Useful for callers that need to reference persisted files.
139
- */
140
- export declare function getDataRoot(): string;
141
- //# sourceMappingURL=data-persistence.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"data-persistence.d.ts","sourceRoot":"","sources":["../../../scripts/pre-article-analysis/data-persistence.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAOH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAEjE,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAiB5E,qEAAqE;AACrE,MAAM,MAAM,uBAAuB,GAC/B,eAAe,GACf,QAAQ,GACR,KAAK,GACL,YAAY,GACZ,WAAW,GACX,KAAK,GACL,MAAM,CAAC;AAEX,qDAAqD;AACrD,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,uBAAuB,CAAC;CACvC;AAED,gDAAgD;AAChD,MAAM,WAAW,iBAAiB;IAChC;;;;;;OAMG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB,wCAAwC;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,8CAA8C;IAC9C,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,oEAAoE;AACpE,MAAM,WAAW,WAAW;IAC1B,oFAAoF;IACpF,IAAI,EAAE,MAAM,CAAC;IACb,oCAAoC;IACpC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,2EAA2E;IAC3E,MAAM,EAAE,MAAM,CAAC;CAChB;AAUD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAcpE;AAiCD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,cAAc,EACpB,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,EACrD,QAAQ,GAAE,MAAkB,GAC3B,iBAAiB,CA8EnB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,WAAW,EAAE,EACrB,QAAQ,EAAE,MAAM,EAChB,QAAQ,GAAE,MAAkB,GAC3B,iBAAiB,CA8BnB;AAED;;;GAGG;AACH,wBAAgB,UAAU,CACxB,GAAG,EAAE,WAAW,EAAE,EAClB,QAAQ,EAAE,MAAM,EAChB,QAAQ,GAAE,MAAkB,GAC3B,iBAAiB,CAwBnB;AAwBD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,WAAW,EACjB,QAAQ,EAAE,OAAO,EACjB,EAAE,EAAE,MAAM,EACV,QAAQ,GAAE,MAAkB,EAC5B,QAAQ,CAAC,EAAE,MAAM,GAChB,MAAM,CAiCR;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,OAAO,EACjB,QAAQ,GAAE,MAAkB,GAC3B,MAAM,CAwBR;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,OAAO,EACjB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,QAAQ,GAAE,MAAkB,GAC3B,MAAM,CAyBR;AAED;;;GAGG;AACH,wBAAgB,WAAW,IAAI,MAAM,CAEpC"}
@@ -1,345 +0,0 @@
1
- /**
2
- * @module pre-article-analysis/data-persistence
3
- * @description Persists raw MCP data to a structured, version-controlled
4
- * directory tree under `analysis/data/`. Every document, vote, event, or
5
- * MP record fetched from MCP tools is written here with a consistent
6
- * filename derived from its official Riksdag identifier (e.g. `dok_id`,
7
- * `intressent_id`, `bet`).
8
- *
9
- * **Collision-free design** (v2):
10
- * - **Data files** (`{id}.json`) contain ONLY the raw source data — no
11
- * injected metadata. Two parallel workflows writing the same document
12
- * produce byte-identical output, eliminating git merge conflicts.
13
- * - **Sidecar metadata** (`{id}.meta.json`) tracks provenance (at minimum
14
- * fetch timestamp and MCP tool name) in a separate file that is safely
15
- * overwritten on each run. Riksdag/Riksdag-regeringen documents also
16
- * include `riksmöte` and `documentType`, while external MCP tools
17
- * (World Bank, SCB, etc.) use tool-specific fields (e.g. indicator /
18
- * country, tableId / query) instead.
19
- * - **All MCP tools**: riksdag-regering, World Bank, SCB, and any other
20
- * MCP tool responses are stored under `analysis/data/`.
21
- *
22
- * Design principles:
23
- * - **Upsert**: writes overwrite existing files (mutable data like MP
24
- * profiles) or create new ones (immutable data like dated votes).
25
- * - **Provenance**: sidecar `.meta.json` files track fetch origin.
26
- * - **Date-stamped**: time-bound data (votes, events) is stored under
27
- * `analysis/data/{type}/YYYY-MM-DD/` subdirectories.
28
- * - **Side-effect-aware**: this module intentionally writes to disk;
29
- * callers control when persistence is triggered.
30
- *
31
- * @author Hack23 AB
32
- * @license Apache-2.0
33
- */
34
- import crypto from 'node:crypto';
35
- import fs from 'node:fs';
36
- import path from 'node:path';
37
- import { fileURLToPath } from 'node:url';
38
- import { sanitizeDokId } from './markdown-serializer.js';
39
- // ---------------------------------------------------------------------------
40
- // Constants
41
- // ---------------------------------------------------------------------------
42
- const __dirname = path.dirname(fileURLToPath(import.meta.url));
43
- const REPO_ROOT = path.resolve(__dirname, '../..');
44
- const DATA_ROOT = path.join(REPO_ROOT, 'analysis', 'data');
45
- /** ISO 8601 date format pattern (YYYY-MM-DD). Checks format only, not date validity. */
46
- const ISO_DATE_RE = /^\d{4}-\d{2}-\d{2}$/;
47
- // ---------------------------------------------------------------------------
48
- // Helpers
49
- // ---------------------------------------------------------------------------
50
- function ensureDir(dir) {
51
- fs.mkdirSync(dir, { recursive: true });
52
- }
53
- /**
54
- * Resolve the best identifier for a document.
55
- * Falls back through the standard candidate chain.
56
- */
57
- export function resolveDocId(doc, index) {
58
- const record = doc;
59
- const candidates = [
60
- record['dok_id'],
61
- record['dokument_id'],
62
- record['id'],
63
- record['rel_dok_id'],
64
- record['titel'],
65
- record['title'],
66
- ];
67
- const id = candidates.find((c) => typeof c === 'string' && c.trim().length > 0)?.trim() ?? `unknown-${index + 1}`;
68
- return sanitizeDokId(id) || `unknown-${index + 1}`;
69
- }
70
- /**
71
- * Write raw data to disk as pretty-printed JSON (NO metadata injection).
72
- * Metadata is written to a separate sidecar file to prevent merge conflicts
73
- * when parallel workflows persist the same document.
74
- */
75
- function writeDocumentAndMeta(dir, baseFilename, doc, metadata) {
76
- ensureDir(dir);
77
- // Write raw data only — deterministic across parallel workflow runs
78
- fs.writeFileSync(path.join(dir, baseFilename), JSON.stringify(doc, null, 2), 'utf8');
79
- // Write provenance sidecar — safe to overwrite (non-conflicting)
80
- const metaFilename = baseFilename.replace(/\.json$/, '.meta.json');
81
- fs.writeFileSync(path.join(dir, metaFilename), JSON.stringify(metadata, null, 2), 'utf8');
82
- }
83
- // ---------------------------------------------------------------------------
84
- // Public API — Riksdag documents
85
- // ---------------------------------------------------------------------------
86
- /**
87
- * Persist all downloaded MCP data to the structured `analysis/data/` tree.
88
- *
89
- * Documents are organised by type under `analysis/data/documents/{type}/`.
90
- * Date-stamped data (votes, events) is further partitioned by date.
91
- *
92
- * Data files contain only raw source data (no metadata injection) to ensure
93
- * parallel workflows writing the same document produce identical output,
94
- * preventing git merge conflicts.
95
- *
96
- * @param data - Downloaded data collections from `downloadAllDocuments()`
97
- * @param riksmote - Current riksmöte identifier (e.g. "2025/26")
98
- * @param mcpToolMap - Map of document type → MCP tool name for provenance
99
- * @param dataRoot - Override for the data root directory (for testing)
100
- * @returns Summary of files written and skipped.
101
- */
102
- export function persistDownloadedData(data, riksmote, mcpToolMap, dataRoot = DATA_ROOT) {
103
- const defaultToolMap = {
104
- propositions: 'get_propositioner',
105
- motions: 'get_motioner',
106
- committeeReports: 'get_betankanden',
107
- votes: 'search_voteringar',
108
- speeches: 'search_anforanden',
109
- questions: 'get_fragor',
110
- interpellations: 'get_interpellationer',
111
- };
112
- const toolMap = { ...defaultToolMap, ...mcpToolMap };
113
- const fetchedAt = new Date().toISOString();
114
- let written = 0;
115
- let skipped = 0;
116
- const docTypes = [
117
- 'propositions',
118
- 'motions',
119
- 'committeeReports',
120
- 'votes',
121
- 'speeches',
122
- 'questions',
123
- 'interpellations',
124
- ];
125
- for (const docType of docTypes) {
126
- const docs = data[docType];
127
- if (!docs || docs.length === 0) {
128
- continue;
129
- }
130
- const typeDir = path.join(dataRoot, 'documents', docType);
131
- const metadata = {
132
- fetchedAt,
133
- mcpTool: toolMap[docType],
134
- riksmote,
135
- documentType: docType,
136
- };
137
- const seenIds = new Set();
138
- for (let i = 0; i < docs.length; i++) {
139
- const doc = docs[i];
140
- if (!doc) {
141
- skipped++;
142
- continue;
143
- }
144
- let docId = resolveDocId(doc, i);
145
- // Collision avoidance: append suffix if ID already used in this batch
146
- if (seenIds.has(docId)) {
147
- let suffix = 1;
148
- while (seenIds.has(`${docId}-${suffix}`))
149
- suffix++;
150
- docId = `${docId}-${suffix}`;
151
- }
152
- seenIds.add(docId);
153
- const filename = `${docId}.json`;
154
- // For date-stamped vote ballots, also persist under votes/{date}/
155
- if (docType === 'votes' && doc.datum) {
156
- const voteDate = typeof doc.datum === 'string'
157
- ? doc.datum.slice(0, 10)
158
- : '';
159
- if (ISO_DATE_RE.test(voteDate)) {
160
- const voteDateDir = path.join(dataRoot, 'votes', voteDate);
161
- writeDocumentAndMeta(voteDateDir, filename, doc, {
162
- ...metadata,
163
- documentType: 'votes',
164
- });
165
- }
166
- }
167
- writeDocumentAndMeta(typeDir, filename, doc, metadata);
168
- written++;
169
- }
170
- }
171
- return { written, skipped, dataRoot: dataRoot };
172
- }
173
- /**
174
- * Persist a set of calendar events to `analysis/data/events/{date}/`.
175
- * @param dataRoot - Override for the data root directory (for testing)
176
- */
177
- export function persistEvents(events, riksmote, dataRoot = DATA_ROOT) {
178
- const fetchedAt = new Date().toISOString();
179
- let written = 0;
180
- let skipped = 0;
181
- for (let i = 0; i < events.length; i++) {
182
- const event = events[i];
183
- if (!event) {
184
- skipped++;
185
- continue;
186
- }
187
- const record = event;
188
- const dateStr = typeof record['datum'] === 'string'
189
- ? record['datum'].slice(0, 10)
190
- : typeof record['from'] === 'string'
191
- ? record['from'].slice(0, 10)
192
- : '';
193
- const eventDate = ISO_DATE_RE.test(dateStr) ? dateStr : 'undated';
194
- const eventDir = path.join(dataRoot, 'events', eventDate);
195
- const eventId = resolveDocId(event, i);
196
- writeDocumentAndMeta(eventDir, `${eventId}.json`, event, {
197
- fetchedAt,
198
- mcpTool: 'get_calendar_events',
199
- riksmote,
200
- documentType: 'events',
201
- });
202
- written++;
203
- }
204
- return { written, skipped, dataRoot: dataRoot };
205
- }
206
- /**
207
- * Persist MP profiles to `analysis/data/mps/`.
208
- * @param dataRoot - Override for the data root directory (for testing)
209
- */
210
- export function persistMPs(mps, riksmote, dataRoot = DATA_ROOT) {
211
- const fetchedAt = new Date().toISOString();
212
- let written = 0;
213
- let skipped = 0;
214
- for (let i = 0; i < mps.length; i++) {
215
- const mp = mps[i];
216
- if (!mp) {
217
- skipped++;
218
- continue;
219
- }
220
- const record = mp;
221
- const id = (typeof record['intressent_id'] === 'string' && record['intressent_id'])
222
- || resolveDocId(mp, i);
223
- const sanitized = sanitizeDokId(id) || `mp-${i + 1}`;
224
- writeDocumentAndMeta(path.join(dataRoot, 'mps'), `${sanitized}.json`, mp, {
225
- fetchedAt,
226
- mcpTool: 'search_ledamoter',
227
- riksmote,
228
- documentType: 'mps',
229
- });
230
- written++;
231
- }
232
- return { written, skipped, dataRoot: dataRoot };
233
- }
234
- // ---------------------------------------------------------------------------
235
- // Public API — Generic MCP response storage
236
- // ---------------------------------------------------------------------------
237
- /**
238
- * Sanitize a path segment to prevent path traversal.
239
- * Preserves underscores (common in MCP tool names like get_voting_group)
240
- * but removes slashes, null bytes, and dots-only sequences.
241
- */
242
- function sanitizePathSegment(segment) {
243
- // Remove path separators and null bytes
244
- let safe = segment.replace(/[/\\:\0]/g, '_');
245
- // Collapse dots-only segments (e.g. "..", ".")
246
- if (/^\.+$/.test(safe))
247
- safe = '_dots_';
248
- // Remove characters that are unsafe in paths but preserve underscores
249
- safe = safe.replace(/[^a-zA-Z0-9_\-åäöÅÄÖ]/g, '_')
250
- .replace(/_+/g, '_')
251
- .replace(/^_|_$/g, '')
252
- .slice(0, 100);
253
- return safe || 'unknown';
254
- }
255
- /**
256
- * Persist a generic MCP tool response. Supports any MCP server (riksdag,
257
- * SCB, World Bank, etc.). Responses are stored under:
258
- * `analysis/data/mcp-responses/{server}/{tool}/{id}.json`
259
- *
260
- * The response data is stored as-is (no metadata injection). A sidecar
261
- * `.meta.json` tracks provenance.
262
- *
263
- * @param call - Description of the MCP tool call
264
- * @param response - Raw response data from the MCP tool
265
- * @param id - Unique identifier for this response (e.g. dok_id, table_id, country code)
266
- * @param dataRoot - Override for the data root directory (for testing)
267
- * @returns The absolute path where the response was written.
268
- */
269
- export function persistMCPResponse(call, response, id, dataRoot = DATA_ROOT, riksmote) {
270
- const sanitized = sanitizeDokId(id) || `response-${crypto.randomUUID()}`;
271
- const safeServer = sanitizePathSegment(call.server);
272
- const safeTool = sanitizePathSegment(call.tool);
273
- const dir = path.join(dataRoot, 'mcp-responses', safeServer, safeTool);
274
- ensureDir(dir);
275
- const filename = `${sanitized}.json`;
276
- fs.writeFileSync(path.join(dir, filename), JSON.stringify(response, null, 2), 'utf8');
277
- // Derive riksmöte: explicit param > call.params.rm > empty
278
- const resolvedRiksmote = riksmote
279
- ?? (typeof call.params.rm === 'string' ? call.params.rm : '');
280
- const metaFilename = `${sanitized}.meta.json`;
281
- const metadata = {
282
- fetchedAt: new Date().toISOString(),
283
- mcpTool: call.tool,
284
- riksmote: resolvedRiksmote,
285
- documentType: call.server,
286
- params: call.params,
287
- };
288
- fs.writeFileSync(path.join(dir, metaFilename), JSON.stringify(metadata, null, 2), 'utf8');
289
- return path.join(dir, filename);
290
- }
291
- /**
292
- * Persist World Bank API response data.
293
- * Stored under `analysis/data/worldbank/{indicator}/{country}.json`
294
- *
295
- * @param indicator - World Bank indicator ID (e.g. 'NY.GDP.MKTP.CD')
296
- * @param country - Country code (e.g. 'SWE')
297
- * @param response - Raw API response data
298
- * @param dataRoot - Override for the data root directory (for testing)
299
- */
300
- export function persistWorldBankData(indicator, country, response, dataRoot = DATA_ROOT) {
301
- const dir = path.join(dataRoot, 'worldbank', sanitizeDokId(indicator));
302
- ensureDir(dir);
303
- const filename = `${sanitizeDokId(country)}.json`;
304
- fs.writeFileSync(path.join(dir, filename), JSON.stringify(response, null, 2), 'utf8');
305
- const metaFilename = `${sanitizeDokId(country)}.meta.json`;
306
- fs.writeFileSync(path.join(dir, metaFilename), JSON.stringify({
307
- fetchedAt: new Date().toISOString(),
308
- mcpTool: 'world-bank-api',
309
- indicator,
310
- country,
311
- }, null, 2), 'utf8');
312
- return path.join(dir, filename);
313
- }
314
- /**
315
- * Persist SCB (Statistics Sweden) table data.
316
- * Stored under `analysis/data/scb/{tableId}.json`
317
- *
318
- * @param tableId - SCB table identifier (e.g. 'BE0101A')
319
- * @param response - Raw SCB API response data
320
- * @param query - Optional query parameters used for provenance
321
- * @param dataRoot - Override for the data root directory (for testing)
322
- */
323
- export function persistSCBData(tableId, response, query, dataRoot = DATA_ROOT) {
324
- const dir = path.join(dataRoot, 'scb');
325
- ensureDir(dir);
326
- const sanitized = sanitizeDokId(tableId);
327
- const filename = `${sanitized}.json`;
328
- fs.writeFileSync(path.join(dir, filename), JSON.stringify(response, null, 2), 'utf8');
329
- const metaFilename = `${sanitized}.meta.json`;
330
- fs.writeFileSync(path.join(dir, metaFilename), JSON.stringify({
331
- fetchedAt: new Date().toISOString(),
332
- mcpTool: 'scb-pxweb',
333
- tableId,
334
- ...(query ? { query } : {}),
335
- }, null, 2), 'utf8');
336
- return path.join(dir, filename);
337
- }
338
- /**
339
- * Return the absolute path to the data repository root.
340
- * Useful for callers that need to reference persisted files.
341
- */
342
- export function getDataRoot() {
343
- return DATA_ROOT;
344
- }
345
- //# sourceMappingURL=data-persistence.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"data-persistence.js","sourceRoot":"","sources":["../../../scripts/pre-article-analysis/data-persistence.ts"],"names":[],"mappings":"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"}
@@ -1,158 +0,0 @@
1
- /**
2
- * @module pre-article-analysis/markdown-serializer
3
- * @description Serializes analysis framework results as structured markdown
4
- * files for persistence in `analysis/daily/YYYY-MM-DD/`.
5
- *
6
- * Each output file follows the standard analysis template:
7
- * ```markdown
8
- * # [Analysis Type] — YYYY-MM-DD
9
- * **Generated**: YYYY-MM-DD HH:MM UTC
10
- * **Data Sources**: [list]
11
- * **Documents Analyzed**: N
12
- * **Confidence**: HIGH/MEDIUM/LOW
13
- * ## Summary / ## Detailed Analysis / ## Key Findings / ## Implications
14
- * ```
15
- *
16
- * @author Hack23 AB
17
- * @license Apache-2.0
18
- */
19
- interface SwotContribution {
20
- quadrant: string;
21
- text: string;
22
- forStakeholder: string;
23
- }
24
- interface DashboardMetric {
25
- label: string;
26
- value: number | string;
27
- unit?: string;
28
- metricName: string;
29
- }
30
- interface MindmapNode {
31
- label: string;
32
- children?: MindmapNode[];
33
- }
34
- interface PerspectiveAnalysis {
35
- lens: string;
36
- summary: string;
37
- impact: string;
38
- sentiment: string;
39
- swotContribution: SwotContribution[];
40
- dashboardMetrics: DashboardMetric[];
41
- mindmapNodes: MindmapNode[];
42
- confidence: number;
43
- keyActors: string[];
44
- relatedPolicies: string[];
45
- }
46
- interface DocumentLink {
47
- sourceId: string;
48
- targetId: string;
49
- type: string;
50
- description: string;
51
- confidence: number;
52
- reason: string;
53
- }
54
- interface DocumentAnalysisResult {
55
- document: {
56
- dok_id?: string;
57
- titel?: string;
58
- title?: string;
59
- doktyp?: string;
60
- organ?: string;
61
- committee?: string;
62
- datum?: string;
63
- intressent_namn?: string;
64
- author?: string;
65
- parti?: string;
66
- rm?: string;
67
- summary?: string;
68
- rubrik?: string;
69
- undertitel?: string;
70
- notis?: string;
71
- mottagare?: string;
72
- fullText?: string;
73
- fullContent?: string;
74
- [key: string]: unknown;
75
- };
76
- overallSignificance: number;
77
- perspectives: PerspectiveAnalysis[];
78
- crossDocumentLinks: DocumentLink[];
79
- keyInsights: string[];
80
- confidenceScore: number;
81
- }
82
- export interface SerializationContext {
83
- /** ISO date string, e.g. "2026-03-26" */
84
- date: string;
85
- /** UTC timestamp of generation */
86
- generatedAt: string;
87
- /** List of MCP tool names called to download data */
88
- dataSources: string[];
89
- }
90
- export interface SignificanceEntry {
91
- dok_id: string;
92
- title: string;
93
- score: number;
94
- doctype: string;
95
- }
96
- export interface RiskAssessmentResult {
97
- coalitionRiskScore: number;
98
- riskLevel: 'LOW' | 'MEDIUM' | 'HIGH' | 'CRITICAL';
99
- riskSummary: string;
100
- anomalyFlags: Array<{
101
- type: string;
102
- severity: string;
103
- description: string;
104
- }>;
105
- implications: string[];
106
- }
107
- export interface SwotSummary {
108
- strengths: string[];
109
- weaknesses: string[];
110
- opportunities: string[];
111
- threats: string[];
112
- forStakeholder: string;
113
- }
114
- export interface CrossReferenceSummary {
115
- docCount: number;
116
- totalLinks: number;
117
- links: DocumentLink[];
118
- }
119
- export interface SynthesisSummary {
120
- totalDocs: number;
121
- executiveSummary: string;
122
- keyFindings: string[];
123
- topDocuments: SignificanceEntry[];
124
- overallConfidence: 'HIGH' | 'MEDIUM' | 'LOW';
125
- aggregateRiskLevel: string;
126
- }
127
- export declare function serializeDataManifest(ctx: SerializationContext, docCounts: Record<string, number>, dateFilteredTotal?: number): string;
128
- export declare function serializeClassificationResults(ctx: SerializationContext, results: DocumentAnalysisResult[]): string;
129
- export declare function serializeRiskAssessment(ctx: SerializationContext, docCount: number, risk: RiskAssessmentResult): string;
130
- export declare function serializeSwotAnalysis(ctx: SerializationContext, docCount: number, swots: SwotSummary[]): string;
131
- export declare function serializeThreatAnalysis(ctx: SerializationContext, results: DocumentAnalysisResult[]): string;
132
- export declare function serializeStakeholderPerspectives(ctx: SerializationContext, results: DocumentAnalysisResult[]): string;
133
- export declare function serializeSignificanceScoring(ctx: SerializationContext, entries: SignificanceEntry[]): string;
134
- export declare function serializeCrossReferenceMap(ctx: SerializationContext, summary: CrossReferenceSummary): string;
135
- export declare function serializeSynthesisSummary(ctx: SerializationContext, synthesis: SynthesisSummary): string;
136
- /**
137
- * Serialize a per-document analysis markdown file.
138
- *
139
- * Each document gets its own analysis file with:
140
- * - Full document metadata
141
- * - Detailed SWOT analysis
142
- * - Multi-lens stakeholder perspective analysis
143
- * - Significance scoring factors
144
- * - Cross-document references (where available)
145
- * - Key insights
146
- * - Data quality / methodology notes
147
- *
148
- * Note: Explicit risk indicator extraction and implications sections are
149
- * produced at the synthesis level rather than by this per-document serializer.
150
- */
151
- export declare function serializeDocumentAnalysis(ctx: SerializationContext, result: DocumentAnalysisResult): string;
152
- /**
153
- * Sanitize a document identifier for use as a safe filename.
154
- * Replaces non-alphanumeric characters with hyphens and lowercases.
155
- */
156
- export declare function sanitizeDokId(dokId: string): string;
157
- export {};
158
- //# sourceMappingURL=markdown-serializer.d.ts.map