@shuji-bonji/rfcxml-mcp 0.4.0 → 0.4.2

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 (36) hide show
  1. package/README.ja.md +29 -27
  2. package/README.md +37 -29
  3. package/dist/constants.d.ts +19 -0
  4. package/dist/constants.d.ts.map +1 -1
  5. package/dist/constants.js +34 -0
  6. package/dist/constants.js.map +1 -1
  7. package/dist/services/checklist-generator.d.ts +43 -0
  8. package/dist/services/checklist-generator.d.ts.map +1 -0
  9. package/dist/services/checklist-generator.js +107 -0
  10. package/dist/services/checklist-generator.js.map +1 -0
  11. package/dist/services/rfc-text-parser.d.ts +4 -6
  12. package/dist/services/rfc-text-parser.d.ts.map +1 -1
  13. package/dist/services/rfc-text-parser.js +8 -40
  14. package/dist/services/rfc-text-parser.js.map +1 -1
  15. package/dist/services/rfcxml-parser.d.ts +5 -19
  16. package/dist/services/rfcxml-parser.d.ts.map +1 -1
  17. package/dist/services/rfcxml-parser.js +18 -93
  18. package/dist/services/rfcxml-parser.js.map +1 -1
  19. package/dist/tools/handlers.d.ts +1 -6
  20. package/dist/tools/handlers.d.ts.map +1 -1
  21. package/dist/tools/handlers.js +9 -108
  22. package/dist/tools/handlers.js.map +1 -1
  23. package/dist/types/index.d.ts +17 -0
  24. package/dist/types/index.d.ts.map +1 -1
  25. package/dist/utils/requirement-extractor.d.ts +24 -0
  26. package/dist/utils/requirement-extractor.d.ts.map +1 -0
  27. package/dist/utils/requirement-extractor.js +100 -0
  28. package/dist/utils/requirement-extractor.js.map +1 -0
  29. package/dist/utils/section.d.ts +21 -0
  30. package/dist/utils/section.d.ts.map +1 -0
  31. package/dist/utils/section.js +53 -0
  32. package/dist/utils/section.js.map +1 -0
  33. package/dist/utils/text.d.ts.map +1 -1
  34. package/dist/utils/text.js +3 -2
  35. package/dist/utils/text.js.map +1 -1
  36. package/package.json +1 -1
package/README.ja.md CHANGED
@@ -29,15 +29,15 @@ RFC 文書を **構造的に理解** するための MCP サーバー。
29
29
 
30
30
  ## 既存 MCP との違い
31
31
 
32
- | 機能 | 既存 mcp-rfc | RFCXML MCP |
33
- |------|-------------|------------|
34
- | RFC テキスト取得 | ✅ | ✅ |
35
- | セクション抽出 | ✅ (テキストベース) | ✅ (構造ベース) |
36
- | MUST/SHOULD/MAY 抽出 | ❌ | ✅ |
37
- | 条件・例外の構造化 | ❌ | ✅ |
38
- | RFC 間依存グラフ | ❌ | ✅ |
39
- | 定義スコープ管理 | ❌ | ✅ |
40
- | 実装チェックリスト | ❌ | ✅ |
32
+ | 機能 | 既存 mcp-rfc | RFCXML MCP |
33
+ | -------------------- | ------------------- | --------------- |
34
+ | RFC テキスト取得 | ✅ | ✅ |
35
+ | セクション抽出 | ✅ (テキストベース) | ✅ (構造ベース) |
36
+ | MUST/SHOULD/MAY 抽出 | ❌ | ✅ |
37
+ | 条件・例外の構造化 | ❌ | ✅ |
38
+ | RFC 間依存グラフ | ❌ | ✅ |
39
+ | 定義スコープ管理 | ❌ | ✅ |
40
+ | 実装チェックリスト | ❌ | ✅ |
41
41
 
42
42
  ## クイックスタート
43
43
 
