@nahisaho/katashiro-orchestrator 1.0.1 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/dist/consensus/AsciiDiagramConverter.d.ts +45 -0
  2. package/dist/consensus/AsciiDiagramConverter.d.ts.map +1 -0
  3. package/dist/consensus/AsciiDiagramConverter.js +460 -0
  4. package/dist/consensus/AsciiDiagramConverter.js.map +1 -0
  5. package/dist/consensus/ConsensusResearchEngine.d.ts +84 -0
  6. package/dist/consensus/ConsensusResearchEngine.d.ts.map +1 -0
  7. package/dist/consensus/ConsensusResearchEngine.js +409 -0
  8. package/dist/consensus/ConsensusResearchEngine.js.map +1 -0
  9. package/dist/consensus/ConsensusSelector.d.ts +63 -0
  10. package/dist/consensus/ConsensusSelector.d.ts.map +1 -0
  11. package/dist/consensus/ConsensusSelector.js +124 -0
  12. package/dist/consensus/ConsensusSelector.js.map +1 -0
  13. package/dist/consensus/ReportPostProcessor.d.ts +51 -0
  14. package/dist/consensus/ReportPostProcessor.d.ts.map +1 -0
  15. package/dist/consensus/ReportPostProcessor.js +162 -0
  16. package/dist/consensus/ReportPostProcessor.js.map +1 -0
  17. package/dist/consensus/ReportScorer.d.ts +81 -0
  18. package/dist/consensus/ReportScorer.d.ts.map +1 -0
  19. package/dist/consensus/ReportScorer.js +292 -0
  20. package/dist/consensus/ReportScorer.js.map +1 -0
  21. package/dist/consensus/ResearchAgent.d.ts +137 -0
  22. package/dist/consensus/ResearchAgent.d.ts.map +1 -0
  23. package/dist/consensus/ResearchAgent.js +319 -0
  24. package/dist/consensus/ResearchAgent.js.map +1 -0
  25. package/dist/consensus/index.d.ts +22 -0
  26. package/dist/consensus/index.d.ts.map +1 -0
  27. package/dist/consensus/index.js +42 -0
  28. package/dist/consensus/index.js.map +1 -0
  29. package/dist/consensus/types.d.ts +409 -0
  30. package/dist/consensus/types.d.ts.map +1 -0
  31. package/dist/consensus/types.js +98 -0
  32. package/dist/consensus/types.js.map +1 -0
  33. package/dist/index.d.ts +1 -0
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +13 -1
  36. package/dist/index.js.map +1 -1
  37. package/package.json +4 -2
