euparliamentmonitor 0.8.4

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 (276) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +1005 -0
  3. package/SECURITY.md +151 -0
  4. package/package.json +131 -0
  5. package/scripts/constants/committee-indicator-map.d.ts +199 -0
  6. package/scripts/constants/committee-indicator-map.d.ts.map +1 -0
  7. package/scripts/constants/committee-indicator-map.js +1224 -0
  8. package/scripts/constants/committee-indicator-map.js.map +1 -0
  9. package/scripts/constants/config.d.ts +38 -0
  10. package/scripts/constants/config.d.ts.map +1 -0
  11. package/scripts/constants/config.js +66 -0
  12. package/scripts/constants/config.js.map +1 -0
  13. package/scripts/constants/language-articles.d.ts +84 -0
  14. package/scripts/constants/language-articles.d.ts.map +1 -0
  15. package/scripts/constants/language-articles.js +6771 -0
  16. package/scripts/constants/language-articles.js.map +1 -0
  17. package/scripts/constants/language-core.d.ts +38 -0
  18. package/scripts/constants/language-core.d.ts.map +1 -0
  19. package/scripts/constants/language-core.js +90 -0
  20. package/scripts/constants/language-core.js.map +1 -0
  21. package/scripts/constants/language-ui.d.ts +82 -0
  22. package/scripts/constants/language-ui.d.ts.map +1 -0
  23. package/scripts/constants/language-ui.js +889 -0
  24. package/scripts/constants/language-ui.js.map +1 -0
  25. package/scripts/constants/languages.d.ts +14 -0
  26. package/scripts/constants/languages.d.ts.map +1 -0
  27. package/scripts/constants/languages.js +15 -0
  28. package/scripts/constants/languages.js.map +1 -0
  29. package/scripts/generators/analysis-builders.d.ts +266 -0
  30. package/scripts/generators/analysis-builders.d.ts.map +1 -0
  31. package/scripts/generators/analysis-builders.js +2903 -0
  32. package/scripts/generators/analysis-builders.js.map +1 -0
  33. package/scripts/generators/breaking-content.d.ts +45 -0
  34. package/scripts/generators/breaking-content.d.ts.map +1 -0
  35. package/scripts/generators/breaking-content.js +530 -0
  36. package/scripts/generators/breaking-content.js.map +1 -0
  37. package/scripts/generators/committee-helpers.d.ts +54 -0
  38. package/scripts/generators/committee-helpers.d.ts.map +1 -0
  39. package/scripts/generators/committee-helpers.js +154 -0
  40. package/scripts/generators/committee-helpers.js.map +1 -0
  41. package/scripts/generators/dashboard-content.d.ts +95 -0
  42. package/scripts/generators/dashboard-content.d.ts.map +1 -0
  43. package/scripts/generators/dashboard-content.js +630 -0
  44. package/scripts/generators/dashboard-content.js.map +1 -0
  45. package/scripts/generators/deep-analysis-content.d.ts +23 -0
  46. package/scripts/generators/deep-analysis-content.d.ts.map +1 -0
  47. package/scripts/generators/deep-analysis-content.js +831 -0
  48. package/scripts/generators/deep-analysis-content.js.map +1 -0
  49. package/scripts/generators/mindmap-content.d.ts +55 -0
  50. package/scripts/generators/mindmap-content.d.ts.map +1 -0
  51. package/scripts/generators/mindmap-content.js +512 -0
  52. package/scripts/generators/mindmap-content.js.map +1 -0
  53. package/scripts/generators/motions-content.d.ts +50 -0
  54. package/scripts/generators/motions-content.d.ts.map +1 -0
  55. package/scripts/generators/motions-content.js +391 -0
  56. package/scripts/generators/motions-content.js.map +1 -0
  57. package/scripts/generators/news-enhanced.d.ts +14 -0
  58. package/scripts/generators/news-enhanced.d.ts.map +1 -0
  59. package/scripts/generators/news-enhanced.js +169 -0
  60. package/scripts/generators/news-enhanced.js.map +1 -0
  61. package/scripts/generators/news-indexes.d.ts +31 -0
  62. package/scripts/generators/news-indexes.d.ts.map +1 -0
  63. package/scripts/generators/news-indexes.js +410 -0
  64. package/scripts/generators/news-indexes.js.map +1 -0
  65. package/scripts/generators/pipeline/fetch-stage.d.ts +352 -0
  66. package/scripts/generators/pipeline/fetch-stage.d.ts.map +1 -0
  67. package/scripts/generators/pipeline/fetch-stage.js +1522 -0
  68. package/scripts/generators/pipeline/fetch-stage.js.map +1 -0
  69. package/scripts/generators/pipeline/generate-stage.d.ts +43 -0
  70. package/scripts/generators/pipeline/generate-stage.d.ts.map +1 -0
  71. package/scripts/generators/pipeline/generate-stage.js +204 -0
  72. package/scripts/generators/pipeline/generate-stage.js.map +1 -0
  73. package/scripts/generators/pipeline/output-stage.d.ts +48 -0
  74. package/scripts/generators/pipeline/output-stage.d.ts.map +1 -0
  75. package/scripts/generators/pipeline/output-stage.js +145 -0
  76. package/scripts/generators/pipeline/output-stage.js.map +1 -0
  77. package/scripts/generators/pipeline/transform-stage.d.ts +57 -0
  78. package/scripts/generators/pipeline/transform-stage.d.ts.map +1 -0
  79. package/scripts/generators/pipeline/transform-stage.js +111 -0
  80. package/scripts/generators/pipeline/transform-stage.js.map +1 -0
  81. package/scripts/generators/propositions-content.d.ts +29 -0
  82. package/scripts/generators/propositions-content.d.ts.map +1 -0
  83. package/scripts/generators/propositions-content.js +90 -0
  84. package/scripts/generators/propositions-content.js.map +1 -0
  85. package/scripts/generators/sankey-content.d.ts +45 -0
  86. package/scripts/generators/sankey-content.d.ts.map +1 -0
  87. package/scripts/generators/sankey-content.js +227 -0
  88. package/scripts/generators/sankey-content.js.map +1 -0
  89. package/scripts/generators/sitemap.d.ts +66 -0
  90. package/scripts/generators/sitemap.d.ts.map +1 -0
  91. package/scripts/generators/sitemap.js +562 -0
  92. package/scripts/generators/sitemap.js.map +1 -0
  93. package/scripts/generators/strategies/article-strategy.d.ts +146 -0
  94. package/scripts/generators/strategies/article-strategy.d.ts.map +1 -0
  95. package/scripts/generators/strategies/article-strategy.js +4 -0
  96. package/scripts/generators/strategies/article-strategy.js.map +1 -0
  97. package/scripts/generators/strategies/breaking-news-strategy.d.ts +64 -0
  98. package/scripts/generators/strategies/breaking-news-strategy.d.ts.map +1 -0
  99. package/scripts/generators/strategies/breaking-news-strategy.js +246 -0
  100. package/scripts/generators/strategies/breaking-news-strategy.js.map +1 -0
  101. package/scripts/generators/strategies/committee-reports-strategy.d.ts +93 -0
  102. package/scripts/generators/strategies/committee-reports-strategy.d.ts.map +1 -0
  103. package/scripts/generators/strategies/committee-reports-strategy.js +447 -0
  104. package/scripts/generators/strategies/committee-reports-strategy.js.map +1 -0
  105. package/scripts/generators/strategies/month-ahead-strategy.d.ts +60 -0
  106. package/scripts/generators/strategies/month-ahead-strategy.d.ts.map +1 -0
  107. package/scripts/generators/strategies/month-ahead-strategy.js +175 -0
  108. package/scripts/generators/strategies/month-ahead-strategy.js.map +1 -0
  109. package/scripts/generators/strategies/monthly-review-strategy.d.ts +66 -0
  110. package/scripts/generators/strategies/monthly-review-strategy.d.ts.map +1 -0
  111. package/scripts/generators/strategies/monthly-review-strategy.js +204 -0
  112. package/scripts/generators/strategies/monthly-review-strategy.js.map +1 -0
  113. package/scripts/generators/strategies/motions-strategy.d.ts +61 -0
  114. package/scripts/generators/strategies/motions-strategy.d.ts.map +1 -0
  115. package/scripts/generators/strategies/motions-strategy.js +215 -0
  116. package/scripts/generators/strategies/motions-strategy.js.map +1 -0
  117. package/scripts/generators/strategies/propositions-strategy.d.ts +60 -0
  118. package/scripts/generators/strategies/propositions-strategy.d.ts.map +1 -0
  119. package/scripts/generators/strategies/propositions-strategy.js +257 -0
  120. package/scripts/generators/strategies/propositions-strategy.js.map +1 -0
  121. package/scripts/generators/strategies/week-ahead-strategy.d.ts +57 -0
  122. package/scripts/generators/strategies/week-ahead-strategy.d.ts.map +1 -0
  123. package/scripts/generators/strategies/week-ahead-strategy.js +178 -0
  124. package/scripts/generators/strategies/week-ahead-strategy.js.map +1 -0
  125. package/scripts/generators/strategies/weekly-review-strategy.d.ts +63 -0
  126. package/scripts/generators/strategies/weekly-review-strategy.d.ts.map +1 -0
  127. package/scripts/generators/strategies/weekly-review-strategy.js +211 -0
  128. package/scripts/generators/strategies/weekly-review-strategy.js.map +1 -0
  129. package/scripts/generators/swot-content.d.ts +42 -0
  130. package/scripts/generators/swot-content.d.ts.map +1 -0
  131. package/scripts/generators/swot-content.js +366 -0
  132. package/scripts/generators/swot-content.js.map +1 -0
  133. package/scripts/generators/week-ahead-content.d.ts +103 -0
  134. package/scripts/generators/week-ahead-content.d.ts.map +1 -0
  135. package/scripts/generators/week-ahead-content.js +610 -0
  136. package/scripts/generators/week-ahead-content.js.map +1 -0
  137. package/scripts/index.d.ts +40 -0
  138. package/scripts/index.d.ts.map +1 -0
  139. package/scripts/index.js +53 -0
  140. package/scripts/index.js.map +1 -0
  141. package/scripts/mcp/ep-mcp-client.d.ts +471 -0
  142. package/scripts/mcp/ep-mcp-client.d.ts.map +1 -0
  143. package/scripts/mcp/ep-mcp-client.js +734 -0
  144. package/scripts/mcp/ep-mcp-client.js.map +1 -0
  145. package/scripts/mcp/mcp-connection.d.ts +264 -0
  146. package/scripts/mcp/mcp-connection.d.ts.map +1 -0
  147. package/scripts/mcp/mcp-connection.js +790 -0
  148. package/scripts/mcp/mcp-connection.js.map +1 -0
  149. package/scripts/mcp/mcp-health.d.ts +75 -0
  150. package/scripts/mcp/mcp-health.d.ts.map +1 -0
  151. package/scripts/mcp/mcp-health.js +78 -0
  152. package/scripts/mcp/mcp-health.js.map +1 -0
  153. package/scripts/mcp/mcp-retry.d.ts +94 -0
  154. package/scripts/mcp/mcp-retry.d.ts.map +1 -0
  155. package/scripts/mcp/mcp-retry.js +127 -0
  156. package/scripts/mcp/mcp-retry.js.map +1 -0
  157. package/scripts/mcp/wb-mcp-client.d.ts +38 -0
  158. package/scripts/mcp/wb-mcp-client.d.ts.map +1 -0
  159. package/scripts/mcp/wb-mcp-client.js +112 -0
  160. package/scripts/mcp/wb-mcp-client.js.map +1 -0
  161. package/scripts/templates/article-template.d.ts +9 -0
  162. package/scripts/templates/article-template.d.ts.map +1 -0
  163. package/scripts/templates/article-template.js +378 -0
  164. package/scripts/templates/article-template.js.map +1 -0
  165. package/scripts/templates/section-builders.d.ts +28 -0
  166. package/scripts/templates/section-builders.d.ts.map +1 -0
  167. package/scripts/templates/section-builders.js +142 -0
  168. package/scripts/templates/section-builders.js.map +1 -0
  169. package/scripts/types/analysis.d.ts +115 -0
  170. package/scripts/types/analysis.d.ts.map +1 -0
  171. package/scripts/types/analysis.js +4 -0
  172. package/scripts/types/analysis.js.map +1 -0
  173. package/scripts/types/common.d.ts +584 -0
  174. package/scripts/types/common.d.ts.map +1 -0
  175. package/scripts/types/common.js +96 -0
  176. package/scripts/types/common.js.map +1 -0
  177. package/scripts/types/generation.d.ts +104 -0
  178. package/scripts/types/generation.d.ts.map +1 -0
  179. package/scripts/types/generation.js +4 -0
  180. package/scripts/types/generation.js.map +1 -0
  181. package/scripts/types/index.d.ts +24 -0
  182. package/scripts/types/index.d.ts.map +1 -0
  183. package/scripts/types/index.js +16 -0
  184. package/scripts/types/index.js.map +1 -0
  185. package/scripts/types/intelligence.d.ts +129 -0
  186. package/scripts/types/intelligence.d.ts.map +1 -0
  187. package/scripts/types/intelligence.js +4 -0
  188. package/scripts/types/intelligence.js.map +1 -0
  189. package/scripts/types/mcp.d.ts +418 -0
  190. package/scripts/types/mcp.d.ts.map +1 -0
  191. package/scripts/types/mcp.js +4 -0
  192. package/scripts/types/mcp.js.map +1 -0
  193. package/scripts/types/parliament.d.ts +388 -0
  194. package/scripts/types/parliament.d.ts.map +1 -0
  195. package/scripts/types/parliament.js +4 -0
  196. package/scripts/types/parliament.js.map +1 -0
  197. package/scripts/types/quality.d.ts +114 -0
  198. package/scripts/types/quality.d.ts.map +1 -0
  199. package/scripts/types/quality.js +4 -0
  200. package/scripts/types/quality.js.map +1 -0
  201. package/scripts/types/stakeholder.d.ts +88 -0
  202. package/scripts/types/stakeholder.d.ts.map +1 -0
  203. package/scripts/types/stakeholder.js +16 -0
  204. package/scripts/types/stakeholder.js.map +1 -0
  205. package/scripts/types/visualization.d.ts +708 -0
  206. package/scripts/types/visualization.d.ts.map +1 -0
  207. package/scripts/types/visualization.js +4 -0
  208. package/scripts/types/visualization.js.map +1 -0
  209. package/scripts/types/world-bank.d.ts +85 -0
  210. package/scripts/types/world-bank.d.ts.map +1 -0
  211. package/scripts/types/world-bank.js +4 -0
  212. package/scripts/types/world-bank.js.map +1 -0
  213. package/scripts/utils/article-category.d.ts +18 -0
  214. package/scripts/utils/article-category.d.ts.map +1 -0
  215. package/scripts/utils/article-category.js +49 -0
  216. package/scripts/utils/article-category.js.map +1 -0
  217. package/scripts/utils/article-quality-scorer.d.ts +87 -0
  218. package/scripts/utils/article-quality-scorer.d.ts.map +1 -0
  219. package/scripts/utils/article-quality-scorer.js +1048 -0
  220. package/scripts/utils/article-quality-scorer.js.map +1 -0
  221. package/scripts/utils/content-metadata.d.ts +34 -0
  222. package/scripts/utils/content-metadata.d.ts.map +1 -0
  223. package/scripts/utils/content-metadata.js +249 -0
  224. package/scripts/utils/content-metadata.js.map +1 -0
  225. package/scripts/utils/content-validator.d.ts +94 -0
  226. package/scripts/utils/content-validator.d.ts.map +1 -0
  227. package/scripts/utils/content-validator.js +489 -0
  228. package/scripts/utils/content-validator.js.map +1 -0
  229. package/scripts/utils/copy-test-reports.d.ts +9 -0
  230. package/scripts/utils/copy-test-reports.d.ts.map +1 -0
  231. package/scripts/utils/copy-test-reports.js +508 -0
  232. package/scripts/utils/copy-test-reports.js.map +1 -0
  233. package/scripts/utils/file-utils.d.ts +144 -0
  234. package/scripts/utils/file-utils.d.ts.map +1 -0
  235. package/scripts/utils/file-utils.js +374 -0
  236. package/scripts/utils/file-utils.js.map +1 -0
  237. package/scripts/utils/fix-articles.d.ts +27 -0
  238. package/scripts/utils/fix-articles.d.ts.map +1 -0
  239. package/scripts/utils/fix-articles.js +510 -0
  240. package/scripts/utils/fix-articles.js.map +1 -0
  241. package/scripts/utils/generate-docs-index.d.ts +8 -0
  242. package/scripts/utils/generate-docs-index.d.ts.map +1 -0
  243. package/scripts/utils/generate-docs-index.js +275 -0
  244. package/scripts/utils/generate-docs-index.js.map +1 -0
  245. package/scripts/utils/html-sanitize.d.ts +18 -0
  246. package/scripts/utils/html-sanitize.d.ts.map +1 -0
  247. package/scripts/utils/html-sanitize.js +57 -0
  248. package/scripts/utils/html-sanitize.js.map +1 -0
  249. package/scripts/utils/intelligence-analysis.d.ts +173 -0
  250. package/scripts/utils/intelligence-analysis.d.ts.map +1 -0
  251. package/scripts/utils/intelligence-analysis.js +936 -0
  252. package/scripts/utils/intelligence-analysis.js.map +1 -0
  253. package/scripts/utils/intelligence-index.d.ts +126 -0
  254. package/scripts/utils/intelligence-index.d.ts.map +1 -0
  255. package/scripts/utils/intelligence-index.js +731 -0
  256. package/scripts/utils/intelligence-index.js.map +1 -0
  257. package/scripts/utils/metadata-utils.d.ts +14 -0
  258. package/scripts/utils/metadata-utils.d.ts.map +1 -0
  259. package/scripts/utils/metadata-utils.js +18 -0
  260. package/scripts/utils/metadata-utils.js.map +1 -0
  261. package/scripts/utils/news-metadata.d.ts +47 -0
  262. package/scripts/utils/news-metadata.d.ts.map +1 -0
  263. package/scripts/utils/news-metadata.js +259 -0
  264. package/scripts/utils/news-metadata.js.map +1 -0
  265. package/scripts/utils/validate-articles.d.ts +2 -0
  266. package/scripts/utils/validate-articles.d.ts.map +1 -0
  267. package/scripts/utils/validate-articles.js +284 -0
  268. package/scripts/utils/validate-articles.js.map +1 -0
  269. package/scripts/utils/validate-ep-api.d.ts +51 -0
  270. package/scripts/utils/validate-ep-api.d.ts.map +1 -0
  271. package/scripts/utils/validate-ep-api.js +160 -0
  272. package/scripts/utils/validate-ep-api.js.map +1 -0
  273. package/scripts/utils/world-bank-data.d.ts +84 -0
  274. package/scripts/utils/world-bank-data.d.ts.map +1 -0
  275. package/scripts/utils/world-bank-data.js +311 -0
  276. package/scripts/utils/world-bank-data.js.map +1 -0
