@shuji-bonji/rfcxml-mcp 0.3.0 → 0.4.1

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 (54) hide show
  1. package/README.ja.md +39 -33
  2. package/README.md +37 -29
  3. package/dist/config.d.ts +26 -26
  4. package/dist/config.d.ts.map +1 -1
  5. package/dist/config.js +28 -25
  6. package/dist/config.js.map +1 -1
  7. package/dist/constants.d.ts +30 -5
  8. package/dist/constants.d.ts.map +1 -1
  9. package/dist/constants.js +49 -7
  10. package/dist/constants.js.map +1 -1
  11. package/dist/index.d.ts +1 -1
  12. package/dist/index.js +18 -17
  13. package/dist/index.js.map +1 -1
  14. package/dist/services/checklist-generator.d.ts +43 -0
  15. package/dist/services/checklist-generator.d.ts.map +1 -0
  16. package/dist/services/checklist-generator.js +107 -0
  17. package/dist/services/checklist-generator.js.map +1 -0
  18. package/dist/services/rfc-fetcher.d.ts +11 -11
  19. package/dist/services/rfc-fetcher.d.ts.map +1 -1
  20. package/dist/services/rfc-fetcher.js +37 -31
  21. package/dist/services/rfc-fetcher.js.map +1 -1
  22. package/dist/services/rfc-text-parser.d.ts +4 -6
  23. package/dist/services/rfc-text-parser.d.ts.map +1 -1
  24. package/dist/services/rfc-text-parser.js +9 -40
  25. package/dist/services/rfc-text-parser.js.map +1 -1
  26. package/dist/services/rfcxml-parser.d.ts +5 -18
  27. package/dist/services/rfcxml-parser.d.ts.map +1 -1
  28. package/dist/services/rfcxml-parser.js +21 -95
  29. package/dist/services/rfcxml-parser.js.map +1 -1
  30. package/dist/tools/definitions.d.ts +1 -1
  31. package/dist/tools/definitions.js +27 -27
  32. package/dist/tools/definitions.js.map +1 -1
  33. package/dist/tools/handlers.d.ts +48 -21
  34. package/dist/tools/handlers.d.ts.map +1 -1
  35. package/dist/tools/handlers.js +72 -156
  36. package/dist/tools/handlers.js.map +1 -1
  37. package/dist/types/index.d.ts +17 -0
  38. package/dist/types/index.d.ts.map +1 -1
  39. package/dist/utils/requirement-extractor.d.ts +24 -0
  40. package/dist/utils/requirement-extractor.d.ts.map +1 -0
  41. package/dist/utils/requirement-extractor.js +100 -0
  42. package/dist/utils/requirement-extractor.js.map +1 -0
  43. package/dist/utils/section.d.ts +21 -0
  44. package/dist/utils/section.d.ts.map +1 -0
  45. package/dist/utils/section.js +53 -0
  46. package/dist/utils/section.js.map +1 -0
  47. package/dist/utils/text.d.ts.map +1 -1
  48. package/dist/utils/text.js +3 -2
  49. package/dist/utils/text.js.map +1 -1
  50. package/dist/utils/validation.d.ts +14 -0
  51. package/dist/utils/validation.d.ts.map +1 -0
  52. package/dist/utils/validation.js +30 -0
  53. package/dist/utils/validation.js.map +1 -0
  54. package/package.json +1 -1
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
3
  * RFCXML MCP Server
4
- * RFC 文書を構造的に理解するための MCP サーバー
4
+ * MCP server for structural understanding of RFC documents
5
5
  */
6
6
  export {};
7
7
  //# sourceMappingURL=index.d.ts.map
package/dist/index.js CHANGED
@@ -1,28 +1,29 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
3
  * RFCXML MCP Server
4
- * RFC 文書を構造的に理解するための MCP サーバー
4
+ * MCP server for structural understanding of RFC documents
5
5
  */
6
6
  import { Server } from '@modelcontextprotocol/sdk/server/index.js';
7
7
  import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
