@shuji-bonji/rfcxml-mcp 0.6.13 → 0.6.53

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 (67) hide show
  1. package/README.ja.md +178 -50
  2. package/README.md +181 -51
  3. package/dist/cli/prefetch.d.ts +6 -1
  4. package/dist/cli/prefetch.d.ts.map +1 -1
  5. package/dist/cli/prefetch.js +53 -23
  6. package/dist/cli/prefetch.js.map +1 -1
  7. package/dist/config.d.ts +0 -2
  8. package/dist/config.d.ts.map +1 -1
  9. package/dist/config.js +3 -2
  10. package/dist/config.js.map +1 -1
  11. package/dist/constants.d.ts +16 -0
  12. package/dist/constants.d.ts.map +1 -1
  13. package/dist/constants.js +80 -7
  14. package/dist/constants.js.map +1 -1
  15. package/dist/services/checklist-generator.d.ts.map +1 -1
  16. package/dist/services/checklist-generator.js +72 -7
  17. package/dist/services/checklist-generator.js.map +1 -1
  18. package/dist/services/rfc-fetcher.d.ts +19 -1
  19. package/dist/services/rfc-fetcher.d.ts.map +1 -1
  20. package/dist/services/rfc-fetcher.js +116 -19
  21. package/dist/services/rfc-fetcher.js.map +1 -1
  22. package/dist/services/rfc-service.d.ts +11 -1
  23. package/dist/services/rfc-service.d.ts.map +1 -1
  24. package/dist/services/rfc-service.js +45 -5
  25. package/dist/services/rfc-service.js.map +1 -1
  26. package/dist/services/rfc-text-parser.d.ts.map +1 -1
  27. package/dist/services/rfc-text-parser.js +1594 -88
  28. package/dist/services/rfc-text-parser.js.map +1 -1
  29. package/dist/services/rfcxml-parser.d.ts.map +1 -1
  30. package/dist/services/rfcxml-parser.js +366 -98
  31. package/dist/services/rfcxml-parser.js.map +1 -1
  32. package/dist/tools/definitions.d.ts +8 -0
  33. package/dist/tools/definitions.d.ts.map +1 -1
  34. package/dist/tools/definitions.js +17 -1
  35. package/dist/tools/definitions.js.map +1 -1
  36. package/dist/tools/handlers.d.ts +24 -12
  37. package/dist/tools/handlers.d.ts.map +1 -1
  38. package/dist/tools/handlers.js +161 -36
  39. package/dist/tools/handlers.js.map +1 -1
  40. package/dist/types/index.d.ts +22 -2
  41. package/dist/types/index.d.ts.map +1 -1
  42. package/dist/utils/cache.d.ts +19 -0
  43. package/dist/utils/cache.d.ts.map +1 -1
  44. package/dist/utils/cache.js +32 -0
  45. package/dist/utils/cache.js.map +1 -1
  46. package/dist/utils/disk-cache.d.ts +10 -6
  47. package/dist/utils/disk-cache.d.ts.map +1 -1
  48. package/dist/utils/disk-cache.js +13 -9
  49. package/dist/utils/disk-cache.js.map +1 -1
  50. package/dist/utils/logger.d.ts.map +1 -1
  51. package/dist/utils/logger.js +3 -1
  52. package/dist/utils/logger.js.map +1 -1
  53. package/dist/utils/requirement-extractor.d.ts.map +1 -1
  54. package/dist/utils/requirement-extractor.js +413 -21
  55. package/dist/utils/requirement-extractor.js.map +1 -1
  56. package/dist/utils/section.d.ts.map +1 -1
  57. package/dist/utils/section.js +11 -0
  58. package/dist/utils/section.js.map +1 -1
  59. package/dist/utils/statement-matcher.d.ts +69 -4
  60. package/dist/utils/statement-matcher.d.ts.map +1 -1
  61. package/dist/utils/statement-matcher.js +524 -48
  62. package/dist/utils/statement-matcher.js.map +1 -1
  63. package/dist/utils/text.d.ts +62 -0
  64. package/dist/utils/text.d.ts.map +1 -1
  65. package/dist/utils/text.js +273 -18
  66. package/dist/utils/text.js.map +1 -1
  67. package/package.json +5 -2
@@ -3,11 +3,12 @@
3
3
  */
4
4
  import { extractRequirements } from '../services/rfcxml-parser.js';
5
5
  import { generateChecklist, generateChecklistMarkdown, getChecklistStats, } from '../services/checklist-generator.js';
6
- import { getParsedRFC, clearParseCache, getSourceNoteIfText } from '../services/rfc-service.js';
6
+ import { getParsedRFC, clearParseCache, getSourceNoteIfText, getXMLFetchFailureNote, } from '../services/rfc-service.js';
7
7
  import { fetchRFCMetadata, fetchReferencedBy, fetchReferences } from '../services/rfc-fetcher.js';