@@ -57,6 +57,7 @@ MCP 設定ファイルに以下を追加:
57
57
  ```
58
58
 
59
59
  設定ファイルの場所:
60
+
60
61
  - **Claude Desktop (macOS)**: `~/Library/Application Support/Claude/claude_desktop_config.json`
61
62
  - **Claude Desktop (Windows)**: `%APPDATA%\Claude\claude_desktop_config.json`
62
63
  - **Claude Code**: `.claude/settings.json` または `claude settings` コマンド
@@ -117,16 +118,16 @@ RFC 8650 (2019年12月) 以降は公式 RFCXML v3 形式で提供されていま
117
118
 
118
119
  > **Note**: v0.4.0 以降、すべてのメッセージは英語で出力されます(国際化対応)。
119
120
 
120
- | `_source` | 説明 |
121
- |-----------|------|
122
- | `xml` | RFCXML から解析(高精度) |
123
- | `text` | テキストから解析(中精度) |
121
+ | `_source` | 説明 |
122
+ | --------- | -------------------------- |
123
+ | `xml` | RFCXML から解析(高精度) |
124
+ | `text` | テキストから解析(中精度) |
124
125
 
125
126
  ### 対応状況
126
127
 
127
- | RFC | 形式 | 備考 |
128
- |-----|------|------|
129
- | RFC 8650 以降 | XML | RFCXML v3 公式対応 |
128
+ | RFC | 形式 | 備考 |
129
+ | ------------- | -------- | ------------------ |
130
+ | RFC 8650 以降 | XML | RFCXML v3 公式対応 |
130
131
  | RFC 8650 未満 | テキスト | 自動フォールバック |
131
132
 
132
133
  ## 出力サンプル
@@ -254,13 +255,14 @@ Role: client
254
255
 
255
256
  [examples/](./examples/) ディレクトリに `generate_checklist` ツールで生成したチェックリストのサンプルがあります:
256
257
 
257
- | RFC | プロトコル | ソース |
258
- |-----|----------|--------|
259
- | [RFC 6455](./examples/rfc6455-websocket-checklist.md) | WebSocket | テキスト(フォールバック) |
260
- | [RFC 9293](./examples/rfc9293-tcp-checklist.md) | TCP | RFCXML |
261
- | [RFC 7540](./examples/rfc7540-http2-checklist.md) | HTTP/2 | テキスト(フォールバック) |
258
+ | RFC | プロトコル | ソース |
259
+ | ----------------------------------------------------- | ---------- | -------------------------- |
260
+ | [RFC 6455](./examples/rfc6455-websocket-checklist.md) | WebSocket | テキスト(フォールバック) |
261
+ | [RFC 9293](./examples/rfc9293-tcp-checklist.md) | TCP | RFCXML |
262
+ | [RFC 7540](./examples/rfc7540-http2-checklist.md) | HTTP/2 | テキスト(フォールバック) |
262
263
 
263
264
  **Claude への依頼例:**
265
+
264
266
  ```
265
267
  RFC 9293 (TCP) の実装チェックリストを生成してください。