8
8
  import { CallToolRequestSchema, ListToolsRequestSchema, ListResourcesRequestSchema, ReadResourceRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
9
9
  import { tools } from './tools/definitions.js';
10
10
  import { toolHandlers } from './tools/handlers.js';
11
- // サーバーインスタンス
11
+ import { PACKAGE_INFO } from './config.js';
12
+ // Server instance
12
13
  const server = new Server({
13
- name: 'rfcxml-mcp',
14
- version: '0.1.0',
14
+ name: PACKAGE_INFO.name,
15
+ version: PACKAGE_INFO.version,
15
16
  }, {
16
17
  capabilities: {
17
18
  tools: {},
18
19
  resources: {},
19
20
  },
20
21
  });
21
- // ツール一覧
22
+ // List tools
22
23
  server.setRequestHandler(ListToolsRequestSchema, async () => {
23
24
  return { tools };
24
25
  });
25
- // ツール実行
26
+ // Execute tool
26
27
  server.setRequestHandler(CallToolRequestSchema, async (request) => {
27
28
  const { name, arguments: args } = request.params;
28
29
  try {
@@ -43,20 +44,20 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
43
44
  };
44
45
  }
45
46
  });
46
- // リソース一覧(RFC スキーマ)
47
+ // List resources (RFC schema)
47
48
  server.setRequestHandler(ListResourcesRequestSchema, async () => {
48
49
  return {
49
50
  resources: [
50
51
  {
51
52
  uri: 'rfcxml://schema',
52
53
  name: 'RFCXML Schema Information',
53
- description: 'RFCXML v3 の構造とスキーマ情報',
54
+ description: 'RFCXML v3 structure and schema information',
54
55
  mimeType: 'application/json',
55
56
  },
56
57
  ],
57
58
  };
58
59
  });
59
- // リソース読み取り
60
+ // Read resource
60
61
  server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
61
62
  const { uri } = request.params;
62
63
  if (uri === 'rfcxml://schema') {
@@ -70,13 +71,13 @@ server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
70
71
  spec: 'RFC 7991 (superseded by rfc7991bis)',
71
72
  documentation: 'https://authors.ietf.org/rfcxml-vocabulary',
72
73
  keyElements: {
73
- bcp14: 'RFC 2119 キーワード(MUST, SHOULD, MAY 等)をマークアップ',
74
- xref: '内部・外部参照',
75
- reference: '参考文献',
76
- section: 'セクション構造',
77
- t: 'テキストパラグラフ',
78
- dl: '定義リスト',
79
- sourcecode: 'ソースコード',
74
+ bcp14: 'Markup for RFC 2119 keywords (MUST, SHOULD, MAY, etc.)',
75
+ xref: 'Internal and external references',
76
+ reference: 'Bibliography references',
77
+ section: 'Section structure',
78
+ t: 'Text paragraph',
79
+ dl: 'Definition list',
80
+ sourcecode: 'Source code',
80
81
  },
81
82
  }, null, 2),
82
83
  },
@@ -85,7 +86,7 @@ server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
85
86
  }
86
87
  throw new Error(`Unknown resource: ${uri}`);
87
88
  });
