@nahisaho/katashiro-orchestrator 1.0.1 → 1.2.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.
- package/dist/consensus/ConsensusResearchEngine.d.ts +83 -0
- package/dist/consensus/ConsensusResearchEngine.d.ts.map +1 -0
- package/dist/consensus/ConsensusResearchEngine.js +397 -0
- package/dist/consensus/ConsensusResearchEngine.js.map +1 -0
- package/dist/consensus/ConsensusSelector.d.ts +63 -0
- package/dist/consensus/ConsensusSelector.d.ts.map +1 -0
- package/dist/consensus/ConsensusSelector.js +124 -0
- package/dist/consensus/ConsensusSelector.js.map +1 -0
- package/dist/consensus/ReportScorer.d.ts +81 -0
- package/dist/consensus/ReportScorer.d.ts.map +1 -0
- package/dist/consensus/ReportScorer.js +292 -0
- package/dist/consensus/ReportScorer.js.map +1 -0
- package/dist/consensus/ResearchAgent.d.ts +137 -0
- package/dist/consensus/ResearchAgent.d.ts.map +1 -0
- package/dist/consensus/ResearchAgent.js +319 -0
- package/dist/consensus/ResearchAgent.js.map +1 -0
- package/dist/consensus/index.d.ts +19 -0
- package/dist/consensus/index.d.ts.map +1 -0
- package/dist/consensus/index.js +35 -0
- package/dist/consensus/index.js.map +1 -0
- package/dist/consensus/types.d.ts +343 -0
- package/dist/consensus/types.d.ts.map +1 -0
- package/dist/consensus/types.js +88 -0
- package/dist/consensus/types.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -1
- package/dist/index.js.map +1 -1
- package/package.json +4 -2
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* KATASHIRO v1.2.0 - ConsensusResearchEngine
|
|
3
|
+
* 反復合議型リサーチワークフローのメインオーケストレーター
|
|
4
|
+
* @module @nahisaho/katashiro-orchestrator/consensus
|
|
5
|
+
* @version 1.2.0
|
|
6
|
+
*/
|
|
7
|
+
import { ConsensusResearchConfig, ConsensusResearchResult, ConsensusResearchEventListener } from './types';
|
|
8
|
+
import { ResearchAgentDependencies } from './ResearchAgent';
|
|
9
|
+
/**
|
|
10
|
+
* 合議型リサーチエンジン
|
|
11
|
+
* @requirement REQ-1.2.0-WFL-001 ~ REQ-1.2.0-WFL-005
|
|
12
|
+
*/
|
|
13
|
+
export declare class ConsensusResearchEngine {
|
|
14
|
+
private readonly config;
|
|
15
|
+
private readonly agents;
|
|
16
|
+
private readonly scorer;
|
|
17
|
+
private readonly selector;
|
|
18
|
+
private readonly eventEmitter;
|
|
19
|
+
/**
|
|
20
|
+
* コンストラクタ
|
|
21
|
+
* @param config 設定
|
|
22
|
+
* @param deps 依存性(テスト用)
|
|
23
|
+
*/
|
|
24
|
+
constructor(config?: Partial<ConsensusResearchConfig>, deps?: ResearchAgentDependencies);
|
|
25
|
+
/**
|
|
26
|
+
* イベントリスナーを登録
|
|
27
|
+
*/
|
|
28
|
+
on(listener: ConsensusResearchEventListener): this;
|
|
29
|
+
/**
|
|
30
|
+
* イベントリスナーを解除
|
|
31
|
+
*/
|
|
32
|
+
off(listener: ConsensusResearchEventListener): this;
|
|
33
|
+
/**
|
|
34
|
+
* イベントを発行
|
|
35
|
+
*/
|
|
36
|
+
private emit;
|
|
37
|
+
/**
|
|
38
|
+
* 反復合議型リサーチを実行
|
|
39
|
+
* @requirement REQ-1.2.0-WFL-001, REQ-1.2.0-WFL-004, REQ-1.2.0-WFL-005
|
|
40
|
+
* @param topic リサーチトピック
|
|
41
|
+
* @param options オプション設定
|
|
42
|
+
* @returns 最終結果
|
|
43
|
+
*/
|
|
44
|
+
research(topic: string, options?: Partial<ConsensusResearchConfig>): Promise<ConsensusResearchResult>;
|
|
45
|
+
/**
|
|
46
|
+
* 1イテレーションを実行
|
|
47
|
+
* @requirement REQ-1.2.0-WFL-001, REQ-1.2.0-WFL-002, REQ-1.2.0-WFL-003
|
|
48
|
+
*/
|
|
49
|
+
private runIteration;
|
|
50
|
+
/**
|
|
51
|
+
* エージェントを並列実行
|
|
52
|
+
* @requirement REQ-1.2.0-WFL-001, REQ-1.2.0-ERR-001, REQ-1.2.0-ERR-002
|
|
53
|
+
*/
|
|
54
|
+
private executeAgentsInParallel;
|
|
55
|
+
/**
|
|
56
|
+
* タイムアウトPromiseを作成
|
|
57
|
+
*/
|
|
58
|
+
private createTimeout;
|
|
59
|
+
/**
|
|
60
|
+
* 早期終了を判定
|
|
61
|
+
* @requirement REQ-1.2.0-WFL-004 (AC4: 2連続でスコア改善<5%の場合は早期終了)
|
|
62
|
+
*/
|
|
63
|
+
private shouldTerminateEarly;
|
|
64
|
+
/**
|
|
65
|
+
* 次イテレーションのコンテキストを構築
|
|
66
|
+
* @requirement REQ-1.2.0-WFL-001, REQ-1.2.0-WFL-003
|
|
67
|
+
*/
|
|
68
|
+
private buildNextContext;
|
|
69
|
+
/**
|
|
70
|
+
* 最終レポートを生成
|
|
71
|
+
* @requirement REQ-1.2.0-WFL-005
|
|
72
|
+
*/
|
|
73
|
+
private generateFinalReport;
|
|
74
|
+
/**
|
|
75
|
+
* エグゼクティブサマリーを生成
|
|
76
|
+
*/
|
|
77
|
+
private generateExecutiveSummary;
|
|
78
|
+
/**
|
|
79
|
+
* 全イテレーションから主要な発見を抽出
|
|
80
|
+
*/
|
|
81
|
+
private extractKeyFindings;
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=ConsensusResearchEngine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConsensusResearchEngine.d.ts","sourceRoot":"","sources":["../../src/consensus/ConsensusResearchEngine.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EAEvB,8BAA8B,EAS/B,MAAM,SAAS,CAAC;AACjB,OAAO,EAAiB,yBAAyB,EAA6B,MAAM,iBAAiB,CAAC;AAItG;;;GAGG;AACH,qBAAa,uBAAuB;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0B;IACjD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IACtC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoB;IAC7C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAE5C;;;;OAIG;gBAED,MAAM,CAAC,EAAE,OAAO,CAAC,uBAAuB,CAAC,EACzC,IAAI,CAAC,EAAE,yBAAyB;IAgBlC;;OAEG;IACH,EAAE,CAAC,QAAQ,EAAE,8BAA8B,GAAG,IAAI;IAKlD;;OAEG;IACH,GAAG,CAAC,QAAQ,EAAE,8BAA8B,GAAG,IAAI;IAKnD;;OAEG;IACH,OAAO,CAAC,IAAI;IAIZ;;;;;;OAMG;IACG,QAAQ,CACZ,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,OAAO,CAAC,uBAAuB,CAAC,GACzC,OAAO,CAAC,uBAAuB,CAAC;IAuEnC;;;OAGG;YACW,YAAY;IAmD1B;;;OAGG;YACW,uBAAuB;IAmErC;;OAEG;IACH,OAAO,CAAC,aAAa;IAarB;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAqC5B;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAoDxB;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAkE3B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAmBhC;;OAEG;IACH,OAAO,CAAC,kBAAkB;CAmB3B"}
|
|
@@ -0,0 +1,397 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* KATASHIRO v1.2.0 - ConsensusResearchEngine
|
|
4
|
+
* 反復合議型リサーチワークフローのメインオーケストレーター
|
|
5
|
+
* @module @nahisaho/katashiro-orchestrator/consensus
|
|
6
|
+
* @version 1.2.0
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.ConsensusResearchEngine = void 0;
|
|
10
|
+
const events_1 = require("events");
|
|
11
|
+
const types_1 = require("./types");
|
|
12
|
+
const ResearchAgent_1 = require("./ResearchAgent");
|
|
13
|
+
const ReportScorer_1 = require("./ReportScorer");
|
|
14
|
+
const ConsensusSelector_1 = require("./ConsensusSelector");
|
|
15
|
+
/**
|
|
16
|
+
* 合議型リサーチエンジン
|
|
17
|
+
* @requirement REQ-1.2.0-WFL-001 ~ REQ-1.2.0-WFL-005
|
|
18
|
+
*/
|
|
19
|
+
class ConsensusResearchEngine {
|
|
20
|
+
config;
|
|
21
|
+
agents;
|
|
22
|
+
scorer;
|
|
23
|
+
selector;
|
|
24
|
+
eventEmitter;
|
|
25
|
+
/**
|
|
26
|
+
* コンストラクタ
|
|
27
|
+
* @param config 設定
|
|
28
|
+
* @param deps 依存性(テスト用)
|
|
29
|
+
*/
|
|
30
|
+
constructor(config, deps) {
|
|
31
|
+
this.config = { ...types_1.DEFAULT_CONSENSUS_CONFIG, ...config };
|
|
32
|
+
this.eventEmitter = new events_1.EventEmitter();
|
|
33
|
+
this.scorer = new ReportScorer_1.ReportScorer(this.config.conflictThreshold);
|
|
34
|
+
this.selector = new ConsensusSelector_1.ConsensusSelector();
|
|
35
|
+
// エージェント作成
|
|
36
|
+
const agentDeps = deps || (0, ResearchAgent_1.createDefaultDependencies)();
|
|
37
|
+
this.agents = [];
|
|
38
|
+
for (let i = 1; i <= this.config.agentCount; i++) {
|
|
39
|
+
const strategy = types_1.DEFAULT_AGENT_STRATEGIES[i - 1] || types_1.DEFAULT_AGENT_STRATEGIES[0];
|
|
40
|
+
this.agents.push(new ResearchAgent_1.ResearchAgent(i, agentDeps, strategy));
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* イベントリスナーを登録
|
|
45
|
+
*/
|
|
46
|
+
on(listener) {
|
|
47
|
+
this.eventEmitter.on('event', listener);
|
|
48
|
+
return this;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* イベントリスナーを解除
|
|
52
|
+
*/
|
|
53
|
+
off(listener) {
|
|
54
|
+
this.eventEmitter.off('event', listener);
|
|
55
|
+
return this;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* イベントを発行
|
|
59
|
+
*/
|
|
60
|
+
emit(event) {
|
|
61
|
+
this.eventEmitter.emit('event', event);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* 反復合議型リサーチを実行
|
|
65
|
+
* @requirement REQ-1.2.0-WFL-001, REQ-1.2.0-WFL-004, REQ-1.2.0-WFL-005
|
|
66
|
+
* @param topic リサーチトピック
|
|
67
|
+
* @param options オプション設定
|
|
68
|
+
* @returns 最終結果
|
|
69
|
+
*/
|
|
70
|
+
async research(topic, options) {
|
|
71
|
+
const startedAt = new Date().toISOString();
|
|
72
|
+
const config = { ...this.config, ...options, topic };
|
|
73
|
+
this.emit({ type: 'researchStarted', topic, config });
|
|
74
|
+
const iterations = [];
|
|
75
|
+
let currentContext = {
|
|
76
|
+
iteration: 1,
|
|
77
|
+
topic,
|
|
78
|
+
previousConsensus: null,
|
|
79
|
+
previousScore: null,
|
|
80
|
+
unresolvedQuestions: [],
|
|
81
|
+
coveredSources: [],
|
|
82
|
+
areasToDeepen: [],
|
|
83
|
+
isInitial: true,
|
|
84
|
+
};
|
|
85
|
+
try {
|
|
86
|
+
for (let i = 1; i <= config.iterationCount; i++) {
|
|
87
|
+
currentContext.iteration = i;
|
|
88
|
+
currentContext.isInitial = i === 1;
|
|
89
|
+
const iterationResult = await this.runIteration(currentContext);
|
|
90
|
+
iterations.push(iterationResult);
|
|
91
|
+
// 早期終了判定(AC4: 2連続で改善<5%)
|
|
92
|
+
if (i >= 2 && this.shouldTerminateEarly(iterations)) {
|
|
93
|
+
break;
|
|
94
|
+
}
|
|
95
|
+
// 次のコンテキストを構築
|
|
96
|
+
const selectedScore = iterationResult.scores.find((s) => s.reportId === iterationResult.selectedReportId);
|
|
97
|
+
if (selectedScore) {
|
|
98
|
+
currentContext = this.buildNextContext(currentContext, iterationResult.consensusReport, selectedScore);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
const finalReport = this.generateFinalReport(iterations);
|
|
102
|
+
const finalIteration = iterations[iterations.length - 1];
|
|
103
|
+
const finalScore = finalIteration.scores.find((s) => s.reportId === finalIteration.selectedReportId) ?? finalIteration.scores[0];
|
|
104
|
+
const result = {
|
|
105
|
+
finalReport,
|
|
106
|
+
iterations,
|
|
107
|
+
totalDurationMs: Date.now() - new Date(startedAt).getTime(),
|
|
108
|
+
totalAgentRuns: iterations.length * config.agentCount,
|
|
109
|
+
finalScore,
|
|
110
|
+
metadata: {
|
|
111
|
+
topic,
|
|
112
|
+
startedAt,
|
|
113
|
+
completedAt: new Date().toISOString(),
|
|
114
|
+
config,
|
|
115
|
+
},
|
|
116
|
+
};
|
|
117
|
+
this.emit({ type: 'researchCompleted', result });
|
|
118
|
+
return result;
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
this.emit({ type: 'researchFailed', error: error });
|
|
122
|
+
throw error;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* 1イテレーションを実行
|
|
127
|
+
* @requirement REQ-1.2.0-WFL-001, REQ-1.2.0-WFL-002, REQ-1.2.0-WFL-003
|
|
128
|
+
*/
|
|
129
|
+
async runIteration(context) {
|
|
130
|
+
const startTime = Date.now();
|
|
131
|
+
this.emit({ type: 'iterationStarted', iteration: context.iteration, context });
|
|
132
|
+
// 1. エージェント並列実行
|
|
133
|
+
const agentReports = await this.executeAgentsInParallel(context);
|
|
134
|
+
// 2. スコアリング
|
|
135
|
+
const scores = this.scorer.scoreReports(agentReports);
|
|
136
|
+
this.emit({ type: 'scoringCompleted', iteration: context.iteration, scores });
|
|
137
|
+
// 3. コンセンサス選択
|
|
138
|
+
const selection = this.selector.select(scores);
|
|
139
|
+
const selectedReport = agentReports.find((r) => r.reportId === selection.selectedReportId);
|
|
140
|
+
if (!selectedReport) {
|
|
141
|
+
throw new types_1.ConsensusResearchError(types_1.ConsensusResearchErrorCode.SELECTION_ERROR, 'Selected report not found');
|
|
142
|
+
}
|
|
143
|
+
this.emit({
|
|
144
|
+
type: 'consensusSelected',
|
|
145
|
+
iteration: context.iteration,
|
|
146
|
+
selectedAgentId: selectedReport.agentId,
|
|
147
|
+
reason: selection.reason,
|
|
148
|
+
});
|
|
149
|
+
const result = {
|
|
150
|
+
iteration: context.iteration,
|
|
151
|
+
agentReports,
|
|
152
|
+
scores,
|
|
153
|
+
consensusReport: selectedReport.content,
|
|
154
|
+
selectionReason: selection.reason,
|
|
155
|
+
durationMs: Date.now() - startTime,
|
|
156
|
+
selectedReportId: selection.selectedReportId,
|
|
157
|
+
};
|
|
158
|
+
this.emit({
|
|
159
|
+
type: 'iterationCompleted',
|
|
160
|
+
iteration: context.iteration,
|
|
161
|
+
durationMs: result.durationMs,
|
|
162
|
+
});
|
|
163
|
+
return result;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* エージェントを並列実行
|
|
167
|
+
* @requirement REQ-1.2.0-WFL-001, REQ-1.2.0-ERR-001, REQ-1.2.0-ERR-002
|
|
168
|
+
*/
|
|
169
|
+
async executeAgentsInParallel(context) {
|
|
170
|
+
const agentPromises = this.agents.map(async (agent) => {
|
|
171
|
+
const agentId = agent.agentId;
|
|
172
|
+
this.emit({
|
|
173
|
+
type: 'agentStarted',
|
|
174
|
+
iteration: context.iteration,
|
|
175
|
+
agentId,
|
|
176
|
+
strategy: agent.strategy,
|
|
177
|
+
});
|
|
178
|
+
const startTime = Date.now();
|
|
179
|
+
try {
|
|
180
|
+
// タイムアウト付き実行
|
|
181
|
+
const report = await Promise.race([
|
|
182
|
+
agent.execute(context),
|
|
183
|
+
this.createTimeout(this.config.agentTimeoutMs, agentId),
|
|
184
|
+
]);
|
|
185
|
+
this.emit({
|
|
186
|
+
type: 'agentCompleted',
|
|
187
|
+
iteration: context.iteration,
|
|
188
|
+
agentId,
|
|
189
|
+
durationMs: Date.now() - startTime,
|
|
190
|
+
success: true,
|
|
191
|
+
});
|
|
192
|
+
return report;
|
|
193
|
+
}
|
|
194
|
+
catch (error) {
|
|
195
|
+
this.emit({
|
|
196
|
+
type: 'agentCompleted',
|
|
197
|
+
iteration: context.iteration,
|
|
198
|
+
agentId,
|
|
199
|
+
durationMs: Date.now() - startTime,
|
|
200
|
+
success: false,
|
|
201
|
+
});
|
|
202
|
+
console.error(`Agent ${agentId} failed:`, error);
|
|
203
|
+
return null;
|
|
204
|
+
}
|
|
205
|
+
});
|
|
206
|
+
// Promise.allSettledで全エージェントの完了を待つ
|
|
207
|
+
const results = await Promise.allSettled(agentPromises);
|
|
208
|
+
// 成功したレポートのみ抽出
|
|
209
|
+
const successfulReports = results
|
|
210
|
+
.filter((r) => r.status === 'fulfilled')
|
|
211
|
+
.map((r) => r.value)
|
|
212
|
+
.filter((r) => r !== null);
|
|
213
|
+
// 障害耐性チェック(AC3: 過半数失敗時はエラー)
|
|
214
|
+
if (successfulReports.length < Math.ceil(this.agents.length / 2)) {
|
|
215
|
+
throw new types_1.ConsensusResearchError(types_1.ConsensusResearchErrorCode.MAJORITY_FAILURE, `Majority of agents failed (${successfulReports.length}/${this.agents.length})`);
|
|
216
|
+
}
|
|
217
|
+
return successfulReports;
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* タイムアウトPromiseを作成
|
|
221
|
+
*/
|
|
222
|
+
createTimeout(ms, agentId) {
|
|
223
|
+
return new Promise((_, reject) => {
|
|
224
|
+
setTimeout(() => {
|
|
225
|
+
reject(new types_1.ConsensusResearchError(types_1.ConsensusResearchErrorCode.AGENT_TIMEOUT, `Agent ${agentId} timed out after ${ms}ms`));
|
|
226
|
+
}, ms);
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* 早期終了を判定
|
|
231
|
+
* @requirement REQ-1.2.0-WFL-004 (AC4: 2連続でスコア改善<5%の場合は早期終了)
|
|
232
|
+
*/
|
|
233
|
+
shouldTerminateEarly(iterations) {
|
|
234
|
+
if (iterations.length < 2)
|
|
235
|
+
return false;
|
|
236
|
+
// 直近2イテレーションのスコア改善率を計算
|
|
237
|
+
const current = iterations[iterations.length - 1];
|
|
238
|
+
const previous = iterations[iterations.length - 2];
|
|
239
|
+
const currentBestScore = Math.max(...current.scores.map((s) => s.totalScore));
|
|
240
|
+
const previousBestScore = Math.max(...previous.scores.map((s) => s.totalScore));
|
|
241
|
+
// 改善率 = (今回 - 前回) / 前回 * 100
|
|
242
|
+
const improvementRate = previousBestScore > 0
|
|
243
|
+
? ((currentBestScore - previousBestScore) / previousBestScore) * 100
|
|
244
|
+
: 0;
|
|
245
|
+
// 5%未満の改善の場合
|
|
246
|
+
if (improvementRate < 5) {
|
|
247
|
+
// さらに前のイテレーションも確認(2連続判定)
|
|
248
|
+
if (iterations.length >= 3) {
|
|
249
|
+
const beforePrevious = iterations[iterations.length - 3];
|
|
250
|
+
const beforePreviousBestScore = Math.max(...beforePrevious.scores.map((s) => s.totalScore));
|
|
251
|
+
const previousImprovementRate = beforePreviousBestScore > 0
|
|
252
|
+
? ((previousBestScore - beforePreviousBestScore) / beforePreviousBestScore) * 100
|
|
253
|
+
: 0;
|
|
254
|
+
// 2連続で5%未満なら早期終了
|
|
255
|
+
return previousImprovementRate < 5;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
return false;
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* 次イテレーションのコンテキストを構築
|
|
262
|
+
* @requirement REQ-1.2.0-WFL-001, REQ-1.2.0-WFL-003
|
|
263
|
+
*/
|
|
264
|
+
buildNextContext(current, consensusReport, consensusScore) {
|
|
265
|
+
// 1. カバー済みソースを更新
|
|
266
|
+
const newCoveredSources = [
|
|
267
|
+
...current.coveredSources,
|
|
268
|
+
...(consensusScore.sourceUrls || []),
|
|
269
|
+
];
|
|
270
|
+
// 2. 未解決の質問を抽出(レポート内の「?」や「要検証」から)
|
|
271
|
+
const unresolvedPatterns = [
|
|
272
|
+
/([^。]+\?)/g, // 疑問文
|
|
273
|
+
/\[要検証\]([^。]+)/g, // 要検証ラベル
|
|
274
|
+
/今後の課題[::]([^。]+)/g, // 課題セクション
|
|
275
|
+
];
|
|
276
|
+
const unresolvedQuestions = [];
|
|
277
|
+
for (const pattern of unresolvedPatterns) {
|
|
278
|
+
const matches = Array.from(consensusReport.matchAll(pattern));
|
|
279
|
+
for (const match of matches) {
|
|
280
|
+
const captured = match[1];
|
|
281
|
+
if (captured) {
|
|
282
|
+
unresolvedQuestions.push(captured.trim());
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
// 3. 深掘りエリアを特定(スコアの低い側面)
|
|
287
|
+
const areasToDeepen = [];
|
|
288
|
+
if (consensusScore.consistencyScore < 0.7) {
|
|
289
|
+
areasToDeepen.push('情報の整合性確認');
|
|
290
|
+
}
|
|
291
|
+
if (consensusScore.reliabilityScore < 0.7) {
|
|
292
|
+
areasToDeepen.push('信頼性の高いソースからの検証');
|
|
293
|
+
}
|
|
294
|
+
if (consensusScore.coverageScore < 0.7) {
|
|
295
|
+
areasToDeepen.push('調査範囲の拡大');
|
|
296
|
+
}
|
|
297
|
+
return {
|
|
298
|
+
iteration: current.iteration + 1,
|
|
299
|
+
topic: current.topic,
|
|
300
|
+
previousConsensus: consensusReport,
|
|
301
|
+
previousScore: consensusScore,
|
|
302
|
+
unresolvedQuestions: unresolvedQuestions.slice(0, 5), // 最大5件
|
|
303
|
+
coveredSources: Array.from(new Set(newCoveredSources)), // 重複除去
|
|
304
|
+
areasToDeepen,
|
|
305
|
+
isInitial: false,
|
|
306
|
+
};
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* 最終レポートを生成
|
|
310
|
+
* @requirement REQ-1.2.0-WFL-005
|
|
311
|
+
*/
|
|
312
|
+
generateFinalReport(iterations) {
|
|
313
|
+
const finalIteration = iterations[iterations.length - 1];
|
|
314
|
+
const consensusReport = finalIteration.consensusReport;
|
|
315
|
+
// エグゼクティブサマリーを生成
|
|
316
|
+
const executiveSummary = this.generateExecutiveSummary(iterations);
|
|
317
|
+
// 調査プロセスの要約
|
|
318
|
+
const processOverview = iterations
|
|
319
|
+
.map((iter, idx) => {
|
|
320
|
+
const bestScore = Math.max(...iter.scores.map((s) => s.totalScore));
|
|
321
|
+
return `- **イテレーション ${idx + 1}**: スコア ${(bestScore * 100).toFixed(1)}% (${iter.selectionReason})`;
|
|
322
|
+
})
|
|
323
|
+
.join('\n');
|
|
324
|
+
// 全イテレーションで発見された主要な知見を統合
|
|
325
|
+
const keyFindings = this.extractKeyFindings(iterations);
|
|
326
|
+
// 参照ソース一覧
|
|
327
|
+
const allSources = iterations.flatMap((iter) => iter.agentReports.flatMap((r) => r.sources));
|
|
328
|
+
const uniqueSourcesMap = new Map(allSources.map((s) => [s.url, s]));
|
|
329
|
+
const uniqueSources = Array.from(uniqueSourcesMap.values());
|
|
330
|
+
const sourceList = uniqueSources
|
|
331
|
+
.sort((a, b) => (b.reliabilityScore || 0) - (a.reliabilityScore || 0))
|
|
332
|
+
.slice(0, 20)
|
|
333
|
+
.map((s) => `- [${s.title}](${s.url}) (信頼度: ${((s.reliabilityScore || 0) * 100).toFixed(0)}%)`)
|
|
334
|
+
.join('\n');
|
|
335
|
+
const finalScore = Math.max(...finalIteration.scores.map((s) => s.totalScore));
|
|
336
|
+
return `# 調査レポート
|
|
337
|
+
|
|
338
|
+
## エグゼクティブサマリー
|
|
339
|
+
|
|
340
|
+
${executiveSummary}
|
|
341
|
+
|
|
342
|
+
## 調査プロセス
|
|
343
|
+
|
|
344
|
+
${processOverview}
|
|
345
|
+
|
|
346
|
+
## 詳細レポート
|
|
347
|
+
|
|
348
|
+
${consensusReport}
|
|
349
|
+
|
|
350
|
+
## 主要な発見
|
|
351
|
+
|
|
352
|
+
${keyFindings}
|
|
353
|
+
|
|
354
|
+
## 参照ソース
|
|
355
|
+
|
|
356
|
+
${sourceList}
|
|
357
|
+
|
|
358
|
+
---
|
|
359
|
+
*Generated by KATASHIRO Consensus Research Engine v1.2.0*
|
|
360
|
+
*Total Iterations: ${iterations.length}*
|
|
361
|
+
*Final Score: ${(finalScore * 100).toFixed(1)}%*
|
|
362
|
+
`;
|
|
363
|
+
}
|
|
364
|
+
/**
|
|
365
|
+
* エグゼクティブサマリーを生成
|
|
366
|
+
*/
|
|
367
|
+
generateExecutiveSummary(iterations) {
|
|
368
|
+
const finalIteration = iterations[iterations.length - 1];
|
|
369
|
+
const initialIteration = iterations[0];
|
|
370
|
+
const finalScore = Math.max(...finalIteration.scores.map((s) => s.totalScore));
|
|
371
|
+
const initialScore = Math.max(...initialIteration.scores.map((s) => s.totalScore));
|
|
372
|
+
const improvement = initialScore > 0
|
|
373
|
+
? (((finalScore - initialScore) / initialScore) * 100).toFixed(1)
|
|
374
|
+
: '0';
|
|
375
|
+
return (`本調査は${iterations.length}回の反復合議プロセスを経て完了しました。` +
|
|
376
|
+
`初回スコア${(initialScore * 100).toFixed(1)}%から最終スコア${(finalScore * 100).toFixed(1)}%まで、` +
|
|
377
|
+
`${improvement}%の品質向上を達成しました。`);
|
|
378
|
+
}
|
|
379
|
+
/**
|
|
380
|
+
* 全イテレーションから主要な発見を抽出
|
|
381
|
+
*/
|
|
382
|
+
extractKeyFindings(iterations) {
|
|
383
|
+
const findings = [];
|
|
384
|
+
for (const iter of iterations) {
|
|
385
|
+
// 各イテレーションのコンセンサスレポートから「主要な発見」セクションを抽出
|
|
386
|
+
const findingsMatch = iter.consensusReport.match(/## 主要な発見[\s\S]*?(?=##|$)/);
|
|
387
|
+
if (findingsMatch) {
|
|
388
|
+
findings.push(findingsMatch[0].replace(/## 主要な発見\s*/, '').trim());
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
// 重複を除去して統合
|
|
392
|
+
const uniqueFindings = Array.from(new Set(findings.flatMap((f) => f.split('\n').filter((l) => l.trim()))));
|
|
393
|
+
return uniqueFindings.slice(0, 10).join('\n');
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
exports.ConsensusResearchEngine = ConsensusResearchEngine;
|
|
397
|
+
//# sourceMappingURL=ConsensusResearchEngine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConsensusResearchEngine.js","sourceRoot":"","sources":["../../src/consensus/ConsensusResearchEngine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* KATASHIRO v1.2.0 - ConsensusSelector
|
|
3
|
+
* 最良レポートの選択ロジックを担当
|
|
4
|
+
* @module @nahisaho/katashiro-orchestrator/consensus
|
|
5
|
+
* @version 1.2.0
|
|
6
|
+
*/
|
|
7
|
+
import { ReportScore, ConsensusSelection } from './types';
|
|
8
|
+
/**
|
|
9
|
+
* コンセンサスセレクター
|
|
10
|
+
* @requirement REQ-1.2.0-WFL-003
|
|
11
|
+
*/
|
|
12
|
+
export declare class ConsensusSelector {
|
|
13
|
+
/**
|
|
14
|
+
* 最良レポートを選択
|
|
15
|
+
* @requirement REQ-1.2.0-WFL-003
|
|
16
|
+
* @param scores スコア配列
|
|
17
|
+
* @returns 選択結果
|
|
18
|
+
*/
|
|
19
|
+
select(scores: ReportScore[]): ConsensusSelection;
|
|
20
|
+
/**
|
|
21
|
+
* 選択理由を生成
|
|
22
|
+
* @param selected 選択されたスコア
|
|
23
|
+
* @param others 他のスコア
|
|
24
|
+
* @returns 選択理由
|
|
25
|
+
*/
|
|
26
|
+
private generateReason;
|
|
27
|
+
/**
|
|
28
|
+
* 選択結果の詳細分析を生成
|
|
29
|
+
* @param scores 全スコア
|
|
30
|
+
* @param selection 選択結果
|
|
31
|
+
* @returns 詳細分析
|
|
32
|
+
*/
|
|
33
|
+
analyzeSelection(scores: ReportScore[], selection: ConsensusSelection): SelectionAnalysis;
|
|
34
|
+
/**
|
|
35
|
+
* 選択の信頼度を計算
|
|
36
|
+
*/
|
|
37
|
+
private calculateSelectionConfidence;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* 選択分析結果
|
|
41
|
+
*/
|
|
42
|
+
export interface SelectionAnalysis {
|
|
43
|
+
/** 選択されたレポートID */
|
|
44
|
+
selectedReportId: string;
|
|
45
|
+
/** 選択されたスコア */
|
|
46
|
+
selectedScore: ReportScore;
|
|
47
|
+
/** 他との比較 */
|
|
48
|
+
comparison: {
|
|
49
|
+
totalScoreDiff: number;
|
|
50
|
+
consistencyDiff: number;
|
|
51
|
+
reliabilityDiff: number;
|
|
52
|
+
coverageDiff: number;
|
|
53
|
+
};
|
|
54
|
+
/** ランキング */
|
|
55
|
+
ranking: Array<{
|
|
56
|
+
reportId: string;
|
|
57
|
+
rank: number;
|
|
58
|
+
score: number;
|
|
59
|
+
}>;
|
|
60
|
+
/** 選択の信頼度 */
|
|
61
|
+
confidence: number;
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=ConsensusSelector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConsensusSelector.d.ts","sourceRoot":"","sources":["../../src/consensus/ConsensusSelector.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,WAAW,EACX,kBAAkB,EAGnB,MAAM,SAAS,CAAC;AAEjB;;;GAGG;AACH,qBAAa,iBAAiB;IAC5B;;;;;OAKG;IACH,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,kBAAkB;IAuCjD;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IActB;;;;;OAKG;IACH,gBAAgB,CACd,MAAM,EAAE,WAAW,EAAE,EACrB,SAAS,EAAE,kBAAkB,GAC5B,iBAAiB;IAmCpB;;OAEG;IACH,OAAO,CAAC,4BAA4B;CAiBrC;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,kBAAkB;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe;IACf,aAAa,EAAE,WAAW,CAAC;IAC3B,YAAY;IACZ,UAAU,EAAE;QACV,cAAc,EAAE,MAAM,CAAC;QACvB,eAAe,EAAE,MAAM,CAAC;QACxB,eAAe,EAAE,MAAM,CAAC;QACxB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,YAAY;IACZ,OAAO,EAAE,KAAK,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;KACf,CAAC,CAAC;IACH,aAAa;IACb,UAAU,EAAE,MAAM,CAAC;CACpB"}
|