mcp-adr-analysis-server 2.8.0 → 2.9.0

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.
@@ -1 +1 @@
1
- {"version":3,"file":"adr-discovery.d.ts","sourceRoot":"","sources":["../../../src/utils/adr-discovery.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,aAAa,EAAE,yBAAyB,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEjG;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,+BAA+B;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,oEAAoE;IACpE,MAAM,EAAE,MAAM,CAAC;IACf,sCAAsC;IACtC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,gCAAgC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,8CAA8C;IAC9C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iCAAiC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kCAAkC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sCAAsC;IACtC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,wCAAwC;IACxC,QAAQ,CAAC,EAAE;QACT,+BAA+B;QAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,yCAAyC;QACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,8BAA8B;QAC9B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;KACjB,CAAC;IACF,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,aAAa,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,+BAA+B;IAC/B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,gCAAgC;IAChC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,kCAAkC;IAClC,eAAe,CAAC,EAAE,yBAAyB,CAAC;IAC5C,4BAA4B;IAC5B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,8CAA8C;IAC9C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kCAAkC;IAClC,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,iCAAiC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,+BAA+B;IAC/B,IAAI,EAAE,aAAa,EAAE,CAAC;IACtB,4CAA4C;IAC5C,OAAO,EAAE;QACP,8BAA8B;QAC9B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjC,gCAAgC;QAChC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACnC,uDAAuD;QACvD,oBAAoB,CAAC,EAAE,MAAM,CAAC;QAC9B,iDAAiD;QACjD,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,CAAC;IACF,mDAAmD;IACnD,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,6CAA6C;IAC7C,WAAW,CAAC,EAAE,YAAY,CAAC;CAC5B;AAED;;;;;;;;GAQG;AACH,wBAAsB,uBAAuB,CAC3C,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,kBAAkB,CAAC,CAgL7B"}
1
+ {"version":3,"file":"adr-discovery.d.ts","sourceRoot":"","sources":["../../../src/utils/adr-discovery.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,aAAa,EAAE,yBAAyB,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAMjG;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,+BAA+B;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,oEAAoE;IACpE,MAAM,EAAE,MAAM,CAAC;IACf,sCAAsC;IACtC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,gCAAgC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,8CAA8C;IAC9C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iCAAiC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kCAAkC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sCAAsC;IACtC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,wCAAwC;IACxC,QAAQ,CAAC,EAAE;QACT,+BAA+B;QAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,yCAAyC;QACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,8BAA8B;QAC9B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;KACjB,CAAC;IACF,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,aAAa,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,+BAA+B;IAC/B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,gCAAgC;IAChC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,kCAAkC;IAClC,eAAe,CAAC,EAAE,yBAAyB,CAAC;IAC5C,4BAA4B;IAC5B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,8CAA8C;IAC9C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kCAAkC;IAClC,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,iCAAiC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,+BAA+B;IAC/B,IAAI,EAAE,aAAa,EAAE,CAAC;IACtB,4CAA4C;IAC5C,OAAO,EAAE;QACP,8BAA8B;QAC9B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjC,gCAAgC;QAChC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACnC,uDAAuD;QACvD,oBAAoB,CAAC,EAAE,MAAM,CAAC;QAC9B,iDAAiD;QACjD,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,CAAC;IACF,mDAAmD;IACnD,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,6CAA6C;IAC7C,WAAW,CAAC,EAAE,YAAY,CAAC;CAC5B;AAED;;;;;;;;GAQG;AACH,wBAAsB,uBAAuB,CAC3C,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,kBAAkB,CAAC,CAgL7B"}
@@ -4,6 +4,10 @@
4
4
  * Utilities for discovering and analyzing existing ADRs in the project
5
5
  */
6
6
  import { McpAdrError } from '../types/index.js';
7
+ // Field extraction lives in adr-format.ts (the home for ADR-format concerns); discovery
8
+ // consumes it. This direction — discovery -> format — keeps adr-format.ts a wired-in
9
+ // dependency and avoids a cycle (adr-format imports nothing from discovery).
10
+ import { extractAdrFields } from './adr-format.js';
7
11
  /**
8
12
  * Discover ADRs in a directory using file system operations
9
13
  *
@@ -200,101 +204,27 @@ function isLikelyAdr(content, filename) {
200
204
  * Parse ADR metadata from content
201
205
  */
202
206
  function parseAdrMetadata(content, filename, fullPath) {
203
- // Extract title (usually first # heading)
204
- let title = filename.replace(/\.md$/, '');
205
- const titleMatch = content.match(/^#\s+(.+)$/m);
206
- if (titleMatch && titleMatch[1]) {
207
- title = titleMatch[1].trim();
208
- }
209
- // Extract status
210
- let status = 'unknown';
211
- const statusMatch = content.match(/(?:##?\s*status|status:)\s*(.+?)(?:\n|$)/i);
212
- if (statusMatch && statusMatch[1]) {
213
- status = statusMatch[1].trim().toLowerCase();
214
- }
215
- // Extract date
216
- let date;
217
- const dateMatch = content.match(/(?:##?\s*date|date:)\s*(.+?)(?:\n|$)/i);
218
- if (dateMatch && dateMatch[1]) {
219
- date = dateMatch[1].trim();
220
- }
221
- // Extract ADR number from filename or content
222
- let number;
223
- const numberMatch = filename.match(/(?:adr[-_]?)?(\d+)/i) || content.match(/adr[-_]?(\d+)/i);
224
- if (numberMatch && numberMatch[1]) {
225
- number = numberMatch[1];
226
- }
227
- // Extract context
228
- let context;
229
- const contextMatch = content.match(/##?\s*context\s*\n([\s\S]*?)(?=\n##|\n#|$)/i);
230
- if (contextMatch && contextMatch[1]) {
231
- context = contextMatch[1].trim();
232
- }
233
- // Extract decision
234
- let decision;
235
- const decisionMatch = content.match(/##?\s*decision\s*\n([\s\S]*?)(?=\n##|\n#|$)/i);
236
- if (decisionMatch && decisionMatch[1]) {
237
- decision = decisionMatch[1].trim();
238
- }
239
- // Extract consequences
240
- let consequences;
241
- const consequencesMatch = content.match(/##?\s*consequences\s*\n([\s\S]*?)(?=\n##|\n#|$)/i);
242
- if (consequencesMatch && consequencesMatch[1]) {
243
- consequences = consequencesMatch[1].trim();
244
- }
245
- // Extract category/tags (if any).
246
- //
247
- // Three forms occur in the wild, and the idiomatic MADR one used to be the only one
248
- // that did NOT work -- a YAML block list returned ["- architecture"], capturing the
249
- // dash and dropping every entry after the first. ADR-022 adopted MADR, whose template
250
- // uses block lists, so that was the form this needed most.
251
- //
252
- // tags: tags: a, b tags: [a, b]
253
- // - a
254
- // - b
255
- //
256
- // Scoped to the leading `---` front-matter block when one is present, so a `tags:`
257
- // mention in prose cannot be picked up -- the same discipline scripts/check-adr-drift.sh
258
- // and repo-governor's adapters/adr both use after that exact false positive.
259
- const tags = [];
260
- const fmMatch = content.match(/^---\r?\n([\s\S]*?)\r?\n---/);
261
- const tagScope = fmMatch?.[1] ?? content;
262
- const blockMatch = tagScope.match(/^[ \t]*(?:tags?|categories?):[ \t]*\r?\n((?:[ \t]*-[ \t]*\S.*\r?\n?)+)/im);
263
- if (blockMatch?.[1]) {
264
- tags.push(...blockMatch[1]
265
- .split(/\r?\n/)
266
- .map(line => line.replace(/^[ \t]*-[ \t]*/, '').trim())
267
- .filter(Boolean));
268
- }
269
- else {
270
- const inlineMatch = tagScope.match(/^[ \t]*(?:tags?|categories?):[ \t]*(.+?)[ \t]*\r?$/im);
271
- if (inlineMatch?.[1]) {
272
- tags.push(...inlineMatch[1]
273
- .replace(/^\[|\]$/g, '') // tolerate the bracket form, which used to keep its brackets
274
- .split(',')
275
- .map(tag => tag.trim().replace(/^['"]|['"]$/g, ''))
276
- .filter(Boolean));
277
- }
278
- }
207
+ const fields = extractAdrFields(content, filename);
208
+ const tags = fields.tags;
279
209
  const metadata = { tags };
280
- if (number)
281
- metadata.number = number;
210
+ if (fields.number)
211
+ metadata.number = fields.number;
282
212
  if (tags[0])
283
213
  metadata.category = tags[0];
284
214
  const result = {
285
215
  filename,
286
- title,
287
- status,
288
- date,
216
+ title: fields.title ?? filename.replace(/\.md$/, ''),
217
+ status: fields.status,
218
+ date: fields.date,
289
219
  path: fullPath,
290
220
  metadata,
291
221
  };
292
- if (context)
293
- result.context = context;
294
- if (decision)
295
- result.decision = decision;
296
- if (consequences)
297
- result.consequences = consequences;
222
+ if (fields.context)
223
+ result.context = fields.context;
224
+ if (fields.decision)
225
+ result.decision = fields.decision;
226
+ if (fields.consequences)
227
+ result.consequences = fields.consequences;
298
228
  return result;
299
229
  }
300
230
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"adr-discovery.js","sourceRoot":"","sources":["../../../src/utils/adr-discovery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"adr-discovery.js","sourceRoot":"","sources":["../../../src/utils/adr-discovery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * ADR format reader and Nygard -> MADR converter (issue #1466).
3
+ *
4
+ * Pure functions, no I/O and no side effects — modelled on `src/utils/rule-format.ts`.
5
+ * Two capabilities:
6
+ *
7
+ * - `detectAdrFormat(content)` classifies an ADR document as `'nygard'`, `'madr'`,
8
+ * or `'custom'`.
9
+ * - `convertNygardToMadr(content)` rewrites a Nygard-style ADR into the ADR-022
10
+ * canonical MADR shape the real corpus uses (see docs/adrs/adr-025 and adr-026 as
11
+ * golden references), with `js-yaml` front matter.
12
+ *
13
+ * Field-level parsing (title/status/date/context/decision/consequences/tags) is reused
14
+ * from `adr-discovery.ts` via the shared `extractAdrFields` helper rather than keeping a
15
+ * third private copy of those regexes.
16
+ */
17
+ /**
18
+ * The three ADR document shapes this module distinguishes.
19
+ *
20
+ * Exported for future reuse by the inline `templateFormat` unions elsewhere in the
21
+ * codebase (adr-suggestion-tool.ts, mcp-tool-schemas.ts, types/tool-arguments.ts,
22
+ * adr-suggestion-prompts.ts). Those sites are intentionally NOT rewired here — see #1466
23
+ * scope and #1647.
24
+ */
25
+ export type AdrFormat = 'nygard' | 'madr' | 'custom';
26
+ /**
27
+ * The fields a reader recovers from an ADR document, format-agnostic
28
+ * (title, status, date, number, the Context/Decision/Consequences sections, and
29
+ * front-matter tags). This is the single home for the field-extraction regexes:
30
+ * `adr-discovery.ts`'s `parseAdrMetadata` and this module's reader/converter both
31
+ * read through `extractAdrFields` rather than each keeping a private copy.
32
+ */
33
+ export interface ExtractedAdrFields {
34
+ title?: string;
35
+ status: string;
36
+ date?: string;
37
+ number?: string;
38
+ context?: string;
39
+ decision?: string;
40
+ consequences?: string;
41
+ tags: string[];
42
+ }
43
+ /**
44
+ * Extract ADR fields from raw markdown content.
45
+ *
46
+ * `filename` is optional: when supplied it seeds the title fallback and the ADR-number
47
+ * lookup (callers that only have content, such as the format converter, omit it).
48
+ */
49
+ export declare function extractAdrFields(content: string, filename?: string): ExtractedAdrFields;
50
+ /**
51
+ * Detect the format of an ADR document.
52
+ *
53
+ * - `'madr'` — leading YAML front matter with `status:`/`date:` AND MADR headings
54
+ * (`## Context and Problem Statement`, and/or `## Considered Options`/
55
+ * `## Decision Drivers`).
56
+ * - `'nygard'` — the Nygard heading set (`## Status`, `## Context`, `## Decision`,
57
+ * `## Consequences`) with a status value on the following line.
58
+ * - `'custom'` — anything else.
59
+ */
60
+ export declare function detectAdrFormat(content: string): AdrFormat;
61
+ /**
62
+ * Convert a Nygard-style ADR into the ADR-022 canonical MADR shape.
63
+ *
64
+ * Idempotent: content already detected as `'madr'` is returned unchanged.
65
+ *
66
+ * `'custom'` content is converted best-effort — whatever Nygard-shaped sections can be
67
+ * recovered are carried across, and any section with nothing to carry becomes an empty
68
+ * placeholder heading. The result is always valid MADR (front matter + MADR headings).
69
+ */
70
+ export declare function convertNygardToMadr(content: string): string;
71
+ //# sourceMappingURL=adr-format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adr-format.d.ts","sourceRoot":"","sources":["../../../src/utils/adr-format.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH;;;;;;;GAOG;AACH,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC;AAErD;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,SAAK,GAAG,kBAAkB,CAoGnF;AAqBD;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAmB1D;AAmBD;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CA+C3D"}
@@ -0,0 +1,232 @@
1
+ /**
2
+ * ADR format reader and Nygard -> MADR converter (issue #1466).
3
+ *
4
+ * Pure functions, no I/O and no side effects — modelled on `src/utils/rule-format.ts`.
5
+ * Two capabilities:
6
+ *
7
+ * - `detectAdrFormat(content)` classifies an ADR document as `'nygard'`, `'madr'`,
8
+ * or `'custom'`.
9
+ * - `convertNygardToMadr(content)` rewrites a Nygard-style ADR into the ADR-022
10
+ * canonical MADR shape the real corpus uses (see docs/adrs/adr-025 and adr-026 as
11
+ * golden references), with `js-yaml` front matter.
12
+ *
13
+ * Field-level parsing (title/status/date/context/decision/consequences/tags) is reused
14
+ * from `adr-discovery.ts` via the shared `extractAdrFields` helper rather than keeping a
15
+ * third private copy of those regexes.
16
+ */
17
+ import yaml from 'js-yaml';
18
+ /**
19
+ * Extract ADR fields from raw markdown content.
20
+ *
21
+ * `filename` is optional: when supplied it seeds the title fallback and the ADR-number
22
+ * lookup (callers that only have content, such as the format converter, omit it).
23
+ */
24
+ export function extractAdrFields(content, filename = '') {
25
+ // Extract title (usually first # heading)
26
+ let title = filename ? filename.replace(/\.md$/, '') : undefined;
27
+ const titleMatch = content.match(/^#\s+(.+)$/m);
28
+ if (titleMatch && titleMatch[1]) {
29
+ title = titleMatch[1].trim();
30
+ }
31
+ // Extract status
32
+ let status = 'unknown';
33
+ const statusMatch = content.match(/(?:##?\s*status|status:)\s*(.+?)(?:\n|$)/i);
34
+ if (statusMatch && statusMatch[1]) {
35
+ status = statusMatch[1].trim().toLowerCase();
36
+ }
37
+ // Extract date
38
+ let date;
39
+ const dateMatch = content.match(/(?:##?\s*date|date:)\s*(.+?)(?:\n|$)/i);
40
+ if (dateMatch && dateMatch[1]) {
41
+ date = dateMatch[1].trim();
42
+ }
43
+ // Extract ADR number from filename or content
44
+ let number;
45
+ const numberMatch = (filename ? filename.match(/(?:adr[-_]?)?(\d+)/i) : null) || content.match(/adr[-_]?(\d+)/i);
46
+ if (numberMatch && numberMatch[1]) {
47
+ number = numberMatch[1];
48
+ }
49
+ // Extract context
50
+ let context;
51
+ const contextMatch = content.match(/##?\s*context\s*\n([\s\S]*?)(?=\n##|\n#|$)/i);
52
+ if (contextMatch && contextMatch[1]) {
53
+ context = contextMatch[1].trim();
54
+ }
55
+ // Extract decision
56
+ let decision;
57
+ const decisionMatch = content.match(/##?\s*decision\s*\n([\s\S]*?)(?=\n##|\n#|$)/i);
58
+ if (decisionMatch && decisionMatch[1]) {
59
+ decision = decisionMatch[1].trim();
60
+ }
61
+ // Extract consequences
62
+ let consequences;
63
+ const consequencesMatch = content.match(/##?\s*consequences\s*\n([\s\S]*?)(?=\n##|\n#|$)/i);
64
+ if (consequencesMatch && consequencesMatch[1]) {
65
+ consequences = consequencesMatch[1].trim();
66
+ }
67
+ // Extract category/tags (if any).
68
+ //
69
+ // Three forms occur in the wild, and the idiomatic MADR one used to be the only one
70
+ // that did NOT work -- a YAML block list returned ["- architecture"], capturing the
71
+ // dash and dropping every entry after the first. ADR-022 adopted MADR, whose template
72
+ // uses block lists, so that was the form this needed most.
73
+ //
74
+ // tags: tags: a, b tags: [a, b]
75
+ // - a
76
+ // - b
77
+ //
78
+ // Scoped to the leading `---` front-matter block when one is present, so a `tags:`
79
+ // mention in prose cannot be picked up -- the same discipline scripts/check-adr-drift.sh
80
+ // and repo-governor's adapters/adr both use after that exact false positive.
81
+ const tags = [];
82
+ const fmMatch = content.match(/^---\r?\n([\s\S]*?)\r?\n---/);
83
+ const tagScope = fmMatch?.[1] ?? content;
84
+ const blockMatch = tagScope.match(/^[ \t]*(?:tags?|categories?):[ \t]*\r?\n((?:[ \t]*-[ \t]*\S.*\r?\n?)+)/im);
85
+ if (blockMatch?.[1]) {
86
+ tags.push(...blockMatch[1]
87
+ .split(/\r?\n/)
88
+ .map(line => line.replace(/^[ \t]*-[ \t]*/, '').trim())
89
+ .filter(Boolean));
90
+ }
91
+ else {
92
+ const inlineMatch = tagScope.match(/^[ \t]*(?:tags?|categories?):[ \t]*(.+?)[ \t]*\r?$/im);
93
+ if (inlineMatch?.[1]) {
94
+ tags.push(...inlineMatch[1]
95
+ .replace(/^\[|\]$/g, '') // tolerate the bracket form, which used to keep its brackets
96
+ .split(',')
97
+ .map(tag => tag.trim().replace(/^['"]|['"]$/g, ''))
98
+ .filter(Boolean));
99
+ }
100
+ }
101
+ const fields = { status, tags };
102
+ if (title !== undefined)
103
+ fields.title = title;
104
+ if (date)
105
+ fields.date = date;
106
+ if (number)
107
+ fields.number = number;
108
+ if (context)
109
+ fields.context = context;
110
+ if (decision)
111
+ fields.decision = decision;
112
+ if (consequences)
113
+ fields.consequences = consequences;
114
+ return fields;
115
+ }
116
+ /**
117
+ * Does the document open with a `---...---` YAML front-matter block that declares
118
+ * `status:` and/or `date:`?
119
+ */
120
+ function hasFrontMatterStatusOrDate(content) {
121
+ const fmMatch = content.match(/^---\r?\n([\s\S]*?)\r?\n---/);
122
+ if (!fmMatch || !fmMatch[1])
123
+ return false;
124
+ return /^[ \t]*(?:status|date):/im.test(fmMatch[1]);
125
+ }
126
+ /** Does the document use MADR-style headings? */
127
+ function hasMadrHeadings(content) {
128
+ return (/^##\s+Context and Problem Statement\s*$/im.test(content) ||
129
+ /^##\s+Considered Options\s*$/im.test(content) ||
130
+ /^##\s+Decision Drivers\s*$/im.test(content));
131
+ }
132
+ /**
133
+ * Detect the format of an ADR document.
134
+ *
135
+ * - `'madr'` — leading YAML front matter with `status:`/`date:` AND MADR headings
136
+ * (`## Context and Problem Statement`, and/or `## Considered Options`/
137
+ * `## Decision Drivers`).
138
+ * - `'nygard'` — the Nygard heading set (`## Status`, `## Context`, `## Decision`,
139
+ * `## Consequences`) with a status value on the following line.
140
+ * - `'custom'` — anything else.
141
+ */
142
+ export function detectAdrFormat(content) {
143
+ if (hasFrontMatterStatusOrDate(content) && hasMadrHeadings(content)) {
144
+ return 'madr';
145
+ }
146
+ // Nygard: reuse the field extractor's heading regexes. Context/Decision/Consequences
147
+ // each require the `##`-heading-then-body form, and a status value on the following
148
+ // line resolves to something other than the 'unknown' sentinel.
149
+ const fields = extractAdrFields(content);
150
+ const hasNygardSet = fields.status !== 'unknown' &&
151
+ fields.context !== undefined &&
152
+ fields.decision !== undefined &&
153
+ fields.consequences !== undefined;
154
+ if (hasNygardSet) {
155
+ return 'nygard';
156
+ }
157
+ return 'custom';
158
+ }
159
+ /**
160
+ * Map a Nygard status value onto the lowercase MADR status vocabulary.
161
+ *
162
+ * Nygard "Accepted" -> "accepted", "Deprecated" -> "deprecated",
163
+ * "Superseded" -> "superseded", "Proposed" -> "proposed". Absent/unknown -> "proposed".
164
+ * Any other value passes through lowercased.
165
+ */
166
+ function mapStatusToMadr(status) {
167
+ const s = (status ?? '').trim().toLowerCase();
168
+ if (!s || s === 'unknown')
169
+ return 'proposed';
170
+ if (s.startsWith('accept'))
171
+ return 'accepted';
172
+ if (s.startsWith('deprecat'))
173
+ return 'deprecated';
174
+ if (s.startsWith('supersed'))
175
+ return 'superseded';
176
+ if (s.startsWith('propos'))
177
+ return 'proposed';
178
+ return s;
179
+ }
180
+ /**
181
+ * Convert a Nygard-style ADR into the ADR-022 canonical MADR shape.
182
+ *
183
+ * Idempotent: content already detected as `'madr'` is returned unchanged.
184
+ *
185
+ * `'custom'` content is converted best-effort — whatever Nygard-shaped sections can be
186
+ * recovered are carried across, and any section with nothing to carry becomes an empty
187
+ * placeholder heading. The result is always valid MADR (front matter + MADR headings).
188
+ */
189
+ export function convertNygardToMadr(content) {
190
+ if (detectAdrFormat(content) === 'madr') {
191
+ return content;
192
+ }
193
+ const fields = extractAdrFields(content);
194
+ // Build the YAML front matter via js-yaml (block style, 2-space indent).
195
+ const frontMatter = { status: mapStatusToMadr(fields.status) };
196
+ if (fields.date)
197
+ frontMatter['date'] = fields.date;
198
+ if (fields.tags.length > 0)
199
+ frontMatter['tags'] = fields.tags;
200
+ const yamlBlock = yaml.dump(frontMatter, { indent: 2, lineWidth: -1 }).trimEnd();
201
+ const title = fields.title ?? 'ADR';
202
+ const section = (body) => (body && body.trim() ? body.trim() : '');
203
+ const lines = [
204
+ '---',
205
+ yamlBlock,
206
+ '---',
207
+ '',
208
+ `# ${title}`,
209
+ '',
210
+ '## Context and Problem Statement',
211
+ '',
212
+ section(fields.context),
213
+ '',
214
+ '## Decision',
215
+ '',
216
+ section(fields.decision),
217
+ '',
218
+ '## Consequences',
219
+ '',
220
+ section(fields.consequences),
221
+ '',
222
+ '## More Information',
223
+ '',
224
+ ];
225
+ // Collapse the doubled blank lines that empty sections introduce, then end with a
226
+ // single trailing newline.
227
+ return lines
228
+ .join('\n')
229
+ .replace(/\n{3,}/g, '\n\n')
230
+ .replace(/\s*$/, '\n');
231
+ }
232
+ //# sourceMappingURL=adr-format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adr-format.js","sourceRoot":"","sources":["../../../src/utils/adr-format.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "mcp-adr-analysis-server",
3
3
  "mcpName": "io.github.tosin2013/mcp-adr-analysis-server",
4
- "version": "2.8.0",
4
+ "version": "2.9.0",
5
5
  "description": "MCP server for analyzing Architectural Decision Records and project architecture",
6
6
  "main": "dist/src/index.js",
7
7
  "type": "module",