8
8
  import { validateRFCNumber } from '../utils/validation.js';
9
9
  import { findSection, collectCrossReferences, normalizeSectionNumber } from '../utils/section.js';
10
- import { matchStatement, isSubjectTerm, MATCHING_LIMITS } from '../utils/statement-matcher.js';
10
+ import { matchStatement, isSubjectTerm, findUndecidablePassiveProhibition, findQualifierOnlyViolation, MATCHING_LIMITS, } from '../utils/statement-matcher.js';
11
+ import { clipAtWord } from '../utils/text.js';
11
12
  // Re-export clearParseCache for testing
12
13
  export { clearParseCache };
13
14
  /**
@@ -22,6 +23,45 @@ export { clearParseCache };
22
23
  * most one round-trip of latency over the previous behavior, and is free on
23
24
  * cache hits.
24
25
  */
26
+ /**
27
+ * Datatracker が返した著者を、本文が印字している順に並べ替える。
28
+ *
29
+ * `documentauthor.order` は古い RFC では本文の並びと食い違う。実測(本文の
30
+ * 著者欄が読めたテキスト経路の RFC 25 本)で、並びが一致したのは 12 本だった。
31
+ *
32
+ * | RFC | 本文 | API の order |
33
+ * |---|---|---|
34
+ * | 6455 | Fette / Melnikov | Melnikov / Fette |
35
+ * | 5246 | Dierks / Rescorla | Rescorla / Dierks |
36
+ * | 4253 | Ylonen / Lonvick | Lonvick / Ylonen |
37
+ * | 2445 | Dawson / Stenerson | Stenerson / Dawson |
38
+ * | 4271 | Rekhter / Li / Hares | Rekhter / Hares / Li |
39
+ * | 1157 | Case / Fedor / Schoffstall / Davin | Fedor / Schoffstall / Davin / Case |
40
+ *
41
+ * **顔ぶれが一致するときだけ並べ替える。** 本文の著者欄から姓を拾う規則は
42
+ * 所属を名前と読み違えることがある(RFC 6265 の `U.C. Berkeley`)ので、
43
+ * 著者を足したり落としたりはしない。顔ぶれが違えば API の並びをそのまま返す。
44
+ */
45
+ export function orderByDocument(authors, order) {
46
+ if (!order || order.length !== authors.length)
47
+ return authors;
48
+ const surnameOf = (author) => (author.fullname || '').trim().split(/\s+/).pop()?.toLowerCase() ?? '';
49
+ const remaining = new Map();
50
+ for (const author of authors) {
51
+ const key = surnameOf(author);
52
+ if (!remaining.has(key))
53
+ remaining.set(key, []);
54
+ remaining.get(key).push(author);
55
+ }
56
+ const ordered = [];
57
+ for (const surname of order) {
58
+ const bucket = remaining.get(surname);
59
+ if (!bucket || bucket.length === 0)
60
+ return authors;
61
+ ordered.push(bucket.shift());
62
+ }
63
+ return ordered;
64
+ }
25
65
  export async function handleGetRFCStructure(args) {
26
66
  validateRFCNumber(args.rfc);
27
67
  const [parsedResult, apiMetadata] = await Promise.all([
@@ -30,7 +70,7 @@ export async function handleGetRFCStructure(args) {
30
70
  // shape inside fetchRFCMetadata, so this never rejects.
31
71
  fetchRFCMetadata(args.rfc, { includeAuthors: args.includeAuthors === true }),
32
72
  ]);
33
- const { data: parsed, source } = parsedResult;
73
+ const { data: parsed, source, xmlFetchError } = parsedResult;
34
74
  // Simplify section structure
35
75
  function simplifySection(section, includeContent) {
36
76
  const result = {
@@ -50,19 +90,24 @@ export async function handleGetRFCStructure(args) {
50
90
  // Merge: prefer XML body for title/docName/number (authoritative for the
51
91
  // RFC body), fold in API-derived fields. Authors only included when
52
92
  // includeAuthors=true (otherwise the API fetch returned [] anyway).
93
+ // `authorOrder` は並べ替えの手掛かりであって、返す値ではない。
94
+ // `category` / `stream` は Datatracker に届いたときだけ付く。届かなかった
95
+ // ときと、対応表に無い値(RFC 1 の `unkn` / `legacy`)のときは省く。
96
+ // 既定値で埋めると、取れなかったことが応答のどこにも出ない。
97
+ const { authorOrder, ...bodyMetadata } = parsed.metadata;
53
98
  const mergedMetadata = {
54
- ...parsed.metadata,
99
+ ...bodyMetadata,
55
100
  number: parsed.metadata.number ?? args.rfc,
56
101
  title: parsed.metadata.title || apiMetadata.title,
57
- category: apiMetadata.category,
58
- stream: apiMetadata.stream,
102
+ ...(apiMetadata.category ? { category: apiMetadata.category } : {}),
103
+ ...(apiMetadata.stream ? { stream: apiMetadata.stream } : {}),
59
104
  // 公開日は本文(RFCXML の front/date、テキストではヘッダ行)から取る。
60
105
  // Datatracker の document.time はレコードの更新時刻であって公開日ではない。
61
106
  date: parsed.metadata.date,
62
107
  abstract: apiMetadata.abstract,
63
108
  };
64
109
  if (apiMetadata.authors.length > 0) {
65
- mergedMetadata.authors = apiMetadata.authors;
110
+ mergedMetadata.authors = orderByDocument(apiMetadata.authors, authorOrder);
66
111
  }
67
112
  return {
68
113
  metadata: mergedMetadata,
@@ -72,15 +117,25 @@ export async function handleGetRFCStructure(args) {
72
117
  informative: parsed.references.informative.length,
73
118
  },
74
119
  _source: source,
75
- _sourceNote: getSourceNoteIfText(source, 'structure'),
120
+ _sourceNote: joinNotes(getSourceNoteIfText(source, 'structure', xmlFetchError), apiMetadata.datatrackerError
121
+ ? `IETF Datatracker API was not reachable (${apiMetadata.datatrackerError}); category, stream and abstract are omitted.`
122
+ : undefined),
76
123
  };
77
124
  }
125
+ /**
126
+ * 複数の注記を 1 つの `_sourceNote` にまとめる。どれも無ければ `undefined`
127
+ * (JSON には出ない)。
128
+ */
129
+ function joinNotes(...notes) {
130
+ const present = notes.filter((note) => Boolean(note));
131
+ return present.length > 0 ? present.join(' ') : undefined;
132
+ }
78
133
  /**
79
134
  * get_requirements handler
80
135
  */
81
136
  export async function handleGetRequirements(args) {
82
137
  validateRFCNumber(args.rfc);
83
- const { data: parsed, source } = await getParsedRFC(args.rfc);
138
+ const { data: parsed, source, xmlFetchError } = await getParsedRFC(args.rfc);
84
139
  const requirements = extractRequirements(parsed.sections, {
85
140
  section: args.section,
86
141
  level: args.level,
@@ -102,7 +157,7 @@ export async function handleGetRequirements(args) {
102
157
  stats,
103
158
  requirements,
104
159
  _source: source,
105
- _sourceNote: getSourceNoteIfText(source, 'requirements'),
160
+ _sourceNote: getSourceNoteIfText(source, 'requirements', xmlFetchError),
106
161
  };
107
162
  }
108
163
  /**
@@ -110,7 +165,7 @@ export async function handleGetRequirements(args) {
110
165
  */
111
166
  export async function handleGetDefinitions(args) {
112
167
  validateRFCNumber(args.rfc);
113
- const { data: parsed, source } = await getParsedRFC(args.rfc);
168
+ const { data: parsed, source, xmlFetchError } = await getParsedRFC(args.rfc);
114
169
  let definitions = parsed.definitions;
115
170
  // Filter by term
116
171
  if (args.term) {
@@ -123,7 +178,7 @@ export async function handleGetDefinitions(args) {
123
178
  count: definitions.length,
124
179
  definitions,
125
180
  _source: source,
126
- _sourceNote: getSourceNoteIfText(source, 'definitions'),
181
+ _sourceNote: getSourceNoteIfText(source, 'definitions', xmlFetchError),
127
182
  };
128
183
  }
129
184
  /**
@@ -149,7 +204,7 @@ export async function handleGetDefinitions(args) {
149
204
  */
150
205
  export async function handleGetDependencies(args) {
151
206
  validateRFCNumber(args.rfc);
152
- const { data: parsed, source } = await getParsedRFC(args.rfc);
207
+ const { data: parsed, source, xmlFetchError } = await getParsedRFC(args.rfc);
153
208
  const bodyNormative = parsed.references.normative.map((ref) => ({
154
209
  rfcNumber: ref.rfcNumber,
155
210
  title: ref.title,
@@ -207,8 +262,9 @@ export async function handleGetDependencies(args) {
207
262
  _source: source,
208
263
  _referencesSource: referencesSource,
209
264
  };
210
- if (sourceNote)
211
- result._sourceNote = sourceNote;
265
+ const note = joinNotes(sourceNote, xmlFetchError ? getXMLFetchFailureNote(xmlFetchError) : undefined);
266
+ if (note)
267
+ result._sourceNote = note;
212
268
  // Fetch RFCs that reference this RFC from IETF Datatracker API.
213
269
  if (args.includeReferencedBy) {
214
270
  result.referencedBy = await fetchReferencedBy(args.rfc);
@@ -220,28 +276,37 @@ export async function handleGetDependencies(args) {
220
276
  */
221
277
  export async function handleGetRelatedSections(args) {
222
278
  validateRFCNumber(args.rfc);
223
- const { data: parsed, source } = await getParsedRFC(args.rfc);
279
+ const { data: parsed, source, xmlFetchError } = await getParsedRFC(args.rfc);
280
+ // 無い節は throw して `isError: true` にそろえる。v0.6.52 までは
281
+ // `{ error }` を正常応答として返しており、`rfc: 0` や 404 と形が違っていた。
224
282
  const targetSection = findSection(parsed.sections, args.section);
225
283
  if (!targetSection) {
226
- return {
227
- error: `Section ${args.section} not found`,
228
- };
284
+ throw new Error(`Section ${args.section} not found`);
229
285
  }
230
286
  // Collect cross-references using utility
231
287
  const relatedSections = collectCrossReferences(targetSection);
288
+ // 自分自身は「関連する節」ではない。RFC 8017 §1 は
289
+ // `This document is organized as follows: Section 1 is an introduction …`
290
+ // と自分を挙げるので、§1 を引くと §1 が返っていた。
291
+ relatedSections.delete(args.section);
292
+ relatedSections.delete(normalizeSectionNumber(targetSection.number ?? ''));
232
293
  return {
233
294
  rfc: args.rfc,
234
295
  section: args.section,
235
296
  title: targetSection.title,
236
- relatedSections: Array.from(relatedSections).map((secNum) => {
237
- const sec = findSection(parsed.sections, secNum);
238
- return {
239
- number: secNum,
240
- title: sec?.title || 'Unknown',
241
- };
242
- }),
297
+ // 実在する節だけを返す。原文が実在しない節を指していることがある
298
+ // (RFC 1323 §1.2 の `as explained in Section 5.3 and Appendix B` は
299
+ // §5.3 を指すが、RFC 1323 に §5.3 は無い)。番号だけ返しても引けないので、
300
+ // 題名を `Unknown` にして返していた。
301
+ relatedSections: Array.from(relatedSections)
302
+ .map((secNum) => ({ number: secNum, section: findSection(parsed.sections, secNum) }))
303
+ .filter((entry) => entry.section !== undefined && entry.section !== null)
304
+ .map((entry) => ({
305
+ number: entry.number,
306
+ title: entry.section?.title || 'Unknown',
307
+ })),
243
308
  _source: source,
244
- _sourceNote: getSourceNoteIfText(source, 'sections'),
309
+ _sourceNote: getSourceNoteIfText(source, 'sections', xmlFetchError),
245
310
  };
246
311
  }
247
312
  /**
@@ -249,7 +314,7 @@ export async function handleGetRelatedSections(args) {
249
314
  */
250
315
  export async function handleGenerateChecklist(args) {
251
316
  validateRFCNumber(args.rfc);
252
- const { data: parsed, source } = await getParsedRFC(args.rfc);
317
+ const { data: parsed, source, xmlFetchError } = await getParsedRFC(args.rfc);
253
318
  const requirements = extractRequirements(parsed.sections, {
254
319
  sections: args.sections,
255
320
  includeSubsections: args.includeSubsections !== false, // デフォルト true
@@ -265,16 +330,40 @@ export async function handleGenerateChecklist(args) {
265
330
  stats,
266
331
  markdown,
267
332
  _source: source,
268
- _sourceNote: getSourceNoteIfText(source, 'checklist'),
333
+ _sourceNote: getSourceNoteIfText(source, 'checklist', xmlFetchError),
269
334
  };
270
335
  }
336
+ /**
337
+ * `isValid` が `null` のときに、なぜ判断しなかったかを返す。
338
+ *
339
+ * 理由は 2 つあり、意味が違う。一致が弱くて判断できないのか、一致はあるが
340
+ * 受動態で書かれていて実行者を照合できないのか。前者の文言を後者にも出すと、
341
+ * 一致している要件が `matchingRequirements` の先頭にあるのに「一致が無い」と
342
+ * 読める。
343
+ */
344
+ function verdictNote(isValid, undecidable, qualifierOnly = null, weakConflicts = []) {
345
+ if (isValid !== null)
346
+ return undefined;
347
+ if (weakConflicts.length > 0) {
348
+ // 矛盾はあるが、その相手との一致が判定の閾値に届かない。「一致が無い」と
349
+ // 読める文言を出すと、`conflicts` に相手が並んでいるのと食い違う。
350
+ return `isValid is null: conflicts were found (${weakConflicts.map((r) => r.id).join(', ')}) but the match with those requirements is below the threshold for a verdict. Read those requirements and decide. This is not a statement of compliance.`;
351
+ }
352
+ if (qualifierOnly) {
353
+ return `isValid is null: requirement ${qualifierOnly.requirement.id} turns on "${qualifierOnly.qualifier}", a word the statement does not use, so whether they describe the same case cannot be decided. This is not a statement of compliance.`;
354
+ }
355
+ if (undecidable) {
356
+ return `isValid is null: requirement ${undecidable.id} forbids this in the passive voice, so who performs the act cannot be matched. Read that requirement and decide. This is not a statement of compliance.`;
357
+ }
358
+ return 'isValid is null: no requirement matched strongly enough to judge. This is not a statement of compliance.';
359
+ }
271
360
  /**
272
361
  * validate_statement handler
273
362
  * Uses weighted keyword matching for better precision
274
363
  */
275
364
  export async function handleValidateStatement(args) {
276
365
  validateRFCNumber(args.rfc);
277
- const { data: parsed, source } = await getParsedRFC(args.rfc);
366
+ const { data: parsed, source, xmlFetchError } = await getParsedRFC(args.rfc);
278
367
  const requirements = extractRequirements(parsed.sections);
279
368
  // Use weighted matching
280
369
  const { matches, conflicts, statementLevel, statementSubject } = matchStatement(args.statement, requirements, { maxResults: 10 });
@@ -286,18 +375,55 @@ export async function handleValidateStatement(args) {
286
375
  const contentKeywords = (topMatch?.matchedKeywords ?? []).filter((k) => !isSubjectTerm(k));
287
376
  const hasVerdictEvidence = topScore >= MATCHING_LIMITS.MIN_SCORE_FOR_VERDICT &&
288
377
  contentKeywords.length >= MATCHING_LIMITS.MIN_CONTENT_KEYWORDS_FOR_VERDICT;
289
- const isValid = hasVerdictEvidence ? conflicts.length === 0 : null;
378
+ // 矛盾の相手との一致が閾値に届いていれば、最上位の一致が弱くても `false` を
379
+ // 返す。最上位だけを見ていたため、RFC 6455 の "A client MAY send unmasked
380
+ // frames to the server." は R-5.1-1(MUST mask)との矛盾を `conflicts` に
381
+ // 並べながら `isValid: null` になり、注記は「一致が無い」と読めた。
382
+ // 矛盾は要件文そのものとの突き合わせなので、`true` を準拠の証明にしない
383
+ // 方針とは別で、根拠のある `false` である。閾値に届かない矛盾は `null` の
384
+ // まま、注記だけを「矛盾はあるが判定の閾値に届かない」に変える。
385
+ const strongEnough = (m) => m.score >= MATCHING_LIMITS.MIN_SCORE_FOR_VERDICT &&
386
+ m.matchedKeywords.filter((k) => !isSubjectTerm(k)).length >=
387
+ MATCHING_LIMITS.MIN_CONTENT_KEYWORDS_FOR_VERDICT;
388
+ const conflictMatches = conflicts.map((c) => matches.find((m) => m.requirement.id === c.requirement.id));
389
+ const hasConflictEvidence = conflictMatches.some((m) => m !== undefined && strongEnough(m));
390
+ const weakConflicts = conflicts.length > 0 && !hasVerdictEvidence && !hasConflictEvidence
391
+ ? conflicts.map((c) => c.requirement)
392
+ : [];
393
+ // 受動態で書かれた禁止("MUST NOT be used")は、矛盾検出が行為の実行者を
394
+ // 見つけられない。conflicts が空のまま true を返すと、違反している文に
395
+ // 「矛盾なし」と答えることになる。該当したら判断を取り下げる。
396
+ const undecidable = hasVerdictEvidence && conflicts.length === 0
397
+ ? findUndecidablePassiveProhibition(args.statement, matches)
398
+ : null;
399
+ // 限定語(`without` `unless` `except`)を言い換えた主張も、矛盾が出ない。
400
+ // "An origin server without a clock MUST NOT generate a Date header field."
401
+ // に対する "… even though it has no clock." が該当する。
402
+ const qualifierOnly = hasVerdictEvidence && conflicts.length === 0 && !undecidable
403
+ ? findQualifierOnlyViolation(args.statement, matches)
404
+ : null;
405
+ const isValid = hasConflictEvidence
406
+ ? false
407
+ : hasVerdictEvidence && !undecidable && !qualifierOnly
408
+ ? conflicts.length === 0
409
+ : null;
290
410
  // Build suggestions
291
411
  const suggestions = [];
292
412
  if (matches.length === 0) {
293
413
  suggestions.push("No matching requirements found. Matching is English keyword based; try the RFC's own wording.");
294
414
  }
295
- else if (!hasVerdictEvidence) {
415
+ else if (!hasVerdictEvidence && !hasConflictEvidence) {
296
416
  suggestions.push('Matches are too weak to judge. Name the subject (e.g., "client", "server") and what it does, using the RFC\'s own nouns and verbs.');
297
417
  }
298
418
  if (conflicts.length > 0) {
299
419
  suggestions.push('Potential conflicts detected. Review the requirement levels (MUST/SHOULD/MAY) carefully.');
300
420
  }
421
+ if (qualifierOnly) {
422
+ suggestions.push(`Cannot judge: requirement ${qualifierOnly.requirement.id} turns on "${qualifierOnly.qualifier}", a word the statement does not use. Read that requirement and decide whether the statement means the same case.`);
423
+ }
424
+ if (undecidable) {
425
+ suggestions.push(`Cannot judge: requirement ${undecidable.id} is written in the passive voice ("${undecidable.level} ${clipAtWord(undecidable.action ?? '', 60)}"), so the text names no actor. Read that requirement and decide.`);
426
+ }
301
427
  if (statementLevel && !statementSubject) {
302
428
  suggestions.push('Consider specifying the subject (e.g., "client", "server") for better matching.');
303
429
  }
@@ -309,13 +435,12 @@ export async function handleValidateStatement(args) {
309
435
  detectedSubject: statementSubject,
310
436
  },
311
437
  isValid,
312
- _verdictNote: isValid === null
313
- ? 'isValid is null: no requirement matched strongly enough to judge. This is not a statement of compliance.'
314
- : undefined,
438
+ _verdictNote: verdictNote(isValid, undecidable, qualifierOnly, weakConflicts),
315
439
  matchingRequirements: matches.map((m) => ({
316
440
  ...m.requirement,
317
441
  _matchScore: m.score,
318
442
  _matchedKeywords: m.matchedKeywords,
443
+ _contextKeywords: m.contextKeywords.length > 0 ? m.contextKeywords : undefined,
319
444
  _subjectMatch: m.subjectMatch,
320
445
  _levelMatch: m.levelMatch,
321
446
  })),
@@ -325,7 +450,7 @@ export async function handleValidateStatement(args) {
325
450
  })),
326
451
  suggestions: suggestions.length > 0 ? suggestions : undefined,
327
452
  _source: source,
328
- _sourceNote: getSourceNoteIfText(source, 'validation'),
453
+ _sourceNote: getSourceNoteIfText(source, 'validation', xmlFetchError),
329
454
  };
330
455
  }
331
456
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"handlers.js","sourceRoot":"","sources":["../../src/tools/handlers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"handlers.js","sourceRoot":"","sources":["../../src/tools/handlers.ts"],"names":[],"mappings":"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"}
@@ -20,6 +20,14 @@ export interface ParsedRFC {
20
20
  * Datatracker の `document.time` はレコードの更新時刻であって公開日ではない。
21
21
  */
22
22
  date?: string;
23
+ /**
24
+ * 本文の著者欄に並ぶ姓を、印字されている順で並べたもの。
25
+ *
26
+ * Datatracker の `documentauthor.order` は、古い RFC では本文の並びと
27
+ * 食い違う。RFC 6455 の本文は `I. Fette` / `A. Melnikov` の順に印字するが、
28
+ * API の `order` は 0=Melnikov、1=Fette である。並べ替えにだけ使う。
29
+ */
30
+ authorOrder?: string[];
23
31
  };
24
32
  sections: Section[];
25
33
  references: {
@@ -38,8 +46,20 @@ export interface RFCMetadata {
38
46
  * 公開日は本文(RFCXML の `front/date` / テキストのヘッダ)から取る。
39
47
  */
40
48
  datatrackerUpdated: string;
41
- category: 'std' | 'bcp' | 'info' | 'exp' | 'historic';
42
- stream: 'IETF' | 'IAB' | 'IRTF' | 'independent' | 'editorial';
49
+ /**
50
+ * Datatracker の `std_level` / `stream` から引いた値。
51
+ * **API に届かなかったとき、または対応表に無い値のときは付けない。**
52
+ * v0.6.52 までは `'info'` / `'IETF'` を既定値にしていたため、RFC 1
53
+ * (Datatracker は `unkn` / `legacy`)が info / IETF として返っていた。
54
+ */
55
+ category?: 'std' | 'bcp' | 'info' | 'exp' | 'historic';
56
+ stream?: 'IETF' | 'IAB' | 'IRTF' | 'independent' | 'editorial';
57
+ /**
58
+ * Datatracker の document API に届かなかったときの理由(`HTTP 500` など)。
59
+ * 付いているときは `category` / `stream` / `abstract` が無い。
60
+ * `get_rfc_structure` はこれを `_sourceNote` に書く。
61
+ */
62
+ datatrackerError?: string;
43
63
  abstract?: string;
44
64
  keywords?: string[];
45
65
  obsoletes?: number[];
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
@@ -59,4 +59,23 @@ export declare class LRUCache<K, V> {
59
59
  * デフォルトのキャッシュ設定
60
60
  */
61
61
  export declare const DEFAULT_CACHE_OPTIONS: Required<CacheOptions>;
62
+ /**
63
+ * 同じ鍵への同時呼び出しを 1 本の Promise にまとめる。
64
+ *
65
+ * LRU は結果が入るまでのあいだ何も持たない。MCP クライアントは 1 つの RFC に
66
+ * `get_rfc_structure` と `get_requirements` を並列に出すのが普通の使い方で、
67
+ * v0.6.52 まではその数だけ rfc-editor.org を叩き、`parseRFCXML` も回数分走って
68
+ * いた(Issue #15: 同時 3 本で `Fetched from rfcEditor` が 3 行)。
69
+ *
70
+ * 2 本目以降は 1 本目の Promise をそのまま返す。**終わったら成功・失敗を問わず
71
+ * 外す。** 失敗した Promise を残すと、一時的なネットワーク失敗がプロセスの
72
+ * 生きているあいだ再現し続ける。
73
+ */
74
+ export declare class InFlightMap<K, V> {
75
+ private readonly inFlight;
76
+ /** 走っている呼び出しの数(テスト用) */
77
+ get size(): number;
78
+ share(key: K, start: () => Promise<V>): Promise<V>;
79
+ clear(): void;
80
+ }
62
81
  //# sourceMappingURL=cache.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/utils/cache.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,YAAY;IAC3B,yBAAyB;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6BAA6B;IAC7B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,oBAAoB;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,qBAAa,QAAQ,CAAC,CAAC,EAAE,CAAC;IACxB,OAAO,CAAC,KAAK,CAAY;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAU;IAChC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;gBAElB,OAAO,GAAE,YAAiB;IAOtC;;;OAGG;IACH,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS;IAiB1B;;;OAGG;IACH,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAwB3B;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO;IAIpB;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO;IAIvB;;OAEG;IACH,KAAK,IAAI,IAAI;IAOb;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;OAEG;IACH,KAAK,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,CAAC,EAAE,CAAA;KAAE;CAOtD;AAED;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,QAAQ,CAAC,YAAY,CAIxD,CAAC"}
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/utils/cache.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,YAAY;IAC3B,yBAAyB;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6BAA6B;IAC7B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,oBAAoB;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,qBAAa,QAAQ,CAAC,CAAC,EAAE,CAAC;IACxB,OAAO,CAAC,KAAK,CAAY;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAU;IAChC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;gBAElB,OAAO,GAAE,YAAiB;IAOtC;;;OAGG;IACH,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS;IAiB1B;;;OAGG;IACH,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAwB3B;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO;IAIpB;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO;IAIvB;;OAEG;IACH,KAAK,IAAI,IAAI;IAOb;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;OAEG;IACH,KAAK,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,CAAC,EAAE,CAAA;KAAE;CAOtD;AAED;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,QAAQ,CAAC,YAAY,CAIxD,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,qBAAa,WAAW,CAAC,CAAC,EAAE,CAAC;IAC3B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA4B;IAErD,wBAAwB;IACxB,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAWlD,KAAK,IAAI,IAAI;CAGd"}
@@ -104,4 +104,36 @@ export const DEFAULT_CACHE_OPTIONS = {
104
104
  debug: false,
105
105
  name: 'RFCCache',
106
106
  };
107
+ /**
108
+ * 同じ鍵への同時呼び出しを 1 本の Promise にまとめる。
109
+ *
110
+ * LRU は結果が入るまでのあいだ何も持たない。MCP クライアントは 1 つの RFC に
111
+ * `get_rfc_structure` と `get_requirements` を並列に出すのが普通の使い方で、
112
+ * v0.6.52 まではその数だけ rfc-editor.org を叩き、`parseRFCXML` も回数分走って
113
+ * いた(Issue #15: 同時 3 本で `Fetched from rfcEditor` が 3 行)。
114
+ *
115
+ * 2 本目以降は 1 本目の Promise をそのまま返す。**終わったら成功・失敗を問わず
116
+ * 外す。** 失敗した Promise を残すと、一時的なネットワーク失敗がプロセスの
117
+ * 生きているあいだ再現し続ける。
118
+ */
119
+ export class InFlightMap {
120
+ inFlight = new Map();
121
+ /** 走っている呼び出しの数(テスト用) */
122
+ get size() {
123
+ return this.inFlight.size;
124
+ }
125
+ share(key, start) {
126
+ const existing = this.inFlight.get(key);
127
+ if (existing)
128
+ return existing;
129
+ const promise = start().finally(() => {
130
+ this.inFlight.delete(key);
131
+ });
132
+ this.inFlight.set(key, promise);
133
+ return promise;
134
+ }
135
+ clear() {
136
+ this.inFlight.clear();
137
+ }
138
+ }
107
139
  //# sourceMappingURL=cache.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/utils/cache.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/utils/cache.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,7 @@
8
8
  *
9
9
  * File layout (under `dir`):
10
10
  * ./rfc{N}.xml — raw RFCXML body, UTF-8
11
+ * ./rfc{N}.txt — raw RFC text body, UTF-8(`kind: 'text'` のとき)
11
12
  *
12
13
  * Intentionally minimal: no metadata, no eviction, no checksums. We trust the
13
14
  * filesystem and the source URL. If staleness becomes a concern, the operator
@@ -17,23 +18,26 @@
17
18
  * `RFCXML_CACHE_DIR` environment variable; returns null when the variable is
18
19
  * unset/empty so callers can no-op cleanly.
19
20
  */
21
+ /** 取り出す本文の種類。ファイルの拡張子と、`fromEnv` が使う下位ディレクトリを決める。 */
22
+ export type CacheKind = 'xml' | 'text';
20
23
  export declare class DiskCache {
21
24
  readonly dir: string;
25
+ readonly kind: CacheKind;
22
26
  /**
23
27
  * @param dir Absolute or relative directory path. Created lazily on first
24
28
  * `set` — readers tolerate non-existent dirs by returning null.
29
+ * @param kind 本文の種類。省略すると `xml`。
25
30
  */
26
- constructor(dir: string);
31
+ constructor(dir: string, kind?: CacheKind);
27
32
  /**
28
33
  * Construct a DiskCache from the `RFCXML_CACHE_DIR` environment variable.
29
34
  * Returns null when the var is unset/empty so the caller can keep the
30
35
  * disk-cache code path optional without conditionals at every call site.
31
36
  *
32
- * The cache is rooted at `<RFCXML_CACHE_DIR>/xml/` to leave room for
33
- * sibling subdirectories (e.g., text, metadata) in the future without
34
- * mixing files.
37
+ * The cache is rooted at `<RFCXML_CACHE_DIR>/<kind>/` so that XML と
38
+ * テキストが混ざらない。
35
39
  */
36
- static fromEnv(): DiskCache | null;
40
+ static fromEnv(kind?: CacheKind): DiskCache | null;
37
41
  /**
38
42
  * Compute the on-disk filepath for a given RFC number. Public so the CLI
39
43
  * and tests can sanity-check.
@@ -51,6 +55,6 @@ export declare class DiskCache {
51
55
  * and a write failure (e.g., disk full, permission denied) must not break
52
56
  * the runtime fetch path.
53
57
  */
54
- set(rfcNumber: number, xml: string): Promise<void>;
58
+ set(rfcNumber: number, body: string): Promise<void>;
55
59
  }
56
60
  //# sourceMappingURL=disk-cache.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"disk-cache.d.ts","sourceRoot":"","sources":["../../src/utils/disk-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAMH,qBAAa,SAAS;aAKQ,GAAG,EAAE,MAAM;IAJvC;;;OAGG;gBACyB,GAAG,EAAE,MAAM;IAEvC;;;;;;;;OAQG;IACH,MAAM,CAAC,OAAO,IAAI,SAAS,GAAG,IAAI;IAMlC;;;OAGG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAI7B,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAS9C;;;OAGG;IACG,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAepD;;;;;OAKG;IACG,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAWzD"}
1
+ {"version":3,"file":"disk-cache.d.ts","sourceRoot":"","sources":["../../src/utils/disk-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAMH,qDAAqD;AACrD,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,MAAM,CAAC;AAIvC,qBAAa,SAAS;aAOF,GAAG,EAAE,MAAM;aACX,IAAI,EAAE,SAAS;IAPjC;;;;OAIG;gBAEe,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,SAAiB;IAGzC;;;;;;;OAOG;IACH,MAAM,CAAC,OAAO,CAAC,IAAI,GAAE,SAAiB,GAAG,SAAS,GAAG,IAAI;IAMzD;;;OAGG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAI7B,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAS9C;;;OAGG;IACG,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAepD;;;;;OAKG;IACG,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAW1D"}