266
268
  ```
@@ -318,12 +320,12 @@ src/
318
320
 
319
321
  LRU(Least Recently Used)キャッシュでメモリ使用量を制限:
320
322
 
321
- | キャッシュ | 最大エントリ数 | 内容 |
322
- |-----------|---------------|------|
323
- | XML キャッシュ | 20 | 生の RFCXML |
324
- | Text キャッシュ | 20 | 生のテキスト |
325
- | Metadata キャッシュ | 100 | RFC メタデータ |
326
- | Parse キャッシュ | 50 | パース済み構造 |
323
+ | キャッシュ | 最大エントリ数 | 内容 |
324
+ | ------------------- | -------------- | -------------- |
325
+ | XML キャッシュ | 20 | 生の RFCXML |
326
+ | Text キャッシュ | 20 | 生のテキスト |
327
+ | Metadata キャッシュ | 100 | RFC メタデータ |
328
+ | Parse キャッシュ | 50 | パース済み構造 |
327
329
 
328
330
  ## 開発
329
331
 
package/README.md CHANGED
@@ -6,6 +6,8 @@
6
6
  [![Node.js](https://img.shields.io/badge/node-%3E%3D20.0.0-brightgreen.svg)](https://nodejs.org/)
7
7
  [![Claude Code](https://img.shields.io/badge/Claude%20Code-Compatible-blueviolet)](https://claude.ai/code)
8
8
 
9
+ [日本語版 README](README.ja.md)
10
+
9
11
  A Model Context Protocol (MCP) server for **structured understanding** of RFC documents.
10
12
 
11
13
  ## Purpose
@@ -33,15 +35,15 @@ Unlike existing text-based RFC MCP servers, this server leverages the semantic s
33
35
 
34
36
  ## Comparison with Existing MCPs
35
37
 
36
- | Feature | Existing mcp-rfc | RFCXML MCP |
37
- |---------|------------------|------------|
38
- | RFC text retrieval | ✅ | ✅ |
39
- | Section extraction | ✅ (text-based) | ✅ (structure-based) |
40
- | MUST/SHOULD/MAY extraction | ❌ | ✅ |
41
- | Condition/exception structuring | ❌ | ✅ |
42
- | RFC dependency graph | ❌ | ✅ |
43
- | Definition scope management | ❌ | ✅ |
44
- | Implementation checklist | ❌ | ✅ |
38
+ | Feature | Existing mcp-rfc | RFCXML MCP |
39
+ | ------------------------------- | ---------------- | -------------------- |
40
+ | RFC text retrieval | ✅ | ✅ |
41
+ | Section extraction | ✅ (text-based) | ✅ (structure-based) |
42
+ | MUST/SHOULD/MAY extraction | ❌ | ✅ |
43
+ | Condition/exception structuring | ❌ | ✅ |
44
+ | RFC dependency graph | ❌ | ✅ |
45
+ | Definition scope management | ❌ | ✅ |
46
+ | Implementation checklist | ❌ | ✅ |
45
47
 
46
48
  ## Quick Start
47
49
 
@@ -61,6 +63,7 @@ Add the following to your MCP configuration file:
61
63
  ```
62
64
 
63
65
  Configuration file locations:
66
+
64
67
  - **Claude Desktop (macOS)**: `~/Library/Application Support/Claude/claude_desktop_config.json`
65
68
  - **Claude Desktop (Windows)**: `%APPDATA%\Claude\claude_desktop_config.json`
66
69
  - **Claude Code**: `.claude/settings.json` or use `claude settings` command
@@ -119,17 +122,17 @@ All responses include source information:
119
122
  }
120
123
  ```
121
124
 
122
- | `_source` | Description |
123
- |-----------|-------------|
124
- | `xml` | Parsed from RFCXML (high accuracy) |
125
- | `text` | Parsed from text (medium accuracy) |
125
+ | `_source` | Description |
126
+ | --------- | ---------------------------------- |
127
+ | `xml` | Parsed from RFCXML (high accuracy) |
128
+ | `text` | Parsed from text (medium accuracy) |
126
129
 
127
130
  ### Compatibility
128
131
 
129
- | RFC | Format | Notes |
130
- |-----|--------|-------|
131
- | RFC 8650+ | XML | Official RFCXML v3 support |
132
- | Before RFC 8650 | Text | Automatic fallback |
132
+ | RFC | Format | Notes |
133
+ | --------------- | ------ | -------------------------- |
134
+ | RFC 8650+ | XML | Official RFCXML v3 support |
135
+ | Before RFC 8650 | Text | Automatic fallback |
133
136
 
134
137
  ## Output Samples
135
138
 
@@ -254,13 +257,14 @@ Role: Client
254
257
 
255
258
  See the [examples/](./examples/) directory for complete checklist samples:
256
259
 
257
- | RFC | Protocol | Source |
258
- |-----|----------|--------|
260
+ | RFC | Protocol | Source |
261
+ | ----------------------------------------------------- | --------- | --------------- |
259
262
  | [RFC 6455](./examples/rfc6455-websocket-checklist.md) | WebSocket | Text (fallback) |
260
- | [RFC 9293](./examples/rfc9293-tcp-checklist.md) | TCP | RFCXML |
261
- | [RFC 7540](./examples/rfc7540-http2-checklist.md) | HTTP/2 | Text (fallback) |
263
+ | [RFC 9293](./examples/rfc9293-tcp-checklist.md) | TCP | RFCXML |
264
+ | [RFC 7540](./examples/rfc7540-http2-checklist.md) | HTTP/2 | Text (fallback) |
262
265
 
263
266
  **Example prompt for Claude:**
267
+
264
268
  ```