@@ -0,0 +1,51 @@
1
+ /**
2
+ * KATASHIRO v1.3.0 - ReportPostProcessor
3
+ * レポート後処理(ASCII図変換)を担当
4
+ * @module @nahisaho/katashiro-orchestrator/consensus
5
+ * @version 1.3.0
6
+ */
7
+ import type { PostProcessorOptions, PostProcessResult, AsciiDiagram } from './types';
8
+ /**
9
+ * レポート後処理クラス
10
+ * @requirement REQ-1.3.0-VIS-002
11
+ */
12
+ export declare class ReportPostProcessor {
13
+ private readonly options;
14
+ private readonly converter;
15
+ /**
16
+ * コンストラクタ
17
+ * @param options 後処理オプション
18
+ */
19
+ constructor(options?: Partial<PostProcessorOptions>);
20
+ /**
21
+ * レポートを後処理
22
+ * @param report 入力レポート
23
+ * @returns 後処理結果
24
+ */
25
+ process(report: string): PostProcessResult;
26
+ /**
27
+ * ASCII図を検出
28
+ * @param text 入力テキスト
29
+ * @returns 検出されたASCII図配列
30
+ */
31
+ detectAsciiDiagrams(text: string): AsciiDiagram[];
32
+ /**
33
+ * ASCII図をMermaidに変換
34
+ * @param diagram ASCII図
35
+ * @returns Mermaid形式の文字列
36
+ */
37
+ convertToMermaid(diagram: AsciiDiagram): string;
38
+ /**
39
+ * ASCII図をMarkdownに変換
40
+ * @param diagram ASCII図
41
+ * @returns Markdown形式の文字列
42
+ */
43
+ convertToMarkdownTable(diagram: AsciiDiagram): string;
44
+ /**
45
+ * 単一のASCII図を変換
46
+ * @param diagram ASCII図
47
+ * @returns 変換記録
48
+ */
49
+ private convertDiagram;
50
+ }
51
+ //# sourceMappingURL=ReportPostProcessor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReportPostProcessor.d.ts","sourceRoot":"","sources":["../../src/consensus/ReportPostProcessor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,oBAAoB,EACpB,iBAAiB,EAEjB,YAAY,EACb,MAAM,SAAS,CAAC;AAIjB;;;GAGG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuB;IAC/C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAwB;IAElD;;;OAGG;gBACS,OAAO,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC;IAKnD;;;;OAIG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB;IAyE1C;;;;OAIG;IACH,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,EAAE;IAIjD;;;;OAIG;IACH,gBAAgB,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM;IAI/C;;;;OAIG;IACH,sBAAsB,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM;IAIrD;;;;OAIG;IACH,OAAO,CAAC,cAAc;CAuCvB"}
@@ -0,0 +1,162 @@
1
+ "use strict";
2
+ /**
3
+ * KATASHIRO v1.3.0 - ReportPostProcessor
4
+ * レポート後処理(ASCII図変換)を担当
5
+ * @module @nahisaho/katashiro-orchestrator/consensus
6
+ * @version 1.3.0
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.ReportPostProcessor = void 0;
10
+ const types_1 = require("./types");
11
+ const AsciiDiagramConverter_1 = require("./AsciiDiagramConverter");
12
+ /**
13
+ * レポート後処理クラス
14
+ * @requirement REQ-1.3.0-VIS-002
15
+ */
16
+ class ReportPostProcessor {
17
+ options;
18
+ converter;
19
+ /**
20
+ * コンストラクタ
21
+ * @param options 後処理オプション
22
+ */
23
+ constructor(options) {
24
+ this.options = { ...types_1.DEFAULT_POST_PROCESSOR_OPTIONS, ...options };
25
+ this.converter = new AsciiDiagramConverter_1.AsciiDiagramConverter();
26
+ }
27
+ /**
28
+ * レポートを後処理
29
+ * @param report 入力レポート
30
+ * @returns 後処理結果
31
+ */
32
+ process(report) {
33
+ const startTime = Date.now();
34
+ const conversions = [];
35
+ const warnings = [];
36
+ // 後処理が無効な場合はそのまま返す
37
+ if (!this.options.enabled) {
38
+ return {
39
+ processedReport: report,
40
+ conversions: [],
41
+ warnings: [],
42
+ processingTimeMs: Date.now() - startTime,
43
+ };
44
+ }
45
+ // ASCII図を検出
46
+ const diagrams = this.converter.detect(report);
47
+ if (diagrams.length === 0) {
48
+ return {
49
+ processedReport: report,
50
+ conversions: [],
51
+ warnings: [],
52
+ processingTimeMs: Date.now() - startTime,
53
+ };
54
+ }
55
+ // 変換処理(後ろから置換して位置ずれを防ぐ)
56
+ let processedReport = report;
57
+ const sortedDiagrams = [...diagrams].sort((a, b) => b.startIndex - a.startIndex);
58
+ for (const diagram of sortedDiagrams) {
59
+ const record = this.convertDiagram(diagram);
60
+ conversions.unshift(record); // 順番を元に戻す
61
+ if (record.success) {
62
+ // 変換成功: 置換
63
+ const before = processedReport.slice(0, diagram.startIndex);
64
+ const after = processedReport.slice(diagram.endIndex);
65
+ if (this.options.preserveOriginal) {
66
+ // 元の図も保持
67
+ processedReport =
68
+ before +
69
+ `<!-- Original ASCII diagram preserved -->\n` +
70
+ `\`\`\`\n${diagram.original}\n\`\`\`\n\n` +
71
+ record.converted +
72
+ after;
73
+ }
74
+ else {
75
+ processedReport = before + record.converted + after;
76
+ }
77
+ }
78
+ else {
79
+ // 変換失敗
80
+ warnings.push(`Line ${diagram.lineNumber}: Failed to convert ${diagram.type} diagram - ${record.errorMessage}`);
81
+ if (this.options.strictMode) {
82
+ throw new Error(`Failed to convert ${diagram.type} diagram at line ${diagram.lineNumber}: ${record.errorMessage}`);
83
+ }
84
+ }
85
+ }
86
+ return {
87
+ processedReport,
88
+ conversions,
89
+ warnings,
90
+ processingTimeMs: Date.now() - startTime,
91
+ };
92
+ }
93
+ /**
94
+ * ASCII図を検出
95
+ * @param text 入力テキスト
96
+ * @returns 検出されたASCII図配列
97
+ */
98
+ detectAsciiDiagrams(text) {
99
+ return this.converter.detect(text);
100
+ }
101
+ /**
102
+ * ASCII図をMermaidに変換
103
+ * @param diagram ASCII図
104
+ * @returns Mermaid形式の文字列
105
+ */
106
+ convertToMermaid(diagram) {
107
+ return this.converter.convertToMermaid(diagram);
108
+ }
109
+ /**
110
+ * ASCII図をMarkdownに変換
111
+ * @param diagram ASCII図
112
+ * @returns Markdown形式の文字列
113
+ */
114
+ convertToMarkdownTable(diagram) {
115
+ return this.converter.convertToMarkdown(diagram);
116
+ }
117
+ /**
118
+ * 単一のASCII図を変換
119
+ * @param diagram ASCII図
120
+ * @returns 変換記録
121
+ */
122
+ convertDiagram(diagram) {
123
+ try {
124
+ let converted;
125
+ if (this.options.preferMermaid) {
126
+ // Mermaid優先
127
+ converted = this.converter.convertToMermaid(diagram);
128
+ }
129
+ else {
130
+ // Markdown優先
131
+ converted = this.converter.convertToMarkdown(diagram);
132
+ }
133
+ // 変換結果が元と同じ場合は失敗とみなす
134
+ if (converted === diagram.original) {
135
+ return {
136
+ original: diagram.original,
137
+ converted: diagram.original,
138
+ type: diagram.type,
139
+ success: false,
140
+ errorMessage: 'Conversion produced no changes',
141
+ };
142
+ }
143
+ return {
144
+ original: diagram.original,
145
+ converted,
146
+ type: diagram.type,
147
+ success: true,
148
+ };
149
+ }
150
+ catch (error) {
151
+ return {
152
+ original: diagram.original,
153
+ converted: diagram.original,
154
+ type: diagram.type,
155
+ success: false,
156
+ errorMessage: error instanceof Error ? error.message : String(error),
157
+ };
158
+ }
159
+ }
160
+ }
161
+ exports.ReportPostProcessor = ReportPostProcessor;
162
+ //# sourceMappingURL=ReportPostProcessor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReportPostProcessor.js","sourceRoot":"","sources":["../../src/consensus/ReportPostProcessor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * KATASHIRO v1.2.0 - ReportScorer
3
+ * レポートのスコアリングと矛盾検出を担当
4
+ * @module @nahisaho/katashiro-orchestrator/consensus
5
+ * @version 1.2.0
6
+ */
7
+ import { AgentReport, ReportScore, ConflictDetail, ScoringWeights } from './types';
8
+ /**
9
+ * レポートスコアラー
10
+ * @requirement REQ-1.2.0-WFL-002
11
+ */
12
+ export declare class ReportScorer {
13
+ private readonly conflictThreshold;
14
+ private readonly weights;
15
+ /**
16
+ * コンストラクタ
17
+ * @param conflictThreshold 矛盾許容閾値(デフォルト: 0.1)
18
+ * @param weights スコアリング重み
19
+ */
20
+ constructor(conflictThreshold?: number, weights?: ScoringWeights);
21
+ /**
22
+ * 複数レポートをスコアリング
23
+ * @param reports エージェントレポート配列
24
+ * @returns スコア配列
25
+ */
26
+ scoreReports(reports: AgentReport[]): ReportScore[];
27
+ /**
28
+ * 単一レポートをスコアリング
29
+ * @requirement REQ-1.2.0-WFL-002
30
+ * @param report 対象レポート
31
+ * @param allReports 全レポート(矛盾検出用)
32
+ * @returns スコア
33
+ */
34
+ scoreReport(report: AgentReport, allReports: AgentReport[]): ReportScore;
35
+ /**
36
+ * 矛盾を検出
37
+ * @param report 対象レポート
38
+ * @param otherReports 他のレポート
39
+ * @returns 矛盾詳細配列
40
+ */
41
+ detectConflicts(report: AgentReport, otherReports: AgentReport[]): ConflictDetail[];
42
+ /**
43
+ * 一貫性スコアを計算
44
+ * 矛盾の数と深刻度に基づいて減点
45
+ */
46
+ private calculateConsistencyScore;
47
+ /**
48
+ * ソース信頼性スコアを計算
49
+ */
50
+ private calculateReliabilityScore;
51
+ /**
52
+ * カバレッジスコアを計算
53
+ * レポートの情報網羅度を評価
54
+ */
55
+ private calculateCoverageScore;
56
+ /**
57
+ * コンテンツ長を正規化
58
+ */
59
+ private normalizeContentLength;
60
+ /**
61
+ * エンティティ多様性を推定
62
+ */
63
+ private estimateEntityDiversity;
64
+ /**
65
+ * 未検証ステートメントをカウント
66
+ */
67
+ private countUnverifiedStatements;
68
+ /**
69
+ * ステートメントを抽出
70
+ */
71
+ private extractStatements;
72
+ /**
73
+ * ステートメント間の矛盾を検出
74
+ */
75
+ private detectStatementConflict;
76
+ /**
77
+ * キーワードを抽出
78
+ */
79
+ private extractKeywords;
80
+ }
81
+ //# sourceMappingURL=ReportScorer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReportScorer.d.ts","sourceRoot":"","sources":["../../src/consensus/ReportScorer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,WAAW,EACX,WAAW,EACX,cAAc,EAEd,cAAc,EAEf,MAAM,SAAS,CAAC;AAEjB;;;GAGG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;IAC3C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IAEzC;;;;OAIG;gBAED,iBAAiB,GAAE,MAAY,EAC/B,OAAO,GAAE,cAAwC;IAMnD;;;;OAIG;IACH,YAAY,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,WAAW,EAAE;IAInD;;;;;;OAMG;IACH,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,WAAW;IAoCxE;;;;;OAKG;IACH,eAAe,CAAC,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,cAAc,EAAE;IAyBnF;;;OAGG;IACH,OAAO,CAAC,yBAAyB;IAgBjC;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAQjC;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAwB9B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAO9B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAmB/B;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAiBjC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAkBzB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAyE/B;;OAEG;IACH,OAAO,CAAC,eAAe;CAwBxB"}
@@ -0,0 +1,292 @@
1
+ "use strict";
2
+ /**
3
+ * KATASHIRO v1.2.0 - ReportScorer
4
+ * レポートのスコアリングと矛盾検出を担当
5
+ * @module @nahisaho/katashiro-orchestrator/consensus
6
+ * @version 1.2.0
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.ReportScorer = void 0;
10
+ const types_1 = require("./types");
11
+ /**
12
+ * レポートスコアラー
13
+ * @requirement REQ-1.2.0-WFL-002
14
+ */
15
+ class ReportScorer {
16
+ conflictThreshold;
17
+ weights;
18
+ /**
19
+ * コンストラクタ
20
+ * @param conflictThreshold 矛盾許容閾値(デフォルト: 0.1)
21
+ * @param weights スコアリング重み
22
+ */
23
+ constructor(conflictThreshold = 0.1, weights = types_1.DEFAULT_SCORING_WEIGHTS) {
24
+ this.conflictThreshold = conflictThreshold;
25
+ this.weights = weights;
26
+ }
27
+ /**
28
+ * 複数レポートをスコアリング
29
+ * @param reports エージェントレポート配列
30
+ * @returns スコア配列
31
+ */
32
+ scoreReports(reports) {
33
+ return reports.map((report) => this.scoreReport(report, reports));
34
+ }
35
+ /**
36
+ * 単一レポートをスコアリング
37
+ * @requirement REQ-1.2.0-WFL-002
38
+ * @param report 対象レポート
39
+ * @param allReports 全レポート(矛盾検出用)
40
+ * @returns スコア
41
+ */
42
+ scoreReport(report, allReports) {
43
+ // 1. 矛盾検出
44
+ const otherReports = allReports.filter((r) => r.reportId !== report.reportId);
45
+ const conflicts = this.detectConflicts(report, otherReports);
46
+ // 2. 一貫性スコア(矛盾が少ないほど高い)
47
+ const consistencyScore = this.calculateConsistencyScore(report, conflicts);
48
+ // 3. ソース信頼性スコア
49
+ const reliabilityScore = this.calculateReliabilityScore(report.sources);
50
+ // 4. カバレッジスコア
51
+ const coverageScore = this.calculateCoverageScore(report);
52
+ // 5. 総合スコア計算
53
+ // Score = (ConsistencyScore * 0.5) + (ReliabilityScore * 0.3) + (CoverageScore * 0.2)
54
+ const totalScore = consistencyScore * this.weights.consistency +
55
+ reliabilityScore * this.weights.reliability +
56
+ coverageScore * this.weights.coverage;
57
+ // 6. ソースURL一覧を抽出
58
+ const sourceUrls = report.sources.map((s) => s.url);
59
+ return {
60
+ reportId: report.reportId,
61
+ consistencyScore,
62
+ reliabilityScore,
63
+ coverageScore,
64
+ totalScore,
65
+ conflicts,
66
+ unverifiedCount: this.countUnverifiedStatements(report),
67
+ sourceUrls,
68
+ };
69
+ }
70
+ /**
71
+ * 矛盾を検出
72
+ * @param report 対象レポート
73
+ * @param otherReports 他のレポート
74
+ * @returns 矛盾詳細配列
75
+ */
76
+ detectConflicts(report, otherReports) {
77
+ const conflicts = [];
78
+ const statements = this.extractStatements(report.content);
79
+ for (const otherReport of otherReports) {
80
+ const otherStatements = this.extractStatements(otherReport.content);
81
+ for (const stmt of statements) {
82
+ for (const otherStmt of otherStatements) {
83
+ const conflict = this.detectStatementConflict(stmt, report, otherStmt, otherReport);
84
+ if (conflict && conflict.confidence >= this.conflictThreshold) {
85
+ conflicts.push(conflict);
86
+ }
87
+ }
88
+ }
89
+ }
90
+ return conflicts;
91
+ }
92
+ /**
93
+ * 一貫性スコアを計算
94
+ * 矛盾の数と深刻度に基づいて減点
95
+ */
96
+ calculateConsistencyScore(_report, conflicts) {
97
+ if (conflicts.length === 0)
98
+ return 1.0;
99
+ // 深刻度に応じた減点
100
+ const totalPenalty = conflicts.reduce((sum, c) => {
101
+ const severityWeight = c.severity / 5; // 1-5 → 0.2-1.0
102
+ const confidenceWeight = c.confidence;
103
+ return sum + severityWeight * confidenceWeight * 0.1;
104
+ }, 0);
105
+ return Math.max(0, 1.0 - totalPenalty);
106
+ }
107
+ /**
108
+ * ソース信頼性スコアを計算
109
+ */
110
+ calculateReliabilityScore(sources) {
111
+ if (sources.length === 0)
112
+ return 0;
113
+ const avgReliability = sources.reduce((sum, s) => sum + (s.reliabilityScore || 0.5), 0) / sources.length;
114
+ return avgReliability;
115
+ }
116
+ /**
117
+ * カバレッジスコアを計算
118
+ * レポートの情報網羅度を評価
119
+ */
120
+ calculateCoverageScore(report) {
121
+ const content = report.content;
122
+ // 評価基準
123
+ const metrics = {
124
+ // ソース数(多いほど良い、最大10で1.0)
125
+ sourceCount: Math.min(report.sources.length / 10, 1.0),
126
+ // コンテンツ長(適度な長さが良い、2000-5000文字で最高)
127
+ contentLength: this.normalizeContentLength(content.length),
128
+ // セクション数(構造化されているほど良い)
129
+ sectionCount: (content.match(/^#{1,3}\s/gm) || []).length / 10,
130
+ // エンティティ多様性(人名、組織名、日付などの種類)
131
+ entityDiversity: this.estimateEntityDiversity(content),
132
+ };
133
+ // 重み付き平均
134
+ return (metrics.sourceCount * 0.3 +
135
+ metrics.contentLength * 0.2 +
136
+ metrics.sectionCount * 0.2 +
137
+ metrics.entityDiversity * 0.3);
138
+ }
139
+ /**
140
+ * コンテンツ長を正規化
141
+ */
142
+ normalizeContentLength(length) {
143
+ if (length < 1000)
144
+ return length / 1000;
145
+ if (length <= 5000)
146
+ return 1.0;
147
+ if (length <= 10000)
148
+ return 1.0 - (length - 5000) / 10000;
149
+ return 0.5;
150
+ }
151
+ /**
152
+ * エンティティ多様性を推定
153
+ */
154
+ estimateEntityDiversity(content) {
155
+ const patterns = [
156
+ /\d{4}年/g, // 年
157
+ /[A-Z][a-z]+/g, // 固有名詞(英語)
158
+ /「[^」]+」/g, // 引用
159
+ /https?:\/\/[^\s]+/g, // URL
160
+ ];
161
+ let diversityScore = 0;
162
+ for (const pattern of patterns) {
163
+ const matches = content.match(pattern);
164
+ if (matches && matches.length > 0) {
165
+ diversityScore += Math.min(matches.length / 5, 0.25);
166
+ }
167
+ }
168
+ return Math.min(diversityScore, 1.0);
169
+ }
170
+ /**
171
+ * 未検証ステートメントをカウント
172
+ */
173
+ countUnverifiedStatements(report) {
174
+ const unverifiedPatterns = [
175
+ /\[要検証\]/g,
176
+ /\[未確認\]/g,
177
+ /\[unverified\]/gi,
178
+ /(要確認)/g,
179
+ ];
180
+ let count = 0;
181
+ for (const pattern of unverifiedPatterns) {
182
+ const matches = report.content.match(pattern);
183
+ if (matches)
184
+ count += matches.length;
185
+ }
186
+ return count;
187
+ }
188
+ /**
189
+ * ステートメントを抽出
190
+ */
191
+ extractStatements(content) {
192
+ // 文単位で分割
193
+ const sentences = content
194
+ .split(/[。.!?!?]/)
195
+ .map((s) => s.trim())
196
+ .filter((s) => s.length > 10);
197
+ // 数値や日付を含む事実ステートメントを優先
198
+ const factualStatements = sentences.filter((s) => /\d+/.test(s) || // 数値を含む
199
+ /年|月|日/.test(s) || // 日付を含む
200
+ /は|である|された|される/.test(s) // 断定表現
201
+ );
202
+ return factualStatements.slice(0, 50); // 最大50件
203
+ }
204
+ /**
205
+ * ステートメント間の矛盾を検出
206
+ */
207
+ detectStatementConflict(stmt1, report1, stmt2, report2) {
208
+ // 類似度が高いが内容が矛盾するケースを検出
209
+ // 1. キーワード類似度チェック
210
+ const keywords1 = this.extractKeywords(stmt1);
211
+ const keywords2 = this.extractKeywords(stmt2);
212
+ const commonKeywords = keywords1.filter((k) => keywords2.includes(k));
213
+ // 共通キーワードが少なければ関連性なし
214
+ if (commonKeywords.length < 2)
215
+ return null;
216
+ // 2. 数値の矛盾チェック
217
+ const numbers1 = stmt1.match(/\d+(?:\.\d+)?/g) || [];
218
+ const numbers2 = stmt2.match(/\d+(?:\.\d+)?/g) || [];
219
+ if (numbers1.length > 0 && numbers2.length > 0) {
220
+ // 同じ文脈で異なる数値
221
+ const hasConflictingNumbers = numbers1.some((n1) => numbers2.some((n2) => n1 !== n2 && Math.abs(parseFloat(n1) - parseFloat(n2)) > 0.1));
222
+ if (hasConflictingNumbers && commonKeywords.length >= 2) {
223
+ return {
224
+ conflictId: `conflict-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,
225
+ type: 'inconsistency',
226
+ statement1: {
227
+ text: stmt1,
228
+ source: report1.sources[0]?.url || 'unknown',
229
+ reportId: report1.reportId,
230
+ },
231
+ statement2: {
232
+ text: stmt2,
233
+ source: report2.sources[0]?.url || 'unknown',
234
+ reportId: report2.reportId,
235
+ },
236
+ severity: 3,
237
+ confidence: 0.6 + commonKeywords.length * 0.1,
238
+ };
239
+ }
240
+ }
241
+ // 3. 否定表現の矛盾チェック
242
+ const negatives = ['ない', 'なかった', 'ではない', 'not', 'no', '否定'];
243
+ const hasNegative1 = negatives.some((n) => stmt1.includes(n));
244
+ const hasNegative2 = negatives.some((n) => stmt2.includes(n));
245
+ if (hasNegative1 !== hasNegative2 && commonKeywords.length >= 3) {
246
+ return {
247
+ conflictId: `conflict-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,
248
+ type: 'contradiction',
249
+ statement1: {
250
+ text: stmt1,
251
+ source: report1.sources[0]?.url || 'unknown',
252
+ reportId: report1.reportId,
253
+ },
254
+ statement2: {
255
+ text: stmt2,
256
+ source: report2.sources[0]?.url || 'unknown',
257
+ reportId: report2.reportId,
258
+ },
259
+ severity: 4,
260
+ confidence: 0.5 + commonKeywords.length * 0.1,
261
+ };
262
+ }
263
+ return null;
264
+ }
265
+ /**
266
+ * キーワードを抽出
267
+ */
268
+ extractKeywords(text) {
269
+ // 日本語の名詞っぽいものを抽出(簡易版)
270
+ const words = text
271
+ .replace(/[。、!?「」()\[\]【】]/g, ' ')
272
+ .split(/\s+/)
273
+ .filter((w) => w.length >= 2);
274
+ // ストップワード除去
275
+ const stopWords = [
276
+ 'これ',
277
+ 'それ',
278
+ 'あれ',
279
+ 'この',
280
+ 'その',
281
+ 'ある',
282
+ 'いる',
283
+ 'する',
284
+ 'なる',
285
+ 'れる',
286
+ 'られる',
287
+ ];
288
+ return words.filter((w) => !stopWords.includes(w));
289
+ }
290
+ }
291
+ exports.ReportScorer = ReportScorer;
292
+ //# sourceMappingURL=ReportScorer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReportScorer.js","sourceRoot":"","sources":["../../src/consensus/ReportScorer.ts"],"names":[],"mappings":"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"}