euparliamentmonitor 0.8.7 → 0.8.8
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.
- package/package.json +3 -2
- package/scripts/generators/news-enhanced.d.ts.map +1 -1
- package/scripts/generators/news-enhanced.js +22 -5
- package/scripts/generators/news-enhanced.js.map +1 -1
- package/scripts/generators/pipeline/analysis-stage.d.ts +50 -4
- package/scripts/generators/pipeline/analysis-stage.d.ts.map +1 -1
- package/scripts/generators/pipeline/analysis-stage.js +249 -11
- package/scripts/generators/pipeline/analysis-stage.js.map +1 -1
- package/scripts/index.d.ts +1 -1
- package/scripts/index.d.ts.map +1 -1
- package/scripts/index.js +1 -1
- package/scripts/index.js.map +1 -1
- package/scripts/types/political-classification.d.ts +1 -1
- package/scripts/utils/political-classification.d.ts +22 -13
- package/scripts/utils/political-classification.d.ts.map +1 -1
- package/scripts/utils/political-classification.js +47 -14
- package/scripts/utils/political-classification.js.map +1 -1
- package/scripts/utils/political-risk-assessment.d.ts +1 -1
- package/scripts/utils/political-risk-assessment.js +1 -1
- package/scripts/utils/political-threat-assessment.d.ts +1 -1
- package/scripts/utils/political-threat-assessment.js +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "euparliamentmonitor",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.8",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "European Parliament Intelligence Platform - Monitor political activity with systematic transparency",
|
|
6
6
|
"main": "scripts/index.js",
|
|
@@ -126,6 +126,7 @@
|
|
|
126
126
|
"worldbank-mcp": "1.0.1"
|
|
127
127
|
},
|
|
128
128
|
"overrides": {
|
|
129
|
-
"flatted": ">=3.4.2"
|
|
129
|
+
"flatted": ">=3.4.2",
|
|
130
|
+
"path-to-regexp": ">=8.4.0"
|
|
130
131
|
}
|
|
131
132
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"news-enhanced.d.ts","sourceRoot":"","sources":["../../src/generators/news-enhanced.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"news-enhanced.d.ts","sourceRoot":"","sources":["../../src/generators/news-enhanced.ts"],"names":[],"mappings":";AAgFA,OAAO,EACL,oBAAoB,EACpB,aAAa,EACb,sBAAsB,EACtB,yBAAyB,EACzB,wBAAwB,EACxB,2BAA2B,EAC3B,qBAAqB,EACrB,aAAa,EACb,kBAAkB,EAClB,uBAAuB,EACvB,4BAA4B,EAC5B,+BAA+B,EAChC,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,wBAAwB,EACxB,6BAA6B,EAC7B,sBAAsB,EACvB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,kBAAkB,EAClB,sBAAsB,EACtB,sBAAsB,EACtB,8BAA8B,EAC/B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAI9D,OAAO,EACL,oBAAoB,EACpB,aAAa,EACb,sBAAsB,EACtB,yBAAyB,EACzB,wBAAwB,EACxB,2BAA2B,EAC3B,qBAAqB,EACrB,aAAa,EACb,kBAAkB,EAClB,uBAAuB,EACvB,4BAA4B,EAC5B,+BAA+B,GAChC,CAAC;AACF,OAAO,EAAE,wBAAwB,EAAE,6BAA6B,EAAE,sBAAsB,EAAE,CAAC;AAC3F,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,CAAC;AACvF,OAAO,EACL,kBAAkB,EAClB,sBAAsB,EACtB,sBAAsB,EACtB,8BAA8B,GAC/B,CAAC;AACF,OAAO,EAAE,wBAAwB,EAAE,CAAC;AACpC,YAAY,EAAE,YAAY,EAAE,CAAC"}
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
*
|
|
12
12
|
* When the `--analysis` flag is supplied (all 9 agentic workflows do this),
|
|
13
13
|
* the analysis stage runs **before** article generation, producing structured
|
|
14
|
-
* political intelligence artifacts under `analysis
|
|
14
|
+
* political intelligence artifacts under `analysis/{date}/{article-type}/`. These
|
|
15
15
|
* artifacts are committed to the repository for review and improvement.
|
|
16
16
|
*
|
|
17
17
|
* Pipeline stages:
|
|
@@ -47,7 +47,7 @@ import { ensureDirectoryExists } from '../utils/file-utils.js';
|
|
|
47
47
|
import { initializeMCPClient, fetchEPFeedData } from './pipeline/fetch-stage.js';
|
|
48
48
|
import { createStrategyRegistry, generateArticleForStrategy } from './pipeline/generate-stage.js';
|
|
49
49
|
import { writeGenerationMetadata } from './pipeline/output-stage.js';
|
|
50
|
-
import { runAnalysisStage, ALL_ANALYSIS_METHODS, hasSubstantiveData, } from './pipeline/analysis-stage.js';
|
|
50
|
+
import { runAnalysisStage, ALL_ANALYSIS_METHODS, VALID_ANALYSIS_METHODS, hasSubstantiveData, deriveArticleTypeSlug, } from './pipeline/analysis-stage.js';
|
|
51
51
|
// ─── Content-module imports (bounded contexts) ───────────────────────────────
|
|
52
52
|
import { parsePlenarySessions, parseEPEvents, parseCommitteeMeetings, parseLegislativeDocuments, parseLegislativePipeline, parseParliamentaryQuestions, buildWeekAheadContent, buildKeywords, PLACEHOLDER_EVENTS, buildWhatToWatchSection, buildStakeholderImpactMatrix, computeWeekPoliticalTemperature, } from './week-ahead-content.js';
|
|
53
53
|
import { buildBreakingNewsContent, scoreBreakingNewsSignificance, SIGNIFICANCE_THRESHOLD, } from './breaking-content.js';
|
|
@@ -124,6 +124,18 @@ const stats = {
|
|
|
124
124
|
timestamp: new Date().toISOString(),
|
|
125
125
|
};
|
|
126
126
|
// ─── Main orchestration ───────────────────────────────────────────────────────
|
|
127
|
+
/**
|
|
128
|
+
* Type guard that narrows a string to {@link AnalysisMethod}.
|
|
129
|
+
*
|
|
130
|
+
* Uses {@link Array.some} so no type assertion is needed — the predicate
|
|
131
|
+
* compares each element directly to the candidate string.
|
|
132
|
+
*
|
|
133
|
+
* @param name - The string to validate
|
|
134
|
+
* @returns `true` when `name` is a recognised analysis method
|
|
135
|
+
*/
|
|
136
|
+
function isValidAnalysisMethod(name) {
|
|
137
|
+
return VALID_ANALYSIS_METHODS.some((m) => m === name);
|
|
138
|
+
}
|
|
127
139
|
/**
|
|
128
140
|
* Parse the `--analysis-methods=` CLI flag into a validated, deduplicated list.
|
|
129
141
|
* Warns on unrecognised method names and falls back to all methods when no valid
|
|
@@ -144,7 +156,7 @@ function parseAnalysisMethods() {
|
|
|
144
156
|
const validMethods = new Set();
|
|
145
157
|
const unknownMethods = [];
|
|
146
158
|
for (const name of requestedNames) {
|
|
147
|
-
if (
|
|
159
|
+
if (isValidAnalysisMethod(name)) {
|
|
148
160
|
validMethods.add(name);
|
|
149
161
|
}
|
|
150
162
|
else {
|
|
@@ -165,7 +177,7 @@ function parseAnalysisMethods() {
|
|
|
165
177
|
* Run the optional analysis stage (Fetch → Analysis) before article generation.
|
|
166
178
|
*
|
|
167
179
|
* This function is **side-effect-only**: it writes analysis markdown and a
|
|
168
|
-
* `manifest.json` to disk under `analysis
|
|
180
|
+
* `manifest.json` to disk under `analysis/{date}/{article-type}/`. The returned
|
|
169
181
|
* {@link AnalysisContext} is informational; strategies read analysis output
|
|
170
182
|
* from disk rather than consuming the context object in-memory. Analysis
|
|
171
183
|
* artifacts are committed to the repository for review and political
|
|
@@ -191,7 +203,7 @@ async function maybeRunAnalysis(date, client) {
|
|
|
191
203
|
const trimmedAnalysisDirBase = rawAnalysisDirBase?.trim();
|
|
192
204
|
const analysisDirBase = trimmedAnalysisDirBase && trimmedAnalysisDirBase.length > 0
|
|
193
205
|
? trimmedAnalysisDirBase
|
|
194
|
-
: 'analysis
|
|
206
|
+
: 'analysis';
|
|
195
207
|
const enabledMethods = parseAnalysisMethods();
|
|
196
208
|
console.log('');
|
|
197
209
|
console.log('🔬 Running analysis stage...');
|
|
@@ -248,12 +260,17 @@ async function maybeRunAnalysis(date, client) {
|
|
|
248
260
|
throw new Error(msg);
|
|
249
261
|
}
|
|
250
262
|
const validArticleTypes = normalizedArticleTypes.filter((t) => VALID_ARTICLE_CATEGORIES.includes(t));
|
|
263
|
+
// Derive a slug from the article types to scope analysis output per workflow,
|
|
264
|
+
// preventing merge conflicts when multiple workflows run on the same date.
|
|
265
|
+
const slug = deriveArticleTypeSlug(validArticleTypes);
|
|
266
|
+
console.log(` Article type slug: ${slug}`);
|
|
251
267
|
// Pass requireData=true so runAnalysisStage enforces data availability
|
|
252
268
|
// and aborts on any failed method — no hollow or partially failed analysis should exist.
|
|
253
269
|
const ctx = await runAnalysisStage(fetchedData, {
|
|
254
270
|
articleTypes: validArticleTypes,
|
|
255
271
|
date,
|
|
256
272
|
outputDir: analysisDirBase,
|
|
273
|
+
articleTypeSlug: slug,
|
|
257
274
|
enabledMethods,
|
|
258
275
|
skipCompleted: true,
|
|
259
276
|
verbose: analysisVerboseArg,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"news-enhanced.js","sourceRoot":"","sources":["../../src/generators/news-enhanced.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"news-enhanced.js","sourceRoot":"","sources":["../../src/generators/news-enhanced.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,14 +22,31 @@ export declare function hasSubstantiveData(data: Record<string, unknown>): boole
|
|
|
22
22
|
export type AnalysisMethod = 'significance-classification' | 'impact-matrix' | 'actor-mapping' | 'forces-analysis' | 'political-stride' | 'actor-threat-profiling' | 'consequence-trees' | 'legislative-disruption' | 'risk-matrix' | 'political-capital-risk' | 'quantitative-swot' | 'legislative-velocity-risk' | 'agent-risk-workflow' | 'deep-analysis' | 'stakeholder-analysis' | 'coalition-analysis' | 'voting-patterns' | 'cross-session-intelligence' | 'document-analysis';
|
|
23
23
|
/** All analysis methods in default execution order */
|
|
24
24
|
export declare const ALL_ANALYSIS_METHODS: readonly AnalysisMethod[];
|
|
25
|
+
/**
|
|
26
|
+
* All valid analysis method names, including opt-in methods like
|
|
27
|
+
* `document-analysis`. Use this for **validation** of user-supplied method
|
|
28
|
+
* names (e.g. the `--analysis-methods` CLI flag). For the default execution
|
|
29
|
+
* set, use {@link ALL_ANALYSIS_METHODS} instead.
|
|
30
|
+
*/
|
|
31
|
+
export declare const VALID_ANALYSIS_METHODS: readonly AnalysisMethod[];
|
|
25
32
|
/** Configuration for the analysis pipeline stage */
|
|
26
33
|
export interface AnalysisStageOptions {
|
|
27
34
|
/** Article categories to analyse */
|
|
28
35
|
readonly articleTypes: readonly ArticleCategory[];
|
|
29
36
|
/** ISO date string (YYYY-MM-DD) for this analysis run */
|
|
30
37
|
readonly date: string;
|
|
31
|
-
/** Base output directory (e.g. 'analysis
|
|
38
|
+
/** Base output directory (e.g. 'analysis') */
|
|
32
39
|
readonly outputDir: string;
|
|
40
|
+
/**
|
|
41
|
+
* Filesystem-safe slug identifying the article type for this run.
|
|
42
|
+
*
|
|
43
|
+
* When provided, analysis output is scoped to `{outputDir}/{date}/{slug}/`
|
|
44
|
+
* instead of `{outputDir}/{date}/`, preventing merge conflicts when multiple
|
|
45
|
+
* agentic workflows run concurrently for different article types on the same date.
|
|
46
|
+
*
|
|
47
|
+
* Use {@link deriveArticleTypeSlug} to compute the slug from article types.
|
|
48
|
+
*/
|
|
49
|
+
readonly articleTypeSlug?: string | undefined;
|
|
33
50
|
/** Which methods to run; defaults to {@link ALL_ANALYSIS_METHODS} */
|
|
34
51
|
readonly enabledMethods?: readonly AnalysisMethod[];
|
|
35
52
|
/** When true, skip already-completed methods from a prior run on the same date */
|
|
@@ -64,6 +81,8 @@ export interface AnalysisManifest {
|
|
|
64
81
|
readonly runId: string;
|
|
65
82
|
/** ISO date of the analysis */
|
|
66
83
|
readonly date: string;
|
|
84
|
+
/** Article-type slug used to scope this run's output directory (prevents collisions) */
|
|
85
|
+
readonly articleTypeSlug?: string | undefined;
|
|
67
86
|
/** ISO 8601 start timestamp */
|
|
68
87
|
readonly startTime: string;
|
|
69
88
|
/** ISO 8601 end timestamp */
|
|
@@ -94,12 +113,38 @@ export interface AnalysisContext {
|
|
|
94
113
|
/** Manifest written to disk */
|
|
95
114
|
readonly manifest: AnalysisManifest;
|
|
96
115
|
}
|
|
116
|
+
/**
|
|
117
|
+
* Derive a filesystem-safe slug from a list of article types.
|
|
118
|
+
*
|
|
119
|
+
* Each agentic workflow runs a single article type (e.g. `week-ahead`).
|
|
120
|
+
* The slug is used to scope analysis output to
|
|
121
|
+
* `{outputDir}/{date}/{slug}/` so that concurrent workflows for different
|
|
122
|
+
* article types never collide on the same files.
|
|
123
|
+
*
|
|
124
|
+
* When multiple types are present the slug is the sorted, hyphen-joined list.
|
|
125
|
+
* The result is sanitised to contain only lowercase alphanumeric characters
|
|
126
|
+
* and hyphens, preventing path traversal or filesystem issues.
|
|
127
|
+
*
|
|
128
|
+
* @param articleTypes - One or more article category identifiers
|
|
129
|
+
* @returns Filesystem-safe slug (lowercase, alphanumeric + hyphens only)
|
|
130
|
+
*
|
|
131
|
+
* @example
|
|
132
|
+
* ```ts
|
|
133
|
+
* deriveArticleTypeSlug(['week-ahead']); // 'week-ahead'
|
|
134
|
+
* deriveArticleTypeSlug(['breaking']); // 'breaking'
|
|
135
|
+
* deriveArticleTypeSlug(['motions', 'month-ahead']); // 'month-ahead-motions'
|
|
136
|
+
* ```
|
|
137
|
+
*/
|
|
138
|
+
export declare function deriveArticleTypeSlug(articleTypes: readonly (ArticleCategory | string)[]): string;
|
|
97
139
|
/**
|
|
98
140
|
* Run the full analysis pipeline stage.
|
|
99
141
|
*
|
|
100
142
|
* Executes all enabled analysis methods sequentially, writing markdown files
|
|
101
|
-
*
|
|
102
|
-
*
|
|
143
|
+
* and a `manifest.json` summary. When {@link AnalysisStageOptions.articleTypeSlug}
|
|
144
|
+
* is provided the output is scoped to `outputDir/{date}/{slug}/` — this prevents
|
|
145
|
+
* merge conflicts when multiple agentic workflows run on the same date.
|
|
146
|
+
*
|
|
147
|
+
* Individual method failures are isolated — other methods continue regardless.
|
|
103
148
|
*
|
|
104
149
|
* @param fetchedData - Raw EP data fetched by the fetch stage (keyed by data type)
|
|
105
150
|
* @param options - Analysis stage configuration
|
|
@@ -110,7 +155,8 @@ export interface AnalysisContext {
|
|
|
110
155
|
* const ctx = await runAnalysisStage(fetchedData, {
|
|
111
156
|
* articleTypes: [ArticleCategory.WEEK_AHEAD],
|
|
112
157
|
* date: '2026-03-26',
|
|
113
|
-
* outputDir: 'analysis
|
|
158
|
+
* outputDir: 'analysis',
|
|
159
|
+
* articleTypeSlug: 'week-ahead',
|
|
114
160
|
* skipCompleted: true,
|
|
115
161
|
* verbose: true,
|
|
116
162
|
* });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analysis-stage.d.ts","sourceRoot":"","sources":["../../../src/generators/pipeline/analysis-stage.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"analysis-stage.d.ts","sourceRoot":"","sources":["../../../src/generators/pipeline/analysis-stage.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,12 +11,20 @@
|
|
|
11
11
|
* news articles in all 14 languages.
|
|
12
12
|
*
|
|
13
13
|
* This stage is **side-effect-only**: it writes analysis markdown and a
|
|
14
|
-
* `manifest.json` to disk under `analysis
|
|
14
|
+
* `manifest.json` to disk under `analysis/{date}/{article-type}/`. When
|
|
15
|
+
* `articleTypeSlug` is provided (recommended for agentic workflows), each
|
|
16
|
+
* article type writes to its own subdirectory, preventing merge conflicts
|
|
17
|
+
* when multiple workflows run concurrently on the same date. The returned
|
|
15
18
|
* {@link AnalysisContext} is informational and currently not consumed by the
|
|
16
19
|
* generate stage; strategies read the analysis output from disk instead.
|
|
17
20
|
* Analysis artifacts are committed to the repository for review and
|
|
18
21
|
* political intelligence improvement.
|
|
19
22
|
*
|
|
23
|
+
* All MCP data — EP feeds, World Bank economic indicators, and OSINT
|
|
24
|
+
* analytical outputs (political landscape, voting anomalies, coalition
|
|
25
|
+
* dynamics) — is persisted under `data/` subdirectories for verification
|
|
26
|
+
* and later reuse.
|
|
27
|
+
*
|
|
20
28
|
* Analysis methods are grouped into four categories:
|
|
21
29
|
* - **Classification** (Issues #804): significance, impact-matrix, actor-mapping, forces
|
|
22
30
|
* - **Threat Assessment** (Issues #805): political-stride, actor-threat, consequence-trees, disruption
|
|
@@ -31,7 +39,7 @@
|
|
|
31
39
|
* const ctx = await runAnalysisStage(fetchedData, {
|
|
32
40
|
* articleTypes: [ArticleCategory.WEEK_AHEAD],
|
|
33
41
|
* date: '2026-03-26',
|
|
34
|
-
* outputDir: 'analysis
|
|
42
|
+
* outputDir: 'analysis',
|
|
35
43
|
* });
|
|
36
44
|
* console.log(ctx.completedMethods);
|
|
37
45
|
* ```
|
|
@@ -84,9 +92,9 @@ function sanitizeCell(input) {
|
|
|
84
92
|
function sanitizeDocumentId(id) {
|
|
85
93
|
const full = id
|
|
86
94
|
.toLowerCase()
|
|
87
|
-
.replace(/[^a-z0-9
|
|
88
|
-
.replace(
|
|
89
|
-
.replace(
|
|
95
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
96
|
+
.replace(/^-/, '')
|
|
97
|
+
.replace(/-$/, '');
|
|
90
98
|
if (!full) {
|
|
91
99
|
// Deterministic fallback: simple hash from input string for reproducibility
|
|
92
100
|
let hash = 0;
|
|
@@ -262,6 +270,13 @@ export const ALL_ANALYSIS_METHODS = [
|
|
|
262
270
|
// increase runtime and repository output size. Callers must opt-in by
|
|
263
271
|
// explicitly listing it in `enabledMethods`.
|
|
264
272
|
];
|
|
273
|
+
/**
|
|
274
|
+
* All valid analysis method names, including opt-in methods like
|
|
275
|
+
* `document-analysis`. Use this for **validation** of user-supplied method
|
|
276
|
+
* names (e.g. the `--analysis-methods` CLI flag). For the default execution
|
|
277
|
+
* set, use {@link ALL_ANALYSIS_METHODS} instead.
|
|
278
|
+
*/
|
|
279
|
+
export const VALID_ANALYSIS_METHODS = Array.from(new Set([...ALL_ANALYSIS_METHODS, 'document-analysis']));
|
|
265
280
|
// ─── Internal helpers ─────────────────────────────────────────────────────────
|
|
266
281
|
/**
|
|
267
282
|
* Determine the aggregated confidence level from a set of individual results.
|
|
@@ -597,7 +612,7 @@ ${forceRow('External Influences', forces.externalInfluences)}
|
|
|
597
612
|
* Build markdown for the political STRIDE threat assessment.
|
|
598
613
|
*
|
|
599
614
|
* Uses the pipeline `date` parameter to ensure the assessment date in the
|
|
600
|
-
* generated markdown matches the `analysis
|
|
615
|
+
* generated markdown matches the `analysis/{date}/` folder, overriding
|
|
601
616
|
* the `new Date()` timestamp that `assessPoliticalThreats()` stamps internally.
|
|
602
617
|
*
|
|
603
618
|
* @param fetchedData - Raw fetched EP data
|
|
@@ -1569,6 +1584,179 @@ const SUBDIR_RISK_SCORING = 'risk-scoring';
|
|
|
1569
1584
|
const SUBDIR_EXISTING = 'existing';
|
|
1570
1585
|
/** Subdirectory name for per-document analysis methods */
|
|
1571
1586
|
const SUBDIR_DOCUMENTS = 'documents';
|
|
1587
|
+
// ─── MCP data persistence subdirectories ──────────────────────────────────────
|
|
1588
|
+
/** Subdirectory name for raw MCP data storage */
|
|
1589
|
+
const SUBDIR_DATA = 'data';
|
|
1590
|
+
/**
|
|
1591
|
+
* MCP data category → filesystem subdirectory mapping.
|
|
1592
|
+
*
|
|
1593
|
+
* Each EP data category fetched via MCP is stored in a dedicated subdirectory
|
|
1594
|
+
* under `{dateOutputDir}/data/`. Filenames use EP entity IDs for consistency
|
|
1595
|
+
* and traceability (e.g. `data/events/EVT-001.json`).
|
|
1596
|
+
*
|
|
1597
|
+
* Includes World Bank economic indicators (`world-bank/`), OSINT analytical
|
|
1598
|
+
* outputs (`osint/`), and MCP tool responses (`mcp-responses/`) so that ALL
|
|
1599
|
+
* MCP-sourced data is committed for verification and later reuse.
|
|
1600
|
+
*/
|
|
1601
|
+
const DATA_CATEGORY_DIRS = {
|
|
1602
|
+
events: 'events',
|
|
1603
|
+
procedures: 'procedures',
|
|
1604
|
+
adoptedTexts: 'adopted-texts',
|
|
1605
|
+
documents: 'documents',
|
|
1606
|
+
mepUpdates: 'meps',
|
|
1607
|
+
plenaryDocuments: 'plenary-documents',
|
|
1608
|
+
committeeDocuments: 'committee-documents',
|
|
1609
|
+
plenarySessionDocuments: 'plenary-session-documents',
|
|
1610
|
+
externalDocuments: 'external-documents',
|
|
1611
|
+
questions: 'questions',
|
|
1612
|
+
declarations: 'declarations',
|
|
1613
|
+
corporateBodies: 'corporate-bodies',
|
|
1614
|
+
votingRecords: 'votes',
|
|
1615
|
+
speeches: 'speeches',
|
|
1616
|
+
// World Bank economic data (CSV parsed to JSON)
|
|
1617
|
+
worldBankIndicators: 'world-bank',
|
|
1618
|
+
// OSINT analytical tool outputs
|
|
1619
|
+
politicalLandscape: 'osint',
|
|
1620
|
+
votingAnomalies: 'osint',
|
|
1621
|
+
coalitionDynamics: 'osint',
|
|
1622
|
+
countryDelegations: 'osint',
|
|
1623
|
+
mepInfluence: 'osint',
|
|
1624
|
+
// Raw MCP tool call responses
|
|
1625
|
+
mcpResponses: 'mcp-responses',
|
|
1626
|
+
};
|
|
1627
|
+
/**
|
|
1628
|
+
* Extract a stable identifier from an MCP data item for consistent filenames.
|
|
1629
|
+
*
|
|
1630
|
+
* Inspects common EP identifier fields (eventId, procedureId, docId, etc.)
|
|
1631
|
+
* and falls back to an index-based name when no recognised ID is found.
|
|
1632
|
+
*
|
|
1633
|
+
* @param item - Single EP data item (object with potential ID fields)
|
|
1634
|
+
* @param index - Fallback index when no ID field is found
|
|
1635
|
+
* @returns Filesystem-safe identifier string
|
|
1636
|
+
*/
|
|
1637
|
+
function extractItemId(item, index) {
|
|
1638
|
+
if (typeof item !== 'object' || item === null)
|
|
1639
|
+
return `item-${String(index).padStart(4, '0')}`;
|
|
1640
|
+
const obj = item;
|
|
1641
|
+
const idFields = [
|
|
1642
|
+
'eventId',
|
|
1643
|
+
'procedureId',
|
|
1644
|
+
'docId',
|
|
1645
|
+
'documentId',
|
|
1646
|
+
'mepId',
|
|
1647
|
+
'id',
|
|
1648
|
+
'speechId',
|
|
1649
|
+
'questionId',
|
|
1650
|
+
'processId',
|
|
1651
|
+
'identifier',
|
|
1652
|
+
'alertNumber',
|
|
1653
|
+
];
|
|
1654
|
+
for (const field of idFields) {
|
|
1655
|
+
const value = obj[field];
|
|
1656
|
+
if (typeof value === 'string' && value.length > 0)
|
|
1657
|
+
return sanitizeDocumentId(value);
|
|
1658
|
+
if (typeof value === 'number')
|
|
1659
|
+
return sanitizeDocumentId(String(value));
|
|
1660
|
+
}
|
|
1661
|
+
return `item-${String(index).padStart(4, '0')}`;
|
|
1662
|
+
}
|
|
1663
|
+
/**
|
|
1664
|
+
* Persist a singleton OSINT data category (non-array object) to a file.
|
|
1665
|
+
*
|
|
1666
|
+
* @param data - The singleton data object to persist
|
|
1667
|
+
* @param category - The fetchedData key name (camelCase)
|
|
1668
|
+
* @param dataBaseDir - Base directory for data persistence
|
|
1669
|
+
* @param subdir - Target subdirectory under dataBaseDir
|
|
1670
|
+
* @returns 1 if written, 0 if skipped
|
|
1671
|
+
*/
|
|
1672
|
+
function persistSingletonData(data, category, dataBaseDir, subdir) {
|
|
1673
|
+
if (data === null || data === undefined)
|
|
1674
|
+
return 0;
|
|
1675
|
+
const categoryDir = path.join(dataBaseDir, subdir);
|
|
1676
|
+
ensureDirectoryExists(categoryDir);
|
|
1677
|
+
const slug = category.replace(/[A-Z]/g, (c) => `-${c.toLowerCase()}`);
|
|
1678
|
+
writeTextFile(path.join(categoryDir, `${slug}.json`), JSON.stringify(data, null, 2));
|
|
1679
|
+
return 1;
|
|
1680
|
+
}
|
|
1681
|
+
/**
|
|
1682
|
+
* Persist MCP tool responses (object keyed by tool name) to individual files.
|
|
1683
|
+
*
|
|
1684
|
+
* @param data - Object keyed by MCP tool name
|
|
1685
|
+
* @param dataBaseDir - Base directory for data persistence
|
|
1686
|
+
* @param subdir - Target subdirectory under dataBaseDir
|
|
1687
|
+
* @returns Number of items written
|
|
1688
|
+
*/
|
|
1689
|
+
function persistMCPResponses(data, dataBaseDir, subdir) {
|
|
1690
|
+
if (data === null || data === undefined || typeof data !== 'object')
|
|
1691
|
+
return 0;
|
|
1692
|
+
const categoryDir = path.join(dataBaseDir, subdir);
|
|
1693
|
+
ensureDirectoryExists(categoryDir);
|
|
1694
|
+
let count = 0;
|
|
1695
|
+
const responses = data;
|
|
1696
|
+
for (const [toolName, response] of Object.entries(responses)) {
|
|
1697
|
+
if (response === null || response === undefined)
|
|
1698
|
+
continue;
|
|
1699
|
+
const safeName = sanitizeDocumentId(toolName);
|
|
1700
|
+
writeTextFile(path.join(categoryDir, `${safeName}.json`), JSON.stringify(response, null, 2));
|
|
1701
|
+
count++;
|
|
1702
|
+
}
|
|
1703
|
+
return count;
|
|
1704
|
+
}
|
|
1705
|
+
/**
|
|
1706
|
+
* Persist raw MCP-fetched data to structured subdirectories for verification
|
|
1707
|
+
* and later reuse.
|
|
1708
|
+
*
|
|
1709
|
+
* Creates `{dateOutputDir}/data/{category}/` directories and writes each item
|
|
1710
|
+
* as an individual JSON file named by its EP identifier. Existing files are
|
|
1711
|
+
* overwritten to support update workflows.
|
|
1712
|
+
*
|
|
1713
|
+
* For OSINT categories that share the `osint/` subdirectory (politicalLandscape,
|
|
1714
|
+
* votingAnomalies, coalitionDynamics, etc.), files are prefixed with the category
|
|
1715
|
+
* name to avoid collisions (e.g. `osint/political-landscape.json`).
|
|
1716
|
+
*
|
|
1717
|
+
* @param fetchedData - Raw EP data keyed by data category
|
|
1718
|
+
* @param dateOutputDir - Absolute path to the date-scoped output directory
|
|
1719
|
+
* @param verbose - Emit progress messages
|
|
1720
|
+
*/
|
|
1721
|
+
function persistMCPData(fetchedData, dateOutputDir, verbose) {
|
|
1722
|
+
const dataBaseDir = path.join(dateOutputDir, SUBDIR_DATA);
|
|
1723
|
+
let totalItems = 0;
|
|
1724
|
+
/** Categories that share the osint/ subdir — use category name as filename prefix */
|
|
1725
|
+
const OSINT_SINGLETON_CATEGORIES = new Set([
|
|
1726
|
+
'politicalLandscape',
|
|
1727
|
+
'votingAnomalies',
|
|
1728
|
+
'coalitionDynamics',
|
|
1729
|
+
'countryDelegations',
|
|
1730
|
+
'mepInfluence',
|
|
1731
|
+
]);
|
|
1732
|
+
for (const [category, subdir] of Object.entries(DATA_CATEGORY_DIRS)) {
|
|
1733
|
+
const items = fetchedData[category];
|
|
1734
|
+
// Handle singleton objects (e.g. politicalLandscape is one big response, not an array)
|
|
1735
|
+
if (OSINT_SINGLETON_CATEGORIES.has(category)) {
|
|
1736
|
+
totalItems += persistSingletonData(items, category, dataBaseDir, subdir);
|
|
1737
|
+
continue;
|
|
1738
|
+
}
|
|
1739
|
+
// Handle mcpResponses: single object, not an array
|
|
1740
|
+
if (category === 'mcpResponses') {
|
|
1741
|
+
totalItems += persistMCPResponses(items, dataBaseDir, subdir);
|
|
1742
|
+
continue;
|
|
1743
|
+
}
|
|
1744
|
+
if (!Array.isArray(items) || items.length === 0)
|
|
1745
|
+
continue;
|
|
1746
|
+
const categoryDir = path.join(dataBaseDir, subdir);
|
|
1747
|
+
ensureDirectoryExists(categoryDir);
|
|
1748
|
+
for (let i = 0; i < items.length; i++) {
|
|
1749
|
+
const item = items[i];
|
|
1750
|
+
const itemId = extractItemId(item, i);
|
|
1751
|
+
const filename = `${itemId}.json`;
|
|
1752
|
+
writeTextFile(path.join(categoryDir, filename), JSON.stringify(item, null, 2));
|
|
1753
|
+
totalItems++;
|
|
1754
|
+
}
|
|
1755
|
+
}
|
|
1756
|
+
if (verbose && totalItems > 0) {
|
|
1757
|
+
console.log(` 📂 [analysis] Persisted ${totalItems} MCP data items to ${dataBaseDir}`);
|
|
1758
|
+
}
|
|
1759
|
+
}
|
|
1572
1760
|
/** Analysis method identifier for per-document intelligence analysis */
|
|
1573
1761
|
const METHOD_DOCUMENT_ANALYSIS = 'document-analysis';
|
|
1574
1762
|
/** Subdirectory for each analysis method group */
|
|
@@ -1707,12 +1895,50 @@ function runSingleMethod(method, fetchedData, date, dateOutputDir, skipCompleted
|
|
|
1707
1895
|
}
|
|
1708
1896
|
}
|
|
1709
1897
|
// ─── Public API ───────────────────────────────────────────────────────────────
|
|
1898
|
+
/**
|
|
1899
|
+
* Derive a filesystem-safe slug from a list of article types.
|
|
1900
|
+
*
|
|
1901
|
+
* Each agentic workflow runs a single article type (e.g. `week-ahead`).
|
|
1902
|
+
* The slug is used to scope analysis output to
|
|
1903
|
+
* `{outputDir}/{date}/{slug}/` so that concurrent workflows for different
|
|
1904
|
+
* article types never collide on the same files.
|
|
1905
|
+
*
|
|
1906
|
+
* When multiple types are present the slug is the sorted, hyphen-joined list.
|
|
1907
|
+
* The result is sanitised to contain only lowercase alphanumeric characters
|
|
1908
|
+
* and hyphens, preventing path traversal or filesystem issues.
|
|
1909
|
+
*
|
|
1910
|
+
* @param articleTypes - One or more article category identifiers
|
|
1911
|
+
* @returns Filesystem-safe slug (lowercase, alphanumeric + hyphens only)
|
|
1912
|
+
*
|
|
1913
|
+
* @example
|
|
1914
|
+
* ```ts
|
|
1915
|
+
* deriveArticleTypeSlug(['week-ahead']); // 'week-ahead'
|
|
1916
|
+
* deriveArticleTypeSlug(['breaking']); // 'breaking'
|
|
1917
|
+
* deriveArticleTypeSlug(['motions', 'month-ahead']); // 'month-ahead-motions'
|
|
1918
|
+
* ```
|
|
1919
|
+
*/
|
|
1920
|
+
export function deriveArticleTypeSlug(articleTypes) {
|
|
1921
|
+
if (articleTypes.length === 0)
|
|
1922
|
+
return 'default';
|
|
1923
|
+
const raw = [...articleTypes]
|
|
1924
|
+
.map((t) => t.trim().toLowerCase())
|
|
1925
|
+
.sort()
|
|
1926
|
+
.join('-');
|
|
1927
|
+
// Sanitise: strip anything that isn't lowercase alphanumeric or hyphen,
|
|
1928
|
+
// collapse multiple hyphens, and trim leading/trailing hyphens.
|
|
1929
|
+
const sanitised = raw.replace(/[^a-z0-9-]+/gu, '-').replace(/-{2,}/gu, '-');
|
|
1930
|
+
const trimmed = sanitised.replace(/^-/u, '').replace(/-$/u, '');
|
|
1931
|
+
return trimmed.length > 0 ? trimmed : 'default';
|
|
1932
|
+
}
|
|
1710
1933
|
/**
|
|
1711
1934
|
* Run the full analysis pipeline stage.
|
|
1712
1935
|
*
|
|
1713
1936
|
* Executes all enabled analysis methods sequentially, writing markdown files
|
|
1714
|
-
*
|
|
1715
|
-
*
|
|
1937
|
+
* and a `manifest.json` summary. When {@link AnalysisStageOptions.articleTypeSlug}
|
|
1938
|
+
* is provided the output is scoped to `outputDir/{date}/{slug}/` — this prevents
|
|
1939
|
+
* merge conflicts when multiple agentic workflows run on the same date.
|
|
1940
|
+
*
|
|
1941
|
+
* Individual method failures are isolated — other methods continue regardless.
|
|
1716
1942
|
*
|
|
1717
1943
|
* @param fetchedData - Raw EP data fetched by the fetch stage (keyed by data type)
|
|
1718
1944
|
* @param options - Analysis stage configuration
|
|
@@ -1723,14 +1949,15 @@ function runSingleMethod(method, fetchedData, date, dateOutputDir, skipCompleted
|
|
|
1723
1949
|
* const ctx = await runAnalysisStage(fetchedData, {
|
|
1724
1950
|
* articleTypes: [ArticleCategory.WEEK_AHEAD],
|
|
1725
1951
|
* date: '2026-03-26',
|
|
1726
|
-
* outputDir: 'analysis
|
|
1952
|
+
* outputDir: 'analysis',
|
|
1953
|
+
* articleTypeSlug: 'week-ahead',
|
|
1727
1954
|
* skipCompleted: true,
|
|
1728
1955
|
* verbose: true,
|
|
1729
1956
|
* });
|
|
1730
1957
|
* ```
|
|
1731
1958
|
*/
|
|
1732
1959
|
export async function runAnalysisStage(fetchedData, options) {
|
|
1733
|
-
const { articleTypes, date, outputDir, enabledMethods = ALL_ANALYSIS_METHODS, skipCompleted = true, verbose = false, requireData = false, } = options;
|
|
1960
|
+
const { articleTypes, date, outputDir, articleTypeSlug, enabledMethods = ALL_ANALYSIS_METHODS, skipCompleted = true, verbose = false, requireData = false, } = options;
|
|
1734
1961
|
// Validate date to prevent path traversal (e.g. "../../.." escaping outputDir)
|
|
1735
1962
|
if (!/^\d{4}-\d{2}-\d{2}$/u.test(date)) {
|
|
1736
1963
|
throw new Error(`Invalid analysis date "${date}": must match YYYY-MM-DD format`);
|
|
@@ -1740,10 +1967,16 @@ export async function runAnalysisStage(fetchedData, options) {
|
|
|
1740
1967
|
const deduplicatedMethods = [...new Set(enabledMethods)];
|
|
1741
1968
|
const startTime = new Date().toISOString();
|
|
1742
1969
|
const runId = randomUUID();
|
|
1743
|
-
|
|
1970
|
+
// When articleTypeSlug is provided, scope output to a per-article-type
|
|
1971
|
+
// subdirectory so concurrent workflows on the same date never collide.
|
|
1972
|
+
const dateOutputDir = articleTypeSlug
|
|
1973
|
+
? path.resolve(outputDir, date, articleTypeSlug)
|
|
1974
|
+
: path.resolve(outputDir, date);
|
|
1744
1975
|
if (verbose) {
|
|
1745
1976
|
console.log(`🔬 [analysis] Starting analysis stage (runId: ${runId})`);
|
|
1746
1977
|
console.log(` Date: ${date}`);
|
|
1978
|
+
if (articleTypeSlug)
|
|
1979
|
+
console.log(` Article type: ${articleTypeSlug}`);
|
|
1747
1980
|
console.log(` Methods: ${deduplicatedMethods.length}`);
|
|
1748
1981
|
console.log(` Output: ${dateOutputDir}`);
|
|
1749
1982
|
}
|
|
@@ -1760,6 +1993,10 @@ export async function runAnalysisStage(fetchedData, options) {
|
|
|
1760
1993
|
'Ensure MCP connection succeeded and feed data was fetched before running analysis.');
|
|
1761
1994
|
}
|
|
1762
1995
|
ensureDirectoryExists(dateOutputDir);
|
|
1996
|
+
// Persist raw MCP data to structured data/ subdirectories for verification,
|
|
1997
|
+
// traceability, and later reuse. Each category gets its own directory and
|
|
1998
|
+
// each item is named by its EP identifier for consistent, ID-based filenames.
|
|
1999
|
+
persistMCPData(fetchedData, dateOutputDir, verbose);
|
|
1763
2000
|
// Run all enabled methods sequentially; isolate failures
|
|
1764
2001
|
const methodResults = [];
|
|
1765
2002
|
for (const method of deduplicatedMethods) {
|
|
@@ -1786,6 +2023,7 @@ export async function runAnalysisStage(fetchedData, options) {
|
|
|
1786
2023
|
const manifest = {
|
|
1787
2024
|
runId,
|
|
1788
2025
|
date,
|
|
2026
|
+
articleTypeSlug,
|
|
1789
2027
|
startTime,
|
|
1790
2028
|
endTime,
|
|
1791
2029
|
articleTypes: [...articleTypes],
|