@@ -0,0 +1,275 @@
1
+ #!/usr/bin/env node
2
+ // SPDX-FileCopyrightText: 2024-2026 Hack23 AB
3
+ // SPDX-License-Identifier: Apache-2.0
4
+ /**
5
+ * @module Utils/GenerateDocsIndex
6
+ * @description Creates an index.html page in the docs/ directory that links to all
7
+ * generated documentation and test reports.
8
+ */
9
+ import { promises as fs } from 'fs';
10
+ import { join, resolve } from 'path';
11
+ import { pathToFileURL } from 'url';
12
+ import { PROJECT_ROOT } from '../constants/config.js';
13
+ const DOCS_DIR = join(PROJECT_ROOT, 'docs');
14
+ /**
15
+ * Generate the documentation index HTML
16
+ *
17
+ * @returns HTML content for the documentation index
18
+ */
19
+ export function generateIndexHTML() {
20
+ const currentDate = new Date().toISOString().split('T')[0] ?? '';
21
+ return `<!DOCTYPE html>
22
+ <html lang="en">
23
+ <head>
24
+ <meta charset="UTF-8">
25
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
26
+ <meta name="description" content="EU Parliament Monitor - Technical Documentation">
27
+ <title>EU Parliament Monitor - Documentation</title>
28
+ <style>
29
+ * {
30
+ margin: 0;
31
+ padding: 0;
32
+ box-sizing: border-box;
33
+ }
34
+
35
+ body {
36
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif;
37
+ line-height: 1.6;
38
+ color: #333;
39
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
40
+ min-height: 100vh;
41
+ padding: 2rem;
42
+ }
43
+
44
+ .container {
45
+ max-width: 1200px;
46
+ margin: 0 auto;
47
+ background: white;
48
+ border-radius: 12px;
49
+ box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
50
+ overflow: hidden;
51
+ }
52
+
53
+ header {
54
+ background: linear-gradient(135deg, #1e3c72 0%, #2a5298 100%);
55
+ color: white;
56
+ padding: 3rem 2rem;
57
+ text-align: center;
58
+ }
59
+
60
+ h1 {
61
+ font-size: 2.5rem;
62
+ margin-bottom: 0.5rem;
63
+ font-weight: 700;
64
+ }
65
+
66
+ .subtitle {
67
+ font-size: 1.2rem;
68
+ opacity: 0.9;
69
+ margin-bottom: 1rem;
70
+ }
71
+
72
+ .last-updated {
73
+ font-size: 0.9rem;
74
+ opacity: 0.8;
75
+ margin-top: 1rem;
76
+ }
77
+
78
+ main {
79
+ padding: 3rem 2rem;
80
+ }
81
+
82
+ .intro {
83
+ font-size: 1.1rem;
84
+ color: #555;
85
+ margin-bottom: 2rem;
86
+ line-height: 1.8;
87
+ text-align: center;
88
+ }
89
+
90
+ .docs-grid {
91
+ display: grid;
92
+ grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
93
+ gap: 1.5rem;
94
+ margin-top: 2rem;
95
+ }
96
+
97
+ .doc-card {
98
+ background: #f8f9fa;
99
+ border: 2px solid #e9ecef;
100
+ border-radius: 8px;
101
+ padding: 1.5rem;
102
+ transition: all 0.3s ease;
103
+ text-decoration: none;
104
+ color: inherit;
105
+ display: block;
106
+ }
107
+
108
+ .doc-card:hover {
109
+ transform: translateY(-4px);
110
+ box-shadow: 0 8px 16px rgba(0, 0, 0, 0.1);
111
+ border-color: #667eea;
112
+ }
113
+
114
+ .doc-card h2 {
115
+ color: #1e3c72;
116
+ font-size: 1.4rem;
117
+ margin-bottom: 0.5rem;
118
+ }
119
+
120
+ .doc-card .icon {
121
+ font-size: 2rem;
122
+ margin-bottom: 0.5rem;
123
+ }
124
+
125
+ .doc-card p {
126
+ color: #666;
127
+ font-size: 0.95rem;
128
+ line-height: 1.5;
129
+ }
130
+
131
+ .badge {
132
+ display: inline-block;
133
+ background: #667eea;
134
+ color: white;
135
+ padding: 0.25rem 0.75rem;
136
+ border-radius: 12px;
137
+ font-size: 0.75rem;
138
+ font-weight: 600;
139
+ margin-top: 0.5rem;
140
+ }
141
+
142
+ footer {
143
+ background: #f8f9fa;
144
+ padding: 2rem;
145
+ text-align: center;
146
+ color: #666;
147
+ border-top: 1px solid #e9ecef;
148
+ }
149
+
150
+ footer a {
151
+ color: #667eea;
152
+ text-decoration: none;
153
+ }
154
+
155
+ footer a:hover {
156
+ text-decoration: underline;
157
+ }
158
+
159
+ @media (max-width: 768px) {
160
+ body {
161
+ padding: 1rem;
162
+ }
163
+
164
+ h1 {
165
+ font-size: 2rem;
166
+ }
167
+
168
+ .docs-grid {
169
+ grid-template-columns: 1fr;
170
+ }
171
+ }
172
+ </style>
173
+ </head>
174
+ <body>
175
+ <div class="container">
176
+ <header>
177
+ <h1>📚 EU Parliament Monitor</h1>
178
+ <div class="subtitle">Technical Documentation & Reports</div>
179
+ <div class="last-updated">Last Updated: ${currentDate}</div>
180
+ </header>
181
+
182
+ <main>
183
+ <div class="intro">
184
+ This documentation hub provides comprehensive technical information,
185
+ test reports, and API documentation for the EU Parliament Monitor project.
186
+ </div>
187
+
188
+ <div class="docs-grid">
189
+ <a href="api/index.html" class="doc-card">
190
+ <div class="icon">📖</div>
191
+ <h2>API Documentation</h2>
192
+ <p>Complete JSDoc-generated API documentation for all modules, functions, and classes.</p>
193
+ <span class="badge">JSDoc</span>
194
+ </a>
195
+
196
+ <a href="coverage/index.html" class="doc-card">
197
+ <div class="icon">📊</div>
198
+ <h2>Code Coverage</h2>
199
+ <p>Interactive coverage report showing test coverage metrics for the entire codebase.</p>
200
+ <span class="badge">Vitest</span>
201
+ </a>
202
+
203
+ <a href="test-results/index.html" class="doc-card">
204
+ <div class="icon">✅</div>
205
+ <h2>Test Results Dashboard</h2>
206
+ <p>Comprehensive test dashboard with Vitest HTML results, JUnit XML, and JSON reports.</p>
207
+ <span class="badge">Vitest</span>
208
+ </a>
209
+
210
+ <a href="playwright-report/index.html" class="doc-card">
211
+ <div class="icon">🎭</div>
212
+ <h2>E2E Test Report</h2>
213
+ <p>End-to-end test results from Playwright covering user workflows and accessibility.</p>
214
+ <span class="badge">Playwright</span>
215
+ </a>
216
+
217
+ <a href="test-results/eslint-report.html" class="doc-card">
218
+ <div class="icon">🔍</div>
219
+ <h2>ESLint Report</h2>
220
+ <p>Static analysis and code quality report showing linting results and style compliance.</p>
221
+ <span class="badge">ESLint</span>
222
+ </a>
223
+
224
+ <a href="../README.md" class="doc-card">
225
+ <div class="icon">📄</div>
226
+ <h2>README</h2>
227
+ <p>Project overview, installation instructions, usage guide, and contribution guidelines.</p>
228
+ <span class="badge">Markdown</span>
229
+ </a>
230
+
231
+ <a href="../SECURITY_ARCHITECTURE.md" class="doc-card">
232
+ <div class="icon">🔒</div>
233
+ <h2>Security Architecture</h2>
234
+ <p>Comprehensive security documentation including threat model and compliance mapping.</p>
235
+ <span class="badge">ISMS</span>
236
+ </a>
237
+ </div>
238
+ </main>
239
+
240
+ <footer>
241
+ <p>
242
+ <strong>EU Parliament Monitor</strong> -
243
+ European Parliament Intelligence Platform<br>
244
+ <a href="https://github.com/Hack23/euparliamentmonitor" target="_blank" rel="noopener noreferrer">
245
+ View on GitHub
246
+ </a>
247
+ </p>
248
+ </footer>
249
+ </div>
250
+ </body>
251
+ </html>`;
252
+ }
253
+ /**
254
+ * Main execution function
255
+ */
256
+ async function main() {
257
+ console.log('📚 Generating documentation index...');
258
+ try {
259
+ await fs.mkdir(DOCS_DIR, { recursive: true });
260
+ const indexHTML = generateIndexHTML();
261
+ const indexPath = join(DOCS_DIR, 'index.html');
262
+ await fs.writeFile(indexPath, indexHTML, 'utf8');
263
+ console.log(`✅ Documentation index generated: ${indexPath}`);
264
+ }
265
+ catch (error) {
266
+ const message = error instanceof Error ? error.message : String(error);
267
+ console.error('❌ Error generating documentation index:', message);
268
+ process.exit(1);
269
+ }
270
+ }
271
+ // Only run main when executed directly (not when imported)
272
+ if (process.argv[1] && import.meta.url === pathToFileURL(resolve(process.argv[1])).href) {
273
+ main();
274
+ }
275
+ //# sourceMappingURL=generate-docs-index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-docs-index.js","sourceRoot":"","sources":["../../src/utils/generate-docs-index.ts"],"names":[],"mappings":";AAEA,8CAA8C;AAC9C,sCAAsC;AAEtC;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;AAE5C;;;;GAIG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAEjE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gDA8JuC,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAwEnD,CAAC;AACT,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,IAAI;IACjB,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;IAEpD,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE9C,MAAM,SAAS,GAAG,iBAAiB,EAAE,CAAC;QACtC,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QAC/C,MAAM,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QAEjD,OAAO,CAAC,GAAG,CAAC,oCAAoC,SAAS,EAAE,CAAC,CAAC;IAC/D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,OAAO,CAAC,CAAC;QAClE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,2DAA2D;AAC3D,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACxF,IAAI,EAAE,CAAC;AACT,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * @module Utils/HtmlSanitize
3
+ * @description Shared HTML sanitization helpers used across the generation,
4
+ * validation, and quality-scoring pipelines.
5
+ */
6
+ /**
7
+ * Remove all `<script>…</script>` blocks from an HTML string, replacing each
8
+ * with a single space.
9
+ *
10
+ * Uses iterative index-based scanning instead of a single-pass regex so that
11
+ * CodeQL does not flag the pattern as an insecure HTML tag filter
12
+ * (`js/bad-tag-filter`).
13
+ *
14
+ * @param html - HTML string to strip
15
+ * @returns The HTML with script blocks replaced by spaces
16
+ */
17
+ export declare function stripScriptBlocks(html: string): string;
18
+ //# sourceMappingURL=html-sanitize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html-sanitize.d.ts","sourceRoot":"","sources":["../../src/utils/html-sanitize.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AAEH;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAsCtD"}
@@ -0,0 +1,57 @@
1
+ // SPDX-FileCopyrightText: 2024-2026 Hack23 AB
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ /**
4
+ * @module Utils/HtmlSanitize
5
+ * @description Shared HTML sanitization helpers used across the generation,
6
+ * validation, and quality-scoring pipelines.
7
+ */
8
+ /**
9
+ * Remove all `<script>…</script>` blocks from an HTML string, replacing each
10
+ * with a single space.
11
+ *
12
+ * Uses iterative index-based scanning instead of a single-pass regex so that
13
+ * CodeQL does not flag the pattern as an insecure HTML tag filter
14
+ * (`js/bad-tag-filter`).
15
+ *
16
+ * @param html - HTML string to strip
17
+ * @returns The HTML with script blocks replaced by spaces
18
+ */
19
+ export function stripScriptBlocks(html) {
20
+ const OPEN = '<script';
21
+ const CLOSE = '</script';
22
+ let result = '';
23
+ let pos = 0;
24
+ const lower = html.toLowerCase();
25
+ while (pos < html.length) {
26
+ const openIdx = lower.indexOf(OPEN, pos);
27
+ if (openIdx < 0) {
28
+ result += html.slice(pos);
29
+ break;
30
+ }
31
+ // Copy everything before the opening <script
32
+ result += html.slice(pos, openIdx);
33
+ // Find the end of the opening tag
34
+ const openEnd = html.indexOf('>', openIdx);
35
+ if (openEnd < 0) {
36
+ // Malformed — no closing `>`, keep rest as-is
37
+ result += html.slice(openIdx);
38
+ break;
39
+ }
40
+ // Find the closing </script...> tag
41
+ const closeIdx = lower.indexOf(CLOSE, openEnd + 1);
42
+ if (closeIdx < 0) {
43
+ // No closing tag — drop the rest
44
+ result += ' ';
45
+ break;
46
+ }
47
+ const closeEnd = html.indexOf('>', closeIdx);
48
+ if (closeEnd < 0) {
49
+ result += ' ';
50
+ break;
51
+ }
52
+ result += ' ';
53
+ pos = closeEnd + 1;
54
+ }
55
+ return result;
56
+ }
57
+ //# sourceMappingURL=html-sanitize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html-sanitize.js","sourceRoot":"","sources":["../../src/utils/html-sanitize.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,sCAAsC;AAEtC;;;;GAIG;AAEH;;;;;;;;;;GAUG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,MAAM,IAAI,GAAG,SAAS,CAAC;IACvB,MAAM,KAAK,GAAG,UAAU,CAAC;IACzB,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAEjC,OAAO,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACzC,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;YAChB,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC1B,MAAM;QACR,CAAC;QACD,6CAA6C;QAC7C,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACnC,kCAAkC;QAClC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC3C,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;YAChB,8CAA8C;YAC9C,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC9B,MAAM;QACR,CAAC;QACD,oCAAoC;QACpC,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;QACnD,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;YACjB,iCAAiC;YACjC,MAAM,IAAI,GAAG,CAAC;YACd,MAAM;QACR,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC7C,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,CAAC;YACd,MAAM;QACR,CAAC;QACD,MAAM,IAAI,GAAG,CAAC;QACd,GAAG,GAAG,QAAQ,GAAG,CAAC,CAAC;IACrB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,173 @@
1
+ import type { VotingAnomalyIntelligence, CoalitionIntelligence, MEPInfluenceScore, LegislativeVelocity, StakeholderPerspective, StakeholderOutcomeMatrix, AnalysisStakeholderType, VotingRecord, VotingPattern, VotingIntensity, CoalitionShift, PolarizationIndex, VotingTrend, CoalitionStabilityReport, LegislativeVelocityReport, LegislativeDocument } from '../types/index.js';
2
+ /**
3
+ * Parse and score a voting anomaly from raw MCP data.
4
+ * Returns null for null, undefined, non-object, or inputs missing a valid
5
+ * anomaly identifier.
6
+ *
7
+ * @param rawAnomaly - Raw MCP anomaly data (unknown shape)
8
+ * @returns Structured VotingAnomalyIntelligence or null if input is invalid
9
+ */
10
+ export declare function scoreVotingAnomaly(rawAnomaly: unknown): VotingAnomalyIntelligence | null;
11
+ /**
12
+ * Analyse a coalition's cohesion from raw MCP coalition data.
13
+ * Returns null for null, undefined, non-object, or inputs missing a valid
14
+ * coalition identifier.
15
+ *
16
+ * @param rawCoalition - Raw MCP coalition data (unknown shape)
17
+ * @returns Structured CoalitionIntelligence or null if input is invalid
18
+ */
19
+ export declare function analyzeCoalitionCohesion(rawCoalition: unknown): CoalitionIntelligence | null;
20
+ /**
21
+ * Extract and score MEP influence from raw MCP influence data.
22
+ * Returns null for null, undefined, non-object, or inputs missing both a
23
+ * valid MEP identifier and display name.
24
+ *
25
+ * @param rawInfluence - Raw MCP MEP influence data (unknown shape)
26
+ * @returns Structured MEPInfluenceScore or null if input is invalid
27
+ */
28
+ export declare function scoreMEPInfluence(rawInfluence: unknown): MEPInfluenceScore | null;
29
+ /**
30
+ * Calculate legislative velocity from raw MCP procedure data.
31
+ * Returns null for null, undefined, non-object, or inputs missing a valid
32
+ * procedure identifier or title.
33
+ *
34
+ * @param rawProcedure - Raw MCP procedure data (unknown shape)
35
+ * @returns Structured LegislativeVelocity or null if input is invalid
36
+ */
37
+ export declare function calculateLegislativeVelocity(rawProcedure: unknown): LegislativeVelocity | null;
38
+ /**
39
+ * Sort items by significance level descending, with numeric score as
40
+ * tie-breaker. Items with higher significance or scores appear first.
41
+ * The original array is not mutated.
42
+ *
43
+ * @param items - Array of items with optional significance and score fields
44
+ * @returns New sorted array ordered by significance then score
45
+ */
46
+ export declare function rankBySignificance<T extends {
47
+ significance?: string | undefined;
48
+ overallScore?: number | undefined;
49
+ cohesionScore?: number | undefined;
50
+ }>(items: T[]): T[];
51
+ /**
52
+ * Build an HTML section element for displaying intelligence items as a list.
53
+ * All title, className, and item strings are HTML-escaped to prevent XSS.
54
+ * Returns an empty string when the items array is empty.
55
+ *
56
+ * @param title - Section heading text (will be HTML-escaped)
57
+ * @param items - Array of text items to display as list entries (will be HTML-escaped)
58
+ * @param className - CSS class name for the section element (will be HTML-escaped)
59
+ * @returns HTML string for the intelligence section, or empty string if no items
60
+ */
61
+ export declare function buildIntelligenceSection(title: string, items: string[], className: string): string;
62
+ /**
63
+ * Build a default set of stakeholder perspectives for a parliamentary action.
64
+ * Each perspective is seeded with a reasoning string and evidence items derived
65
+ * from the provided topic and impact scores. All six stakeholder groups receive
66
+ * a perspective entry.
67
+ *
68
+ * @param topic - Short description of the parliamentary action (e.g. vote title)
69
+ * @param scores - Optional per-stakeholder importance scores (0-1); defaults to 0.5
70
+ * @returns Array of six StakeholderPerspective objects, one per stakeholder group
71
+ */
72
+ export declare function buildDefaultStakeholderPerspectives(topic: string, scores?: Partial<Record<AnalysisStakeholderType, number>>): StakeholderPerspective[];
73
+ /**
74
+ * Score stakeholder influence from raw MCP data.
75
+ * Returns null for null, undefined, non-object, or missing stakeholder type.
76
+ *
77
+ * @param rawData - Raw stakeholder influence data (unknown shape)
78
+ * @returns Structured StakeholderPerspective or null if input is invalid
79
+ */
80
+ export declare function scoreStakeholderInfluence(rawData: unknown): StakeholderPerspective | null;
81
+ /**
82
+ * Build a StakeholderOutcomeMatrix row for a single parliamentary action.
83
+ * Derives outcomes from per-stakeholder scores: score > 0.6 → winner,
84
+ * score < 0.4 → loser, otherwise neutral.
85
+ *
86
+ * @param action - The parliamentary action being assessed
87
+ * @param scores - Per-stakeholder importance scores (0-1); defaults to 0.5
88
+ * @param confidence - Confidence level for the outcome assessments
89
+ * @returns A StakeholderOutcomeMatrix row
90
+ */
91
+ export declare function buildStakeholderOutcomeMatrix(action: string, scores?: Partial<Record<AnalysisStakeholderType, number>>, confidence?: StakeholderOutcomeMatrix['confidence']): StakeholderOutcomeMatrix;
92
+ /**
93
+ * Map an array of StakeholderPerspective objects to a simple influence ranking.
94
+ * Returns stakeholder types sorted by severity (high → medium → low), then by
95
+ * impact direction (negative before positive, as negative impacts require more
96
+ * political attention).
97
+ *
98
+ * @param perspectives - Array of stakeholder perspectives to rank
99
+ * @returns Stakeholder types sorted by influence priority
100
+ */
101
+ export declare function rankStakeholdersByInfluence(perspectives: readonly StakeholderPerspective[]): AnalysisStakeholderType[];
102
+ /**
103
+ * Compute voting intensity metrics from a set of voting records.
104
+ * Analyses the distribution of for/against/abstain votes to determine
105
+ * unanimity, polarization, and margin characteristics.
106
+ *
107
+ * @param records - Voting records to analyse
108
+ * @returns VotingIntensity metrics, or null if the records array is empty or contains no
109
+ * valid vote counts (for example, when all records have a total vote count of 0)
110
+ */
111
+ export declare function computeVotingIntensity(records: readonly VotingRecord[]): VotingIntensity | null;
112
+ /**
113
+ * Detect coalition shifts by comparing current cohesion patterns against
114
+ * a baseline. Stability threshold is ±5%; severity tiers are >5% (medium),
115
+ * >10% (high), and >20% (critical).
116
+ *
117
+ * @param currentPatterns - Current period voting patterns
118
+ * @param baselinePatterns - Previous period patterns (or estimated baseline)
119
+ * @returns Array of detected coalition shifts, sorted by significance
120
+ */
121
+ export declare function detectCoalitionShifts(currentPatterns: readonly VotingPattern[], baselinePatterns: readonly VotingPattern[]): CoalitionShift[];
122
+ /**
123
+ * Compute a polarization index for a parliamentary period based on
124
+ * voting pattern cohesion data. Uses a Laakso-Taagepera–inspired
125
+ * "effective number of blocs" calculation alongside cohesion analysis.
126
+ *
127
+ * @param patterns - Voting patterns for the period
128
+ * @returns PolarizationIndex assessment, or null if patterns are empty
129
+ */
130
+ export declare function computePolarizationIndex(patterns: readonly VotingPattern[]): PolarizationIndex | null;
131
+ /**
132
+ * Detect voting trends across multiple voting records by analysing
133
+ * margin distribution, polarization patterns, and result consistency.
134
+ * Records are sorted by date (ascending) before analysis to ensure
135
+ * chronological trend detection. Returns an array of detected trends
136
+ * sorted by confidence.
137
+ *
138
+ * @param records - Voting records to analyse across sessions
139
+ * @returns Array of detected VotingTrend objects (empty if fewer than 2 valid records)
140
+ */
141
+ export declare function detectVotingTrends(records: readonly VotingRecord[]): VotingTrend[];
142
+ /**
143
+ * Compute cross-session coalition stability by analysing average cohesion
144
+ * across a set of voting patterns. Groups with high cohesion are reported
145
+ * as stable; those with low cohesion are flagged.
146
+ *
147
+ * @param patterns - Voting patterns from multiple sessions
148
+ * @returns CoalitionStabilityReport (empty report if no patterns)
149
+ */
150
+ export declare function computeCrossSessionCoalitionStability(patterns: readonly VotingPattern[]): CoalitionStabilityReport;
151
+ /**
152
+ * Rank MEP influence scores filtered by topic relevance.
153
+ * Matches scores whose mepName, mepId, or rank contains the topic substring
154
+ * (case-insensitive). Returns the filtered list sorted by overallScore
155
+ * descending. If topic is empty or no matches found, returns all scores
156
+ * sorted by overallScore.
157
+ *
158
+ * @param scores - MEP influence scores to rank
159
+ * @param topic - Topic keyword to filter by; if null/undefined/empty, all
160
+ * scores are returned sorted by overallScore
161
+ * @returns Sorted array of matching MEPInfluenceScore entries
162
+ */
163
+ export declare function rankMEPInfluenceByTopic(scores: readonly MEPInfluenceScore[], topic: string | null | undefined): MEPInfluenceScore[];
164
+ /**
165
+ * Build a legislative velocity report with stage-by-stage breakdown from
166
+ * a set of legislative documents. Analyses document status distribution
167
+ * and identifies potential bottlenecks.
168
+ *
169
+ * @param docs - Legislative documents to analyse
170
+ * @returns LegislativeVelocityReport summary
171
+ */
172
+ export declare function buildLegislativeVelocityReport(docs: readonly LegislativeDocument[]): LegislativeVelocityReport;
173
+ //# sourceMappingURL=intelligence-analysis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intelligence-analysis.d.ts","sourceRoot":"","sources":["../../src/utils/intelligence-analysis.ts"],"names":[],"mappings":"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"}