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,352 @@
1
+ import type { EuropeanParliamentMCPClient } from '../../mcp/ep-mcp-client.js';
2
+ import type { WeekAheadData, DateRange, CommitteeData, VotingRecord, VotingPattern, VotingAnomaly, MotionsQuestion, AdoptedTextFeedItem, EventFeedItem, ProcedureFeedItem, MEPFeedItem, DocumentFeedItem, QuestionFeedItem, DeclarationFeedItem, CorporateBodyFeedItem, BreakingNewsFeedData, EPFeedData, FeedTimeframe } from '../../types/index.js';
3
+ import type { PipelineData } from '../propositions-content.js';
4
+ export { CircuitBreaker, type CircuitState, type CircuitBreakerOptions, } from '../../mcp/mcp-retry.js';
5
+ import { CircuitBreaker } from '../../mcp/mcp-retry.js';
6
+ /** Module-level circuit breaker shared across all MCP fetch operations */
7
+ export declare const mcpCircuitBreaker: CircuitBreaker;
8
+ /**
9
+ * Compute an inclusive UTC date window ending on `endDate`.
10
+ *
11
+ * @param endDate - Inclusive UTC end date in `YYYY-MM-DD` form
12
+ * @param lookbackDays - Number of calendar days to subtract for the start date
13
+ * @param context - Label used in error messages
14
+ * @returns Inclusive date range
15
+ */
16
+ export declare function computeRollingDateRange(endDate: string, lookbackDays: number, context: string): DateRange;
17
+ /**
18
+ * Attempt to connect to the European Parliament MCP server.
19
+ * Returns `null` (with a warning) if the connection fails or MCP is disabled.
20
+ *
21
+ * @param useMCP - Whether MCP should be used at all
22
+ * @returns Connected client or null
23
+ */
24
+ export declare function initializeMCPClient(useMCP: boolean): Promise<EuropeanParliamentMCPClient | null>;
25
+ /**
26
+ * Load pre-fetched feed data from a JSON file on disk.
27
+ *
28
+ * Agentic workflows fetch EP data via framework MCP tools but the TypeScript
29
+ * generator cannot access those tools directly. The workflow saves the MCP
30
+ * results to a JSON file and the generator reads them via this function,
31
+ * avoiding the need to manually construct article HTML.
32
+ *
33
+ * The file must contain a JSON object. The optional keys
34
+ * `adoptedTexts`, `events`, `procedures`, and `mepUpdates` are treated as
35
+ * arrays and default to empty arrays when missing (an empty object `{}` is valid).
36
+ *
37
+ * @param filePath - Absolute or relative path to the JSON file
38
+ * @param dateRange - Optional inclusive UTC window for filtering loaded items
39
+ * @returns Parsed {@link BreakingNewsFeedData}, or `undefined` on any error
40
+ */
41
+ export declare function loadFeedDataFromFile(filePath: string, dateRange?: DateRange): BreakingNewsFeedData | undefined;
42
+ /**
43
+ * Load pre-fetched comprehensive EP feed data from a JSON file on disk.
44
+ *
45
+ * Agentic workflows fetch EP data via framework MCP tools but the TypeScript
46
+ * generator cannot access those tools directly. The workflow saves the MCP
47
+ * results to a JSON file and the generator reads them via this function,
48
+ * avoiding the need to manually construct article HTML.
49
+ *
50
+ * The file must contain a JSON object with EP feed data keys.
51
+ * Missing keys default to empty arrays.
52
+ *
53
+ * @param filePath - Absolute or relative path to the JSON file
54
+ * @param dateRange - Optional inclusive UTC window for filtering loaded items
55
+ * @returns Parsed {@link EPFeedData}, or `undefined` on any error
56
+ */
57
+ export declare function loadEPFeedDataFromFile(filePath: string, dateRange?: DateRange): EPFeedData | undefined;
58
+ /**
59
+ * Fetch aggregated week-ahead data from multiple MCP sources in parallel.
60
+ * Returns placeholder data when the client is unavailable.
61
+ *
62
+ * @param client - MCP client or null
63
+ * @param dateRange - Date range for the week-ahead period
64
+ * @returns Aggregated week-ahead data
65
+ */
66
+ export declare function fetchWeekAheadData(client: EuropeanParliamentMCPClient | null, dateRange: DateRange): Promise<WeekAheadData>;
67
+ /**
68
+ * Fetch voting anomaly text from MCP, returning empty string on failure.
69
+ *
70
+ * @param client - MCP client or null
71
+ * @returns Raw anomaly data text
72
+ */
73
+ export declare function fetchVotingAnomalies(client: EuropeanParliamentMCPClient | null): Promise<string>;
74
+ /**
75
+ * Fetch coalition dynamics analysis text from MCP.
76
+ *
77
+ * @param client - MCP client or null
78
+ * @returns Raw coalition dynamics text
79
+ */
80
+ export declare function fetchCoalitionDynamics(client: EuropeanParliamentMCPClient | null): Promise<string>;
81
+ /**
82
+ * Fetch voting statistics report text from MCP.
83
+ *
84
+ * @param client - MCP client or null
85
+ * @returns Raw voting report text
86
+ */
87
+ export declare function fetchVotingReport(client: EuropeanParliamentMCPClient | null): Promise<string>;
88
+ /**
89
+ * Fetch MEP influence assessment text from MCP.
90
+ * Short-circuits immediately when `mepId` is empty.
91
+ *
92
+ * @param client - MCP client or null
93
+ * @param mepId - MEP identifier; pass empty string to skip the call
94
+ * @returns Raw influence data text
95
+ */
96
+ export declare function fetchMEPInfluence(client: EuropeanParliamentMCPClient | null, mepId: string): Promise<string>;
97
+ /**
98
+ * Load pre-fetched committee data for a given abbreviation from a JSON file.
99
+ *
100
+ * The file must be a JSON object keyed by committee abbreviation, where each
101
+ * value conforms to {@link CommitteeData}. This allows agentic workflows to
102
+ * inject real EP committee data into the generator without a live MCP
103
+ * connection (same pattern as {@link loadEPFeedDataFromFile}).
104
+ *
105
+ * @param filePath - Path to the JSON file
106
+ * @param abbreviation - Committee code (e.g. `"ENVI"`)
107
+ * @returns Parsed {@link CommitteeData} for the committee, or `undefined`
108
+ */
109
+ export declare function loadCommitteeDataFromFile(filePath: string, abbreviation: string): CommitteeData | undefined;
110
+ /**
111
+ * Fetch committee info directly from the EP v2 API as a fallback when MCP
112
+ * returns placeholder data. Uses `GET /corporate-bodies/{abbreviation}` which
113
+ * is the canonical lookup for a committee by its code (e.g. `ENVI`).
114
+ *
115
+ * This function is intentionally conservative: it primarily populates `name`
116
+ * and `abbreviation`, and may populate `members` from `inverse_isVersionOf`
117
+ * when available. Placeholder status is broken by changing `members` from `0`
118
+ * (placeholder criteria is chair='N/A' AND members=0 AND docs=[]).
119
+ *
120
+ * @param abbreviation - Committee abbreviation (e.g. `"ENVI"`)
121
+ * @param data - Existing committee data to enrich
122
+ */
123
+ export declare function fetchCommitteeInfoFromEPAPI(abbreviation: string, data: CommitteeData): Promise<void>;
124
+ /**
125
+ * Fetch committee data from three MCP sources for the given abbreviation.
126
+ * Each source failure is caught individually so partial data is still returned.
127
+ *
128
+ * When the environment variable `EP_COMMITTEE_DATA_FILE` is set, pre-fetched
129
+ * committee data is loaded from that JSON file instead of calling the MCP
130
+ * client. This enables agentic workflows to inject real EP data.
131
+ *
132
+ * When MCP returns placeholder data (chair=N/A, members=0, docs=[]),
133
+ * a direct call to the EP v2 API is attempted as a fallback to populate
134
+ * at least the committee name and abbreviation.
135
+ *
136
+ * @param client - MCP client or null
137
+ * @param abbreviation - Committee code (e.g. `"ENVI"`)
138
+ * @returns Populated committee data
139
+ */
140
+ export declare function fetchCommitteeData(client: EuropeanParliamentMCPClient | null, abbreviation: string): Promise<CommitteeData>;
141
+ /**
142
+ * Fetch recent voting records from MCP.
143
+ *
144
+ * @param client - MCP client or null
145
+ * @param dateFromStr - Start date (YYYY-MM-DD)
146
+ * @param dateStr - End date (YYYY-MM-DD)
147
+ * @returns Array of voting records
148
+ */
149
+ export declare function fetchVotingRecords(client: EuropeanParliamentMCPClient | null, dateFromStr: string, dateStr: string): Promise<VotingRecord[]>;
150
+ /**
151
+ * Fetch voting patterns from MCP.
152
+ *
153
+ * @param client - MCP client or null
154
+ * @param dateFromStr - Start date
155
+ * @param dateStr - End date
156
+ * @returns Array of voting patterns
157
+ */
158
+ export declare function fetchVotingPatterns(client: EuropeanParliamentMCPClient | null, dateFromStr: string, dateStr: string): Promise<VotingPattern[]>;
159
+ /**
160
+ * Fetch voting anomalies for a date range from MCP.
161
+ *
162
+ * @param client - MCP client or null
163
+ * @param dateFromStr - Start date
164
+ * @param dateStr - End date
165
+ * @returns Array of voting anomalies
166
+ */
167
+ export declare function fetchMotionsAnomalies(client: EuropeanParliamentMCPClient | null, dateFromStr: string, dateStr: string): Promise<VotingAnomaly[]>;
168
+ /**
169
+ * Fetch parliamentary questions from MCP for the given date range.
170
+ *
171
+ * @param client - MCP client or null
172
+ * @param dateFromStr - Start date
173
+ * @param dateStr - End date
174
+ * @returns Array of parliamentary questions
175
+ */
176
+ export declare function fetchParliamentaryQuestionsForMotions(client: EuropeanParliamentMCPClient | null, dateFromStr: string, dateStr: string): Promise<MotionsQuestion[]>;
177
+ /**
178
+ * Fetch all motions data in parallel, applying fallback arrays for any
179
+ * section where MCP returned nothing.
180
+ *
181
+ * @param client - MCP client or null
182
+ * @param dateFromStr - Start date
183
+ * @param dateStr - End date
184
+ * @returns All motions data with fallbacks applied
185
+ */
186
+ export declare function fetchMotionsData(client: EuropeanParliamentMCPClient | null, dateFromStr: string, dateStr: string): Promise<{
187
+ votingRecords: VotingRecord[];
188
+ votingPatterns: VotingPattern[];
189
+ anomalies: VotingAnomaly[];
190
+ questions: MotionsQuestion[];
191
+ }>;
192
+ /**
193
+ * Fetch legislative proposals from MCP and build pre-sanitised HTML.
194
+ *
195
+ * @param client - MCP client or null
196
+ * @returns Proposals HTML and the first procedure ID found (if any)
197
+ */
198
+ export declare function fetchProposalsFromMCP(client: EuropeanParliamentMCPClient | null): Promise<{
199
+ html: string;
200
+ firstProcedureId: string;
201
+ }>;
202
+ /**
203
+ * Fetch active legislative pipeline data from MCP.
204
+ *
205
+ * @param client - MCP client or null
206
+ * @returns Structured pipeline data or null when unavailable
207
+ */
208
+ export declare function fetchPipelineFromMCP(client: EuropeanParliamentMCPClient | null): Promise<PipelineData | null>;
209
+ /**
210
+ * Fetch a specific procedure's tracked-status HTML from MCP.
211
+ * Returns empty string when `procedureId` is empty or MCP is unavailable.
212
+ *
213
+ * @param client - MCP client or null
214
+ * @param procedureId - Procedure ID (e.g. `"2024/0001(COD)"`)
215
+ * @returns HTML snippet for the procedure status section
216
+ */
217
+ export declare function fetchProcedureStatusFromMCP(client: EuropeanParliamentMCPClient | null, procedureId: string): Promise<string>;
218
+ /**
219
+ * Fetch adopted texts feed from MCP.
220
+ *
221
+ * @param client - MCP client or null
222
+ * @param timeframe - How far back to look (default: 'one-day')
223
+ * @returns Array of adopted text feed items
224
+ */
225
+ export declare function fetchAdoptedTextsFeed(client: EuropeanParliamentMCPClient | null, timeframe?: FeedTimeframe): Promise<AdoptedTextFeedItem[]>;
226
+ /**
227
+ * Fetch events feed from MCP.
228
+ *
229
+ * @param client - MCP client or null
230
+ * @param timeframe - How far back to look (default: 'one-day')
231
+ * @returns Array of event feed items
232
+ */
233
+ export declare function fetchEventsFeed(client: EuropeanParliamentMCPClient | null, timeframe?: FeedTimeframe): Promise<EventFeedItem[]>;
234
+ /**
235
+ * Fetch procedures feed from MCP.
236
+ *
237
+ * @param client - MCP client or null
238
+ * @param timeframe - How far back to look (default: 'one-day')
239
+ * @returns Array of procedure feed items
240
+ */
241
+ export declare function fetchProceduresFeed(client: EuropeanParliamentMCPClient | null, timeframe?: FeedTimeframe): Promise<ProcedureFeedItem[]>;
242
+ /**
243
+ * Fetch MEPs feed from MCP.
244
+ *
245
+ * @param client - MCP client or null
246
+ * @param timeframe - How far back to look (default: 'one-day')
247
+ * @returns Array of MEP feed items
248
+ */
249
+ export declare function fetchMEPsFeed(client: EuropeanParliamentMCPClient | null, timeframe?: FeedTimeframe): Promise<MEPFeedItem[]>;
250
+ /**
251
+ * Fetch MEPs feed from MCP, returning both items and the API's reported total count.
252
+ * The `total` from the API response reflects all matching records in the feed,
253
+ * which may exceed the `limit` parameter (currently capped at 100 per request).
254
+ *
255
+ * The limit is set to 100 (the EP API maximum) so the fetched sample is large
256
+ * enough to populate a meaningful truncation note ("showing 10 of N") while
257
+ * keeping each request bounded. When the feed contains more than 100 MEP
258
+ * updates, the `total` field in the API response carries the true count.
259
+ *
260
+ * @param client - MCP client or null
261
+ * @param timeframe - How far back to look (default: 'one-day')
262
+ * @returns Object with `items` array and `total` count from the API
263
+ */
264
+ export declare function fetchMEPsFeedWithTotal(client: EuropeanParliamentMCPClient | null, timeframe?: FeedTimeframe): Promise<{
265
+ items: MEPFeedItem[];
266
+ total: number;
267
+ }>;
268
+ /**
269
+ * Fetch documents feed from MCP.
270
+ *
271
+ * @param client - MCP client or null
272
+ * @param timeframe - How far back to look (default: 'one-day')
273
+ * @returns Array of document feed items
274
+ */
275
+ export declare function fetchDocumentsFeed(client: EuropeanParliamentMCPClient | null, timeframe?: FeedTimeframe): Promise<DocumentFeedItem[]>;
276
+ /**
277
+ * Fetch plenary documents feed from MCP.
278
+ *
279
+ * @param client - MCP client or null
280
+ * @param timeframe - How far back to look (default: 'one-day')
281
+ * @returns Array of document feed items
282
+ */
283
+ export declare function fetchPlenaryDocumentsFeed(client: EuropeanParliamentMCPClient | null, timeframe?: FeedTimeframe): Promise<DocumentFeedItem[]>;
284
+ /**
285
+ * Fetch committee documents feed from MCP.
286
+ *
287
+ * @param client - MCP client or null
288
+ * @param timeframe - How far back to look (default: 'one-day')
289
+ * @returns Array of document feed items
290
+ */
291
+ export declare function fetchCommitteeDocumentsFeed(client: EuropeanParliamentMCPClient | null, timeframe?: FeedTimeframe): Promise<DocumentFeedItem[]>;
292
+ /**
293
+ * Fetch plenary session documents feed from MCP.
294
+ *
295
+ * @param client - MCP client or null
296
+ * @param timeframe - How far back to look (default: 'one-day')
297
+ * @returns Array of document feed items
298
+ */
299
+ export declare function fetchPlenarySessionDocumentsFeed(client: EuropeanParliamentMCPClient | null, timeframe?: FeedTimeframe): Promise<DocumentFeedItem[]>;
300
+ /**
301
+ * Fetch external documents feed from MCP.
302
+ *
303
+ * @param client - MCP client or null
304
+ * @param timeframe - How far back to look (default: 'one-day')
305
+ * @returns Array of document feed items
306
+ */
307
+ export declare function fetchExternalDocumentsFeed(client: EuropeanParliamentMCPClient | null, timeframe?: FeedTimeframe): Promise<DocumentFeedItem[]>;
308
+ /**
309
+ * Fetch parliamentary questions feed from MCP.
310
+ *
311
+ * @param client - MCP client or null
312
+ * @param timeframe - How far back to look (default: 'one-day')
313
+ * @returns Array of question feed items
314
+ */
315
+ export declare function fetchQuestionsFeed(client: EuropeanParliamentMCPClient | null, timeframe?: FeedTimeframe): Promise<QuestionFeedItem[]>;
316
+ /**
317
+ * Fetch MEP declarations feed from MCP.
318
+ *
319
+ * @param client - MCP client or null
320
+ * @param timeframe - How far back to look (default: 'one-day')
321
+ * @returns Array of declaration feed items
322
+ */
323
+ export declare function fetchDeclarationsFeed(client: EuropeanParliamentMCPClient | null, timeframe?: FeedTimeframe): Promise<DeclarationFeedItem[]>;
324
+ /**
325
+ * Fetch corporate bodies feed from MCP.
326
+ *
327
+ * @param client - MCP client or null
328
+ * @param timeframe - How far back to look (default: 'one-day')
329
+ * @returns Array of corporate body feed items
330
+ */
331
+ export declare function fetchCorporateBodiesFeed(client: EuropeanParliamentMCPClient | null, timeframe?: FeedTimeframe): Promise<CorporateBodyFeedItem[]>;
332
+ /**
333
+ * Fetch all EP feed data for breaking news articles.
334
+ * Calls adopted texts, events, procedures, and MEPs feeds in parallel.
335
+ * Returns `undefined` when client is null (MCP unavailable).
336
+ *
337
+ * @param client - MCP client or null
338
+ * @param timeframe - How far back to look (default: 'one-day')
339
+ * @returns Aggregated feed data for breaking news, or undefined when client is null
340
+ */
341
+ export declare function fetchBreakingNewsFeedData(client: EuropeanParliamentMCPClient | null, timeframe?: FeedTimeframe): Promise<BreakingNewsFeedData | undefined>;
342
+ /**
343
+ * Fetch comprehensive EP feed data from all 12 feed endpoints in parallel.
344
+ * This is the primary data source for all article strategies.
345
+ *
346
+ * @param client - MCP client or null
347
+ * @param timeframe - How far back to look (default: 'one-day')
348
+ * @param dateRange - Optional inclusive UTC window for filtering feed items
349
+ * @returns Full EPFeedData or undefined when client is null
350
+ */
351
+ export declare function fetchEPFeedData(client: EuropeanParliamentMCPClient | null, timeframe?: FeedTimeframe, dateRange?: DateRange): Promise<EPFeedData | undefined>;
352
+ //# sourceMappingURL=fetch-stage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch-stage.d.ts","sourceRoot":"","sources":["../../../src/generators/pipeline/fetch-stage.ts"],"names":[],"mappings":"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"}