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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "euparliamentmonitor",
3
- "version": "0.8.7",
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":";AA8EA,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"}
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-output/{date}/`. These
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 (ALL_ANALYSIS_METHODS.includes(name)) {
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-output/{date}/`. The returned
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-output';
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-output') */
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
- * to `outputDir/{date}/` and a `manifest.json` summary. Individual method
102
- * failures are isolated other methods continue regardless.
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-output',
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":"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"}
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-output/{date}/`. The returned
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-output',
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-]/g, '-')
88
- .replace(/-{2,}/g, '-')
89
- .replace(/^-+|-+$/g, '');
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-output/{date}/` folder, overriding
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
- * to `outputDir/{date}/` and a `manifest.json` summary. Individual method
1715
- * failures are isolated other methods continue regardless.
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-output',
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
- const dateOutputDir = path.resolve(outputDir, date);
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],