88
- // サーバー起動
89
+ // Start server
89
90
  async function main() {
90
91
  const transport = new StdioServerTransport();
91
92
  await server.connect(transport);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * チェックリスト生成サービス
3
+ * RFC要件からMarkdownチェックリストを生成
4
+ */
5
+ import type { Requirement, ImplementationChecklist } from '../types/index.js';
6
+ /**
7
+ * 要件をレベル別に分類
8
+ */
9
+ export interface ClassifiedRequirements {
10
+ must: Requirement[];
11
+ should: Requirement[];
12
+ may: Requirement[];
13
+ }
14
+ /**
15
+ * 要件をMUST/SHOULD/MAYに分類
16
+ */
17
+ export declare function classifyRequirements(requirements: Requirement[]): ClassifiedRequirements;
18
+ /**
19
+ * ロールでフィルタリング
20
+ */
21
+ export declare function filterByRole(requirements: Requirement[], role?: 'client' | 'server' | 'both'): Requirement[];
22
+ /**
23
+ * チェックリストを生成
24
+ */
25
+ export declare function generateChecklist(rfcNumber: number, title: string, requirements: Requirement[], role?: 'client' | 'server' | 'both'): ImplementationChecklist;
26
+ /**
27
+ * チェックリストをMarkdown形式で出力
28
+ */
29
+ export declare function generateChecklistMarkdown(checklist: ImplementationChecklist): string;
30
+ /**
31
+ * チェックリスト統計
32
+ */
33
+ export interface ChecklistStats {
34
+ must: number;
35
+ should: number;
36
+ may: number;
37
+ total: number;
38
+ }
39
+ /**
40
+ * チェックリストの統計情報を取得
41
+ */
42
+ export declare function getChecklistStats(checklist: ImplementationChecklist): ChecklistStats;
43
+ //# sourceMappingURL=checklist-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checklist-generator.d.ts","sourceRoot":"","sources":["../../src/services/checklist-generator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,uBAAuB,EAAiB,MAAM,mBAAmB,CAAC;AAE7F;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,WAAW,EAAE,CAAC;IACpB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,GAAG,EAAE,WAAW,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,WAAW,EAAE,GAAG,sBAAsB,CAUxF;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,YAAY,EAAE,WAAW,EAAE,EAC3B,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAClC,WAAW,EAAE,CAYf;AAaD;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,WAAW,EAAE,EAC3B,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAClC,uBAAuB,CAazB;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,uBAAuB,GAAG,MAAM,CA0CpF;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,uBAAuB,GAAG,cAAc,CAOpF"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * チェックリスト生成サービス
3
+ * RFC要件からMarkdownチェックリストを生成
4
+ */
5
+ /**
6
+ * 要件をMUST/SHOULD/MAYに分類
7
+ */
8
+ export function classifyRequirements(requirements) {
9
+ const must = requirements.filter((r) => ['MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL NOT'].includes(r.level));
10
+ const should = requirements.filter((r) => ['SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED'].includes(r.level));
11
+ const may = requirements.filter((r) => ['MAY', 'OPTIONAL'].includes(r.level));
12
+ return { must, should, may };
13
+ }
14
+ /**
15
+ * ロールでフィルタリング
16
+ */
17
+ export function filterByRole(requirements, role) {
18
+ if (!role || role === 'both') {
19
+ return requirements;
20
+ }
21
+ return requirements.filter((r) => {
22
+ const subject = r.subject?.toLowerCase() || '';
23
+ if (role === 'client') {
24
+ return subject.includes('client') || !subject.includes('server');
25
+ }
26
+ return subject.includes('server') || !subject.includes('client');
27
+ });
28
+ }
29
+ /**
30
+ * チェックリストアイテムを作成
31
+ */
32
+ function createChecklistItems(requirements) {
33
+ return requirements.map((r) => ({
34
+ id: r.id,
35
+ requirement: r,
36
+ checked: false,
37
+ }));
38
+ }
39
+ /**
40
+ * チェックリストを生成
41
+ */
42
+ export function generateChecklist(rfcNumber, title, requirements, role) {
43
+ const filtered = filterByRole(requirements, role);
44
+ const classified = classifyRequirements(filtered);
45
+ return {
46
+ rfc: rfcNumber,
47
+ title,
48
+ role,
49
+ must: createChecklistItems(classified.must),
50
+ should: createChecklistItems(classified.should),
51
+ may: createChecklistItems(classified.may),
52
+ generatedAt: new Date().toISOString(),
53
+ };
54
+ }
55
+ /**
56
+ * チェックリストをMarkdown形式で出力
57
+ */
58
+ export function generateChecklistMarkdown(checklist) {
59
+ const lines = [];
60
+ lines.push(`# RFC ${checklist.rfc} Implementation Checklist`);
61
+ lines.push('');
62
+ lines.push(`**${checklist.title}**`);
63
+ lines.push('');
64
+ if (checklist.role && checklist.role !== 'both') {
65
+ lines.push(`Role: ${checklist.role}`);
66
+ lines.push('');
67
+ }
68
+ lines.push(`Generated: ${checklist.generatedAt}`);
69
+ lines.push('');
70
+ if (checklist.must.length > 0) {
71
+ lines.push('## Mandatory Requirements (MUST / REQUIRED / SHALL)');
72
+ lines.push('');
73
+ for (const item of checklist.must) {
74
+ lines.push(`- [ ] ${item.requirement.text} (${item.requirement.section})`);
75
+ }
76
+ lines.push('');
77
+ }
78
+ if (checklist.should.length > 0) {
79
+ lines.push('## Recommended Requirements (SHOULD / RECOMMENDED)');
80
+ lines.push('');
81
+ for (const item of checklist.should) {
82
+ lines.push(`- [ ] ${item.requirement.text} (${item.requirement.section})`);
83
+ }
84
+ lines.push('');
85
+ }
86
+ if (checklist.may.length > 0) {
87
+ lines.push('## Optional Requirements (MAY / OPTIONAL)');
88
+ lines.push('');
89
+ for (const item of checklist.may) {
90
+ lines.push(`- [ ] ${item.requirement.text} (${item.requirement.section})`);
91
+ }
92
+ lines.push('');
93
+ }
94
+ return lines.join('\n');
95
+ }
96
+ /**
97
+ * チェックリストの統計情報を取得
98
+ */
99
+ export function getChecklistStats(checklist) {
100
+ return {
101
+ must: checklist.must.length,
102
+ should: checklist.should.length,
103
+ may: checklist.may.length,
104
+ total: checklist.must.length + checklist.should.length + checklist.may.length,
105
+ };
106
+ }
107
+ //# sourceMappingURL=checklist-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checklist-generator.js","sourceRoot":"","sources":["../../src/services/checklist-generator.ts"],"names":[],"mappings":"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"}
@@ -1,29 +1,29 @@
1
1
  /**
2
- * RFC 取得サービス
3
- * RFCXML ソースの取得とキャッシュ管理
2
+ * RFC Fetcher Service
3
+ * RFCXML source fetching and cache management
4
4
  */
5
5
  import type { RFCMetadata } from '../types/index.js';
6
6
  /**
7
- * RFCXML を取得(並列フェッチ)
8
- * 複数ソースに同時リクエストし、最初に成功したものを返す
7
+ * Fetch RFCXML (parallel fetch)
8
+ * Sends concurrent requests to multiple sources and returns the first successful response
9
9
  */
10
10
  export declare function fetchRFCXML(rfcNumber: number): Promise<string>;
11
11
  /**
12
- * RFC メタデータを取得(IETF Datatracker API
12
+ * Fetch RFC metadata (IETF Datatracker API)
13
13
  */
14
14
  export declare function fetchRFCMetadata(rfcNumber: number): Promise<RFCMetadata>;
15
15
  /**
16
- * RFC テキストを取得(並列フェッチ)
17
- * 複数ソースに同時リクエストし、最初に成功したものを返す
16
+ * Fetch RFC text (parallel fetch)
17
+ * Sends concurrent requests to multiple sources and returns the first successful response
18
18
  */
19
19
  export declare function fetchRFCText(rfcNumber: number): Promise<string>;
20
20
  /**
21
- * RFC XML 形式で利用可能か確認
22
- * 注: RFC 8650 (2019年12月) 以降は公式に RFCXML v3
21
+ * Check if RFC is available in XML format
22
+ * Note: RFC 8650 (December 2019) and later use official RFCXML v3
23
23
  */
24
24
  export declare function isRFCXMLAvailable(rfcNumber: number): boolean;
25
25
  /**
26
- * RFC XML 取得エラー
26
+ * RFC XML fetch error
27
27
  */
28
28
  export declare class RFCXMLNotAvailableError extends Error {
29
29
  readonly rfcNumber: number;
@@ -32,7 +32,7 @@ export declare class RFCXMLNotAvailableError extends Error {
32
32
  constructor(rfcNumber: number, originalErrors?: string[]);
33
33
  }
34
34
  /**
35
- * キャッシュクリア
35
+ * Clear all caches
36
36
  */
37
37
  export declare function clearCache(): void;
38
38
  //# sourceMappingURL=rfc-fetcher.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"rfc-fetcher.d.ts","sourceRoot":"","sources":["../../src/services/rfc-fetcher.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAiBrD;;;GAGG;AACH,wBAAsB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA6BpE;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAoD9E;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA8BrE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAE5D;AAED;;GAEG;AACH,qBAAa,uBAAwB,SAAQ,KAAK;IAChD,SAAgB,SAAS,EAAE,MAAM,CAAC;IAClC,SAAgB,QAAQ,EAAE,OAAO,CAAC;IAClC,SAAgB,UAAU,EAAE,MAAM,CAAC;gBAEvB,SAAS,EAAE,MAAM,EAAE,cAAc,GAAE,MAAM,EAAO;CAoB7D;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,IAAI,CAIjC"}
1
+ {"version":3,"file":"rfc-fetcher.d.ts","sourceRoot":"","sources":["../../src/services/rfc-fetcher.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAiBrD;;;GAGG;AACH,wBAAsB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA6BpE;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAyD9E;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA8BrE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAE5D;AAED;;GAEG;AACH,qBAAa,uBAAwB,SAAQ,KAAK;IAChD,SAAgB,SAAS,EAAE,MAAM,CAAC;IAClC,SAAgB,QAAQ,EAAE,OAAO,CAAC;IAClC,SAAgB,UAAU,EAAE,MAAM,CAAC;gBAEvB,SAAS,EAAE,MAAM,EAAE,cAAc,GAAE,MAAM,EAAO;CAoB7D;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,IAAI,CAIjC"}
@@ -1,31 +1,31 @@
1
1
  /**
2
- * RFC 取得サービス
3
- * RFCXML ソースの取得とキャッシュ管理
2
+ * RFC Fetcher Service
3
+ * RFCXML source fetching and cache management
4
4
  */
5
5
  import { LRUCache } from '../utils/cache.js';
6
6
  import { fetchFromMultipleSources } from '../utils/fetch.js';
7
7
  import { CACHE_CONFIG, RFC_XML_SOURCES, RFC_TEXT_SOURCES, DATATRACKER_API, HTTP_CONFIG, RFC_CONFIG, } from '../config.js';
8
- // LRU キャッシュ(設定は config.ts から)
8
+ // LRU caches (configuration from config.ts)
9
9
  const xmlCache = new LRUCache(CACHE_CONFIG.xml);
10
10
  const textCache = new LRUCache(CACHE_CONFIG.text);
11
11
  const metadataCache = new LRUCache(CACHE_CONFIG.metadata);
12
12
  /**
13
- * RFCXML を取得(並列フェッチ)
14
- * 複数ソースに同時リクエストし、最初に成功したものを返す
13
+ * Fetch RFCXML (parallel fetch)
14
+ * Sends concurrent requests to multiple sources and returns the first successful response
15
15
  */
16
16
  export async function fetchRFCXML(rfcNumber) {
17
- // キャッシュチェック
17
+ // Check cache
18
18
  const cached = xmlCache.get(rfcNumber);
19
19
  if (cached) {
20
20
  return cached;
21
21
  }
22
- // ソースリストを作成
22
+ // Build source list
23
23
  const sources = Object.entries(RFC_XML_SOURCES).map(([name, urlFn]) => ({
24
24
  name,
25
25
  url: urlFn(rfcNumber),
26
26
  }));
27
27
  try {
28
- // 並列フェッチ(最初に成功したものを返す)
28
+ // Parallel fetch (returns first successful response)
29
29
  const { text: xml, source } = await fetchFromMultipleSources(sources, {
30
30
  headers: { Accept: 'application/xml, text/xml' },
31
31
  validate: (text) => text.includes('<?xml') || text.includes('<rfc'),
@@ -35,28 +35,31 @@ export async function fetchRFCXML(rfcNumber) {
35
35
  return xml;
36
36
  }
37
37
  catch (error) {
38
- // すべて失敗した場合
38
+ // All sources failed
39
39
  throw new RFCXMLNotAvailableError(rfcNumber, [
40
40
  error instanceof Error ? error.message : String(error),
41
41
  ]);
42
42
  }
43
43
  }
44
44
  /**
45
- * RFC メタデータを取得(IETF Datatracker API
45
+ * Fetch RFC metadata (IETF Datatracker API)
46
46
  */
47
47
  export async function fetchRFCMetadata(rfcNumber) {
48
- // キャッシュチェック
48
+ // Check cache
49
49
  const cached = metadataCache.get(rfcNumber);
50
50
  if (cached) {
51
51
  return cached;
52
52
  }
53
53
  const url = DATATRACKER_API.document(rfcNumber);
54
+ const controller = new AbortController();
55
+ const timeoutId = setTimeout(() => controller.abort(), HTTP_CONFIG.timeout);
54
56
  try {
55
57
  const response = await fetch(url, {
56
58
  headers: {
57
59
  Accept: 'application/json',
58
60
  'User-Agent': HTTP_CONFIG.userAgent,
59
61
  },
62
+ signal: controller.signal,
60
63
  });
61
64
  if (!response.ok) {
62
65
  throw new Error(`HTTP ${response.status}`);
@@ -65,7 +68,7 @@ export async function fetchRFCMetadata(rfcNumber) {
65
68
  const metadata = {
66
69
  number: rfcNumber,
67
70
  title: data.title || `RFC ${rfcNumber}`,
68
- authors: [], // TODO: API から取得
71
+ authors: [], // TODO: Fetch from separate API
69
72
  date: data.time || '',
70
73
  category: mapCategory(data.std_level ?? null),
71
74
  stream: mapStream(data.stream ?? null),
@@ -75,7 +78,7 @@ export async function fetchRFCMetadata(rfcNumber) {
75
78
  return metadata;
76
79
  }
77
80
  catch (_error) {
78
- // フォールバック: 最小限のメタデータ
81
+ // Fallback: minimal metadata
79
82
  return {
80
83
  number: rfcNumber,
81
84
  title: `RFC ${rfcNumber}`,
@@ -85,24 +88,27 @@ export async function fetchRFCMetadata(rfcNumber) {
85
88
  stream: 'IETF',
86
89
  };
87
90
  }
91
+ finally {
92
+ clearTimeout(timeoutId);
93
+ }
88
94
  }
89
95
  /**
90
- * RFC テキストを取得(並列フェッチ)
91
- * 複数ソースに同時リクエストし、最初に成功したものを返す
96
+ * Fetch RFC text (parallel fetch)
97
+ * Sends concurrent requests to multiple sources and returns the first successful response
92
98
  */
93
99
  export async function fetchRFCText(rfcNumber) {
94
- // キャッシュチェック
100
+ // Check cache
95
101
  const cached = textCache.get(rfcNumber);
96
102
  if (cached) {
97
103
  return cached;
98
104
  }
99
- // ソースリストを作成
105
+ // Build source list
100
106
  const sources = Object.entries(RFC_TEXT_SOURCES).map(([name, urlFn]) => ({
101
107
  name,
102
108
  url: urlFn(rfcNumber),
103
109
  }));
104
110
  try {
105
- // 並列フェッチ(最初に成功したものを返す)
111
+ // Parallel fetch (returns first successful response)
106
112
  const { text, source } = await fetchFromMultipleSources(sources, {
107
113
  headers: { Accept: 'text/plain' },
108
114
  validate: (t) => t.includes('Request for Comments') || t.includes('RFC '),
@@ -112,20 +118,20 @@ export async function fetchRFCText(rfcNumber) {
112
118
  return text;
113
119
  }
114
120
  catch (error) {
115
- // すべて失敗
121
+ // All sources failed
116
122
  throw new Error(`Failed to fetch RFC ${rfcNumber} text from all sources. ` +
117
123
  `Error: ${error instanceof Error ? error.message : String(error)}`);
118
124
  }
119
125
  }
120
126
  /**
121
- * RFC XML 形式で利用可能か確認
122
- * 注: RFC 8650 (2019年12月) 以降は公式に RFCXML v3
127
+ * Check if RFC is available in XML format
128
+ * Note: RFC 8650 (December 2019) and later use official RFCXML v3
123
129
  */
124
130
  export function isRFCXMLAvailable(rfcNumber) {
125
131
  return rfcNumber >= RFC_CONFIG.xmlAvailableFrom;
126
132
  }
127
133
  /**
128
- * RFC XML 取得エラー
134
+ * RFC XML fetch error
129
135
  */
130
136
  export class RFCXMLNotAvailableError extends Error {
131
137
  rfcNumber;
@@ -135,13 +141,13 @@ export class RFCXMLNotAvailableError extends Error {
135
141
  const threshold = RFC_CONFIG.xmlAvailableFrom;
136
142
  const isOldRFC = rfcNumber < threshold;
137
143
  const suggestion = isOldRFC
138
- ? `RFC ${rfcNumber} RFCXML v3 より前の形式で公開されているため、XML が利用できない可能性があります。` +
139
- `テキスト形式での取得を検討してください(ietf MCP get_ietf_doc を使用)。`
140
- : `RFC ${rfcNumber} XML 取得に失敗しました。ネットワーク接続を確認してください。`;
141
- super(`RFC ${rfcNumber} XML を取得できませんでした。\n` +
142
- `理由: ${isOldRFC ? `古い RFC (< ${threshold}) のため XML が利用できない可能性があります` : 'ネットワークエラー'}\n` +
143
- `提案: ${suggestion}` +
144
- (originalErrors.length > 0 ? `\n詳細: ${originalErrors.join(', ')}` : ''));
144
+ ? `RFC ${rfcNumber} was published before RFCXML v3 format, XML may not be available. ` +
145
+ `Consider using text format (use ietf MCP get_ietf_doc).`
146
+ : `Failed to fetch RFC ${rfcNumber} XML. Check network connection.`;
147
+ super(`Could not fetch RFC ${rfcNumber} XML.\n` +
148
+ `Reason: ${isOldRFC ? `Old RFC (< ${threshold}), XML may not be available` : 'Network error'}\n` +
149
+ `Suggestion: ${suggestion}` +
150
+ (originalErrors.length > 0 ? `\nDetails: ${originalErrors.join(', ')}` : ''));
145
151
  this.name = 'RFCXMLNotAvailableError';
146
152
  this.rfcNumber = rfcNumber;
147
153
  this.isOldRFC = isOldRFC;
@@ -149,14 +155,14 @@ export class RFCXMLNotAvailableError extends Error {
149
155
  }
150
156
  }
151
157
  /**
152
- * キャッシュクリア
158
+ * Clear all caches
153
159
  */
154
160
  export function clearCache() {
155
161
  xmlCache.clear();
156
162
  textCache.clear();
157
163
  metadataCache.clear();
158
164
  }
159
- // ヘルパー関数
165
+ // Helper functions
160
166
  function mapCategory(stdLevel) {
161
167
  switch (stdLevel?.toLowerCase()) {
162
168
  case 'proposed standard':
@@ -1 +1 @@
1
- {"version":3,"file":"rfc-fetcher.js","sourceRoot":"","sources":["../../src/services/rfc-fetcher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rfc-fetcher.js","sourceRoot":"","sources":["../../src/services/rfc-fetcher.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EACL,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,WAAW,EACX,UAAU,GACX,MAAM,cAAc,CAAC;AAEtB,4CAA4C;AAC5C,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAiB,YAAY,CAAC,GAAG,CAAC,CAAC;AAChE,MAAM,SAAS,GAAG,IAAI,QAAQ,CAAiB,YAAY,CAAC,IAAI,CAAC,CAAC;AAClE,MAAM,aAAa,GAAG,IAAI,QAAQ,CAAsB,YAAY,CAAC,QAAQ,CAAC,CAAC;AAE/E;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,SAAiB;IACjD,cAAc;IACd,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACvC,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,oBAAoB;IACpB,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;QACtE,IAAI;QACJ,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC;KACtB,CAAC,CAAC,CAAC;IAEJ,IAAI,CAAC;QACH,qDAAqD;QACrD,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,wBAAwB,CAAC,OAAO,EAAE;YACpE,OAAO,EAAE,EAAE,MAAM,EAAE,2BAA2B,EAAE;YAChD,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;SACpE,CAAC,CAAC;QAEH,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QAC7B,OAAO,CAAC,KAAK,CAAC,QAAQ,SAAS,kBAAkB,MAAM,EAAE,CAAC,CAAC;QAC3D,OAAO,GAAG,CAAC;IACb,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,qBAAqB;QACrB,MAAM,IAAI,uBAAuB,CAAC,SAAS,EAAE;YAC3C,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SACvD,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,SAAiB;IACtD,cAAc;IACd,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC5C,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,GAAG,GAAG,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAChD,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAE5E,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,OAAO,EAAE;gBACP,MAAM,EAAE,kBAAkB;gBAC1B,YAAY,EAAE,WAAW,CAAC,SAAS;aACpC;YACD,MAAM,EAAE,UAAU,CAAC,MAAM;SAC1B,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,QAAQ,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAC7C,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAMlC,CAAC;QAEF,MAAM,QAAQ,GAAgB;YAC5B,MAAM,EAAE,SAAS;YACjB,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,OAAO,SAAS,EAAE;YACvC,OAAO,EAAE,EAAE,EAAE,gCAAgC;YAC7C,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE;YACrB,QAAQ,EAAE,WAAW,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC;YAC7C,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC;YACtC,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,SAAS;SACrC,CAAC;QAEF,aAAa,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QACvC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAAC,OAAO,MAAM,EAAE,CAAC;QAChB,6BAA6B;QAC7B,OAAO;YACL,MAAM,EAAE,SAAS;YACjB,KAAK,EAAE,OAAO,SAAS,EAAE;YACzB,OAAO,EAAE,EAAE;YACX,IAAI,EAAE,EAAE;YACR,QAAQ,EAAE,MAAM;YAChB,MAAM,EAAE,MAAM;SACf,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,SAAS,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,SAAiB;IAClD,cAAc;IACd,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACxC,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,oBAAoB;IACpB,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;QACvE,IAAI;QACJ,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC;KACtB,CAAC,CAAC,CAAC;IAEJ,IAAI,CAAC;QACH,qDAAqD;QACrD,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,wBAAwB,CAAC,OAAO,EAAE;YAC/D,OAAO,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE;YACjC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;SAC1E,CAAC,CAAC;QAEH,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,QAAQ,SAAS,uBAAuB,MAAM,EAAE,CAAC,CAAC;QAChE,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,qBAAqB;QACrB,MAAM,IAAI,KAAK,CACb,uBAAuB,SAAS,0BAA0B;YACxD,UAAU,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACrE,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,SAAiB;IACjD,OAAO,SAAS,IAAI,UAAU,CAAC,gBAAgB,CAAC;AAClD,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IAChC,SAAS,CAAS;IAClB,QAAQ,CAAU;IAClB,UAAU,CAAS;IAEnC,YAAY,SAAiB,EAAE,iBAA2B,EAAE;QAC1D,MAAM,SAAS,GAAG,UAAU,CAAC,gBAAgB,CAAC;QAC9C,MAAM,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;QACvC,MAAM,UAAU,GAAG,QAAQ;YACzB,CAAC,CAAC,OAAO,SAAS,oEAAoE;gBACpF,yDAAyD;YAC3D,CAAC,CAAC,uBAAuB,SAAS,iCAAiC,CAAC;QAEtE,KAAK,CACH,uBAAuB,SAAS,SAAS;YACvC,WAAW,QAAQ,CAAC,CAAC,CAAC,cAAc,SAAS,6BAA6B,CAAC,CAAC,CAAC,eAAe,IAAI;YAChG,eAAe,UAAU,EAAE;YAC3B,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAC/E,CAAC;QAEF,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;QACtC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,UAAU;IACxB,QAAQ,CAAC,KAAK,EAAE,CAAC;IACjB,SAAS,CAAC,KAAK,EAAE,CAAC;IAClB,aAAa,CAAC,KAAK,EAAE,CAAC;AACxB,CAAC;AAED,mBAAmB;AAEnB,SAAS,WAAW,CAAC,QAAuB;IAC1C,QAAQ,QAAQ,EAAE,WAAW,EAAE,EAAE,CAAC;QAChC,KAAK,mBAAmB,CAAC;QACzB,KAAK,gBAAgB,CAAC;QACtB,KAAK,mBAAmB;YACtB,OAAO,KAAK,CAAC;QACf,KAAK,uBAAuB;YAC1B,OAAO,KAAK,CAAC;QACf,KAAK,cAAc;YACjB,OAAO,KAAK,CAAC;QACf,KAAK,UAAU;YACb,OAAO,UAAU,CAAC;QACpB;YACE,OAAO,MAAM,CAAC;IAClB,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,MAAqB;IACtC,QAAQ,MAAM,EAAE,WAAW,EAAE,EAAE,CAAC;QAC9B,KAAK,MAAM;YACT,OAAO,MAAM,CAAC;QAChB,KAAK,KAAK;YACR,OAAO,KAAK,CAAC;QACf,KAAK,MAAM;YACT,OAAO,MAAM,CAAC;QAChB,KAAK,KAAK;YACR,OAAO,aAAa,CAAC;QACvB;YACE,OAAO,MAAM,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -2,17 +2,15 @@
2
2
  * RFC テキストパーサー
3
3
  * XMLが利用できない古いRFC用のフォールバック解析
4
4
  */
5
- import type { Section, Requirement, RequirementLevel } from '../types/index.js';
6
- import type { ParsedRFC } from './rfcxml-parser.js';
5
+ import type { Section, Requirement, ParsedRFC } from '../types/index.js';
6
+ import { type RequirementFilter } from '../utils/requirement-extractor.js';
7
7
  /**
8
8
  * RFC テキストをパースして構造化データに変換(中精度)
9
9
  */
10
10
  export declare function parseRFCText(text: string, rfcNumber: number): ParsedRFC;
11
11
  /**
12
12
  * テキストから要件を抽出
13
+ * 共通ユーティリティのラッパー(テキストパース時はparseComponentsをオフ)
13
14
  */
14
- export declare function extractTextRequirements(sections: Section[], filter?: {
15
- section?: string;
16
- level?: RequirementLevel;
17
- }): Requirement[];
15
+ export declare function extractTextRequirements(sections: Section[], filter?: RequirementFilter): Requirement[];
18
16
  //# sourceMappingURL=rfc-text-parser.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"rfc-text-parser.d.ts","sourceRoot":"","sources":["../../src/services/rfc-text-parser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,OAAO,EACP,WAAW,EACX,gBAAgB,EAIjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAIpD;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,CAYvE;AA4KD;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,OAAO,EAAE,EACnB,MAAM,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,gBAAgB,CAAA;CAAE,GACtD,WAAW,EAAE,CA0Cf"}
1
+ {"version":3,"file":"rfc-text-parser.d.ts","sourceRoot":"","sources":["../../src/services/rfc-text-parser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,OAAO,EACP,WAAW,EAIX,SAAS,EAEV,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,mCAAmC,CAAC;AAE3C;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,CAYvE;AA2KD;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,OAAO,EAAE,EACnB,MAAM,CAAC,EAAE,iBAAiB,GACzB,WAAW,EAAE,CAEf"}