265
269
  Generate an implementation checklist for RFC 9293 (TCP).
266
270
  ```
@@ -277,7 +281,8 @@ src/
277
281
  ├── services/
278
282
  │ ├── rfc-fetcher.ts # RFC fetching (parallel)
279
283
  │ ├── rfcxml-parser.ts # RFCXML parser
280
- └── rfc-text-parser.ts # Text fallback parser
284
+ ├── rfc-text-parser.ts # Text fallback parser
285
+ │ └── checklist-generator.ts # Checklist generation service
281
286
  ├── tools/
282
287
  │ ├── definitions.ts # MCP tool definitions
283
288
  │ └── handlers.ts # Tool handlers
@@ -286,7 +291,10 @@ src/
286
291
  └── utils/
287
292
  ├── cache.ts # LRU cache
288
293
  ├── fetch.ts # Parallel fetch utility
289
- └── text.ts # Text processing utility
294
+ ├── requirement-extractor.ts # Shared requirement extraction
295
+ ├── section.ts # Section search utilities
296
+ ├── text.ts # Text processing utility
297
+ └── validation.ts # Input validation
290
298
  ```
291
299
 
292
300
  ### RFC Fetch Optimization
@@ -318,12 +326,12 @@ Sends parallel requests to multiple sources (RFC Editor, IETF Tools, Datatracker
318
326
 
319
327
  LRU (Least Recently Used) cache with memory limits:
320
328
 
321
- | Cache | Max Entries | Content |
322
- |-------|-------------|---------|
323
- | XML Cache | 20 | Raw RFCXML |
324
- | Text Cache | 20 | Raw text |
325
- | Metadata Cache | 100 | RFC metadata |
326
- | Parse Cache | 50 | Parsed structure |
329
+ | Cache | Max Entries | Content |
330
+ | -------------- | ----------- | ---------------- |
331
+ | XML Cache | 20 | Raw RFCXML |
332
+ | Text Cache | 20 | Raw text |
333
+ | Metadata Cache | 100 | RFC metadata |
334
+ | Parse Cache | 50 | Parsed structure |
327
335
 
328
336
  ## Development
329
337
 
@@ -18,4 +18,23 @@ export declare function createRequirementRegex(): RegExp;
18
18
  * Note: When using with exec() in loops, prefer createRequirementRegex() to avoid lastIndex issues
19
19
  */
20
20
  export declare const REQUIREMENT_REGEX: RegExp;
21
+ /**
22
+ * Section number pattern for parsing RFC text
23
+ * Matches: "1.", "1.1", "1.1.1", etc. followed by title
24
+ * Used in text-based RFC parsing
25
+ */
26
+ export declare const SECTION_HEADER_PATTERN: RegExp;
27
+ /**
28
+ * Create a section header pattern regex instance
29
+ * Safe for use in loops with exec()
30
+ */
31
+ export declare function createSectionHeaderRegex(): RegExp;
32
+ /**
33
+ * RFC reference pattern (e.g., "RFC 1234", "RFC1234")
34
+ */
35
+ export declare function createRFCReferenceRegex(): RegExp;
36
+ /**
37
+ * Section reference pattern (e.g., "Section 1.2", "section 3.4.5")
38
+ */
39
+ export declare function createSectionReferenceRegex(): RegExp;
21
40
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEzD;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,gBAAgB,EAYlD,CAAC;AAEF;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,CAE/C;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,QAA2B,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAMzD;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,gBAAgB,EAYlD,CAAC;AAEF;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,CAE/C;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,QAA2B,CAAC;AAM1D;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,QAAgC,CAAC;AAEpE;;;GAGG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,CAEjD;AAMD;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,CAEhD;AAED;;GAEG;AACH,wBAAgB,2BAA2B,IAAI,MAAM,CAEpD"}
package/dist/constants.js CHANGED
@@ -2,6 +2,9 @@
2
2
  * Common Constants
3
3
  * BCP 14 / RFC 2119 keywords and patterns
4
4
  */
5
+ // ========================================
6
+ // BCP 14 / RFC 2119 Keywords
7
+ // ========================================
5
8
  /**
6
9
  * BCP 14 / RFC 2119 keywords
7
10
  * Ordered by length (longer first to match "MUST NOT" before "MUST")
@@ -31,6 +34,37 @@ export function createRequirementRegex() {
31
34
  * Note: When using with exec() in loops, prefer createRequirementRegex() to avoid lastIndex issues
32
35
  */
33
36
  export const REQUIREMENT_REGEX = createRequirementRegex();
37
+ // ========================================
38
+ // Section Patterns
39
+ // ========================================
40
+ /**
41
+ * Section number pattern for parsing RFC text
42
+ * Matches: "1.", "1.1", "1.1.1", etc. followed by title
43
+ * Used in text-based RFC parsing
44
+ */
45
+ export const SECTION_HEADER_PATTERN = /^(\d+(?:\.\d+)*\.?)\s+(.+)$/;
46
+ /**
47
+ * Create a section header pattern regex instance
48
+ * Safe for use in loops with exec()
49
+ */
50
+ export function createSectionHeaderRegex() {
51
+ return new RegExp(SECTION_HEADER_PATTERN.source);
52
+ }
53
+ // ========================================
54
+ // Cross-Reference Patterns
55
+ // ========================================
56
+ /**
57
+ * RFC reference pattern (e.g., "RFC 1234", "RFC1234")
58
+ */
59
+ export function createRFCReferenceRegex() {
60
+ return /RFC\s*(\d+)/gi;
61
+ }
62
+ /**
63
+ * Section reference pattern (e.g., "Section 1.2", "section 3.4.5")
64
+ */
65
+ export function createSectionReferenceRegex() {
66
+ return /[Ss]ection\s+([\d.]+)/g;
67
+ }
34
68
  // RFC-related configuration is centralized in config.ts
35
69
  // - RFC_CONFIG.xmlAvailableFrom
36
70
  // - isRFCXMLLikelyAvailable()
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAuB;IACtD,UAAU;IACV,MAAM;IACN,UAAU;IACV,WAAW;IACX,OAAO;IACP,YAAY;IACZ,QAAQ;IACR,aAAa;IACb,iBAAiB;IACjB,KAAK;IACL,UAAU;CACX,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,sBAAsB;IACpC,OAAO,IAAI,MAAM,CAAC,OAAO,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACtE,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,sBAAsB,EAAE,CAAC;AAE1D,wDAAwD;AACxD,gCAAgC;AAChC,8BAA8B"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,2CAA2C;AAC3C,6BAA6B;AAC7B,2CAA2C;AAE3C;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAuB;IACtD,UAAU;IACV,MAAM;IACN,UAAU;IACV,WAAW;IACX,OAAO;IACP,YAAY;IACZ,QAAQ;IACR,aAAa;IACb,iBAAiB;IACjB,KAAK;IACL,UAAU;CACX,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,sBAAsB;IACpC,OAAO,IAAI,MAAM,CAAC,OAAO,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACtE,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,sBAAsB,EAAE,CAAC;AAE1D,2CAA2C;AAC3C,mBAAmB;AACnB,2CAA2C;AAE3C;;;;GAIG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,6BAA6B,CAAC;AAEpE;;;GAGG;AACH,MAAM,UAAU,wBAAwB;IACtC,OAAO,IAAI,MAAM,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;AACnD,CAAC;AAED,2CAA2C;AAC3C,2BAA2B;AAC3B,2CAA2C;AAE3C;;GAEG;AACH,MAAM,UAAU,uBAAuB;IACrC,OAAO,eAAe,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,2BAA2B;IACzC,OAAO,wBAAwB,CAAC;AAClC,CAAC;AAED,wDAAwD;AACxD,gCAAgC;AAChC,8BAA8B"}
@@ -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":"AAAA;;;GAGG;AAaH;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,YAA2B;IAC9D,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CACrC,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CACzE,CAAC;IACF,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CACvC,CAAC,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,iBAAiB,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAC7E,CAAC;IACF,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAE9E,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAC1B,YAA2B,EAC3B,IAAmC;IAEnC,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QAC7B,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QAC/B,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;QAC/C,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,OAAO,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACnE,CAAC;QACD,OAAO,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAS,oBAAoB,CAAC,YAA2B;IACvD,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC9B,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,WAAW,EAAE,CAAC;QACd,OAAO,EAAE,KAAK;KACf,CAAC,CAAC,CAAC;AACN,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAC/B,SAAiB,EACjB,KAAa,EACb,YAA2B,EAC3B,IAAmC;IAEnC,MAAM,QAAQ,GAAG,YAAY,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IAClD,MAAM,UAAU,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAElD,OAAO;QACL,GAAG,EAAE,SAAS;QACd,KAAK;QACL,IAAI;QACJ,IAAI,EAAE,oBAAoB,CAAC,UAAU,CAAC,IAAI,CAAC;QAC3C,MAAM,EAAE,oBAAoB,CAAC,UAAU,CAAC,MAAM,CAAC;QAC/C,GAAG,EAAE,oBAAoB,CAAC,UAAU,CAAC,GAAG,CAAC;QACzC,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACtC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB,CAAC,SAAkC;IAC1E,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,CAAC,IAAI,CAAC,SAAS,SAAS,CAAC,GAAG,2BAA2B,CAAC,CAAC;IAC9D,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC,KAAK,IAAI,CAAC,CAAC;IACrC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,IAAI,SAAS,CAAC,IAAI,IAAI,SAAS,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAChD,KAAK,CAAC,IAAI,CAAC,SAAS,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;QACtC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,cAAc,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;IAClD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;QAClE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC;YAClC,KAAK,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,CAAC,CAAC;QAC7E,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,IAAI,SAAS,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;QACjE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;YACpC,KAAK,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,CAAC,CAAC;QAC7E,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,IAAI,SAAS,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;QACxD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,GAAG,EAAE,CAAC;YACjC,KAAK,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,CAAC,CAAC;QAC7E,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAYD;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,SAAkC;IAClE,OAAO;QACL,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,MAAM;QAC3B,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,MAAM;QAC/B,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,MAAM;QACzB,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM;KAC9E,CAAC;AACJ,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;AA6KD;;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"}
@@ -2,8 +2,9 @@
2
2
  * RFC テキストパーサー
3
3
  * XMLが利用できない古いRFC用のフォールバック解析
4
4
  */
5
- import { createRequirementRegex } from '../constants.js';
6
- import { extractSentence, extractCrossReferences } from '../utils/text.js';
5
+ import { createRequirementRegex, SECTION_HEADER_PATTERN } from '../constants.js';
6
+ import { extractCrossReferences } from '../utils/text.js';
7
+ import { extractRequirementsFromSections, } from '../utils/requirement-extractor.js';
7
8
  /**
8
9
  * RFC テキストをパースして構造化データに変換(中精度)
9
10
  */
@@ -49,10 +50,9 @@ function extractTextSections(lines) {
49
50
  let currentSection = null;
50
51
  let currentContent = [];
51
52
  // セクション番号パターン(例: "1.", "1.1", "1.1.1")
52
- const sectionPattern = /^(\d+(?:\.\d+)*\.?)\s+(.+)$/;
53
53
  for (const line of lines) {
54
54
  const trimmed = line.trim();
55
- const match = trimmed.match(sectionPattern);
55
+ const match = trimmed.match(SECTION_HEADER_PATTERN);
56
56
  if (match) {
57
57
  // 前のセクションを保存
58
58
  if (currentSection) {
@@ -112,7 +112,7 @@ function createTextBlocks(text) {
112
112
  const trimmed = para.trim();
113
113
  if (!trimmed)
114
114
  continue;
115
- // Extract requirement markers
115
+ // 要件マーカーを抽出
116
116
  const requirements = [];
117
117
  const regex = createRequirementRegex();
118
118
  let match;
@@ -139,11 +139,10 @@ function extractTextDefinitions(lines) {
139
139
  const definitions = [];
140
140
  const defPattern = /^\s*([A-Za-z][A-Za-z0-9\s-]*[A-Za-z0-9])\s*[-:]\s+(.+)$/;
141
141
  let currentSection = '';
142
- const sectionPattern = /^(\d+(?:\.\d+)*\.?)\s+(.+)$/;
143
142
  for (const line of lines) {
144
143
  const trimmed = line.trim();
145
144
  // セクションを追跡
146
- const sectionMatch = trimmed.match(sectionPattern);
145
+ const sectionMatch = trimmed.match(SECTION_HEADER_PATTERN);
147
146
  if (sectionMatch) {
148
147
  currentSection = sectionMatch[1].replace(/\.$/, '');
149
148
  continue;
@@ -167,40 +166,9 @@ function extractTextDefinitions(lines) {
167
166
  }
168
167
  /**
169
168
  * テキストから要件を抽出
169
+ * 共通ユーティリティのラッパー(テキストパース時はparseComponentsをオフ)
170
170
  */
171
171
  export function extractTextRequirements(sections, filter) {
172
- const requirements = [];
173
- let idCounter = 1;
174
- function processSection(section, path) {
175
- const sectionId = section.number || path;
176
- if (filter?.section && !sectionId.startsWith(filter.section)) {
177
- // フィルタリング
178
- }
179
- for (const block of section.content) {
180
- if (block.type === 'text' && block.requirements.length > 0) {
181
- for (const marker of block.requirements) {
182
- if (filter?.level && marker.level !== filter.level) {
183
- continue;
184
- }
185
- const sentence = extractSentence(block.content, marker.position);
186
- requirements.push({
187
- id: `R-${sectionId}-${idCounter++}`,
188
- level: marker.level,
189
- text: sentence.trim(),
190
- section: sectionId,
191
- sectionTitle: section.title,
192
- fullContext: block.content,
193
- });
194
- }
195
- }
196
- }
197
- for (const subsection of section.subsections) {
198
- processSection(subsection, `${sectionId}.${subsection.number || ''}`);
199
- }
200
- }
201
- for (const section of sections) {
202
- processSection(section, section.number || '');
203
- }
204
- return requirements;
172
+ return extractRequirementsFromSections(sections, filter, { parseComponents: false });
205
173
  }
206
174
  //# sourceMappingURL=rfc-text-parser.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rfc-text-parser.js","sourceRoot":"","sources":["../../src/services/rfc-text-parser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rfc-text-parser.js","sourceRoot":"","sources":["../../src/services/rfc-text-parser.ts"],"names":[],"mappings":"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"}