@nahisaho/katashiro-collector 0.2.2 → 0.2.4
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/browser/ActionExecutor.d.ts +85 -0
- package/dist/browser/ActionExecutor.d.ts.map +1 -0
- package/dist/browser/ActionExecutor.js +171 -0
- package/dist/browser/ActionExecutor.js.map +1 -0
- package/dist/browser/BrowserAutomation.d.ts +147 -0
- package/dist/browser/BrowserAutomation.d.ts.map +1 -0
- package/dist/browser/BrowserAutomation.js +463 -0
- package/dist/browser/BrowserAutomation.js.map +1 -0
- package/dist/browser/ContentExtractor.d.ts +54 -0
- package/dist/browser/ContentExtractor.d.ts.map +1 -0
- package/dist/browser/ContentExtractor.js +159 -0
- package/dist/browser/ContentExtractor.js.map +1 -0
- package/dist/browser/SessionManager.d.ts +67 -0
- package/dist/browser/SessionManager.d.ts.map +1 -0
- package/dist/browser/SessionManager.js +173 -0
- package/dist/browser/SessionManager.js.map +1 -0
- package/dist/browser/index.d.ts +17 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +17 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/types.d.ts +361 -0
- package/dist/browser/types.d.ts.map +1 -0
- package/dist/browser/types.js +23 -0
- package/dist/browser/types.js.map +1 -0
- package/dist/document/DocumentParser.d.ts +91 -0
- package/dist/document/DocumentParser.d.ts.map +1 -0
- package/dist/document/DocumentParser.js +234 -0
- package/dist/document/DocumentParser.js.map +1 -0
- package/dist/document/index.d.ts +11 -0
- package/dist/document/index.d.ts.map +1 -0
- package/dist/document/index.js +10 -0
- package/dist/document/index.js.map +1 -0
- package/dist/document/parsers/DOCXParser.d.ts +63 -0
- package/dist/document/parsers/DOCXParser.d.ts.map +1 -0
- package/dist/document/parsers/DOCXParser.js +362 -0
- package/dist/document/parsers/DOCXParser.js.map +1 -0
- package/dist/document/parsers/PDFParser.d.ts +60 -0
- package/dist/document/parsers/PDFParser.d.ts.map +1 -0
- package/dist/document/parsers/PDFParser.js +338 -0
- package/dist/document/parsers/PDFParser.js.map +1 -0
- package/dist/document/parsers/XLSXParser.d.ts +55 -0
- package/dist/document/parsers/XLSXParser.d.ts.map +1 -0
- package/dist/document/parsers/XLSXParser.js +314 -0
- package/dist/document/parsers/XLSXParser.js.map +1 -0
- package/dist/document/parsers/index.d.ts +10 -0
- package/dist/document/parsers/index.d.ts.map +1 -0
- package/dist/document/parsers/index.js +10 -0
- package/dist/document/parsers/index.js.map +1 -0
- package/dist/document/types.d.ts +251 -0
- package/dist/document/types.d.ts.map +1 -0
- package/dist/document/types.js +13 -0
- package/dist/document/types.js.map +1 -0
- package/dist/index.d.ts +7 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -2
- package/dist/index.js.map +1 -1
- package/dist/research/CoverageAnalyzer.d.ts +50 -0
- package/dist/research/CoverageAnalyzer.d.ts.map +1 -0
- package/dist/research/CoverageAnalyzer.js +169 -0
- package/dist/research/CoverageAnalyzer.js.map +1 -0
- package/dist/research/QueryPlanner.d.ts +57 -0
- package/dist/research/QueryPlanner.d.ts.map +1 -0
- package/dist/research/QueryPlanner.js +102 -0
- package/dist/research/QueryPlanner.js.map +1 -0
- package/dist/research/ResultAggregator.d.ts +39 -0
- package/dist/research/ResultAggregator.d.ts.map +1 -0
- package/dist/research/ResultAggregator.js +85 -0
- package/dist/research/ResultAggregator.js.map +1 -0
- package/dist/research/WideResearchEngine.d.ts +110 -0
- package/dist/research/WideResearchEngine.d.ts.map +1 -0
- package/dist/research/WideResearchEngine.js +330 -0
- package/dist/research/WideResearchEngine.js.map +1 -0
- package/dist/research/agents/AcademicSearchAgent.d.ts +57 -0
- package/dist/research/agents/AcademicSearchAgent.d.ts.map +1 -0
- package/dist/research/agents/AcademicSearchAgent.js +180 -0
- package/dist/research/agents/AcademicSearchAgent.js.map +1 -0
- package/dist/research/agents/EncyclopediaAgent.d.ts +49 -0
- package/dist/research/agents/EncyclopediaAgent.d.ts.map +1 -0
- package/dist/research/agents/EncyclopediaAgent.js +153 -0
- package/dist/research/agents/EncyclopediaAgent.js.map +1 -0
- package/dist/research/agents/NewsSearchAgent.d.ts +38 -0
- package/dist/research/agents/NewsSearchAgent.d.ts.map +1 -0
- package/dist/research/agents/NewsSearchAgent.js +146 -0
- package/dist/research/agents/NewsSearchAgent.js.map +1 -0
- package/dist/research/agents/WebSearchAgent.d.ts +45 -0
- package/dist/research/agents/WebSearchAgent.d.ts.map +1 -0
- package/dist/research/agents/WebSearchAgent.js +135 -0
- package/dist/research/agents/WebSearchAgent.js.map +1 -0
- package/dist/research/agents/index.d.ts +13 -0
- package/dist/research/agents/index.d.ts.map +1 -0
- package/dist/research/agents/index.js +12 -0
- package/dist/research/agents/index.js.map +1 -0
- package/dist/research/agents/types.d.ts +60 -0
- package/dist/research/agents/types.d.ts.map +1 -0
- package/dist/research/agents/types.js +9 -0
- package/dist/research/agents/types.js.map +1 -0
- package/dist/research/index.d.ts +16 -0
- package/dist/research/index.d.ts.map +1 -0
- package/dist/research/index.js +17 -0
- package/dist/research/index.js.map +1 -0
- package/dist/research/types.d.ts +206 -0
- package/dist/research/types.d.ts.map +1 -0
- package/dist/research/types.js +33 -0
- package/dist/research/types.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WideResearchEngine - 広域リサーチエンジン
|
|
3
|
+
*
|
|
4
|
+
* 複数の検索エージェントを並列実行し、多様なソースから情報を収集・統合する。
|
|
5
|
+
*
|
|
6
|
+
* @requirement REQ-COLLECT-008
|
|
7
|
+
* @design DES-COLLECT-008
|
|
8
|
+
* @task TASK-002
|
|
9
|
+
*/
|
|
10
|
+
import { type Result } from '@nahisaho/katashiro-core';
|
|
11
|
+
import { EventEmitter } from 'events';
|
|
12
|
+
import type { WideResearchQuery, WideResearchResult, ResearchError, SourceType, AgentConfig } from './types.js';
|
|
13
|
+
import type { ISearchAgent } from './agents/types.js';
|
|
14
|
+
/**
|
|
15
|
+
* Wide Research Engine
|
|
16
|
+
*
|
|
17
|
+
* 複数のソースから並列に情報を収集し、統合された結果を返す。
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```typescript
|
|
21
|
+
* const engine = new WideResearchEngine();
|
|
22
|
+
*
|
|
23
|
+
* // 基本的な使用
|
|
24
|
+
* const result = await engine.research({
|
|
25
|
+
* topic: 'AI ethics in healthcare',
|
|
26
|
+
* depth: 'medium',
|
|
27
|
+
* });
|
|
28
|
+
*
|
|
29
|
+
* if (isOk(result)) {
|
|
30
|
+
* console.log(`Found ${result.value.findings.length} results`);
|
|
31
|
+
* console.log(`Coverage: ${result.value.coverage.coverageRate * 100}%`);
|
|
32
|
+
* }
|
|
33
|
+
*
|
|
34
|
+
* // 特定ソースのみ使用
|
|
35
|
+
* const newsResult = await engine.research({
|
|
36
|
+
* topic: 'latest AI regulations',
|
|
37
|
+
* depth: 'shallow',
|
|
38
|
+
* sources: ['news'],
|
|
39
|
+
* dateRange: { start: new Date('2025-01-01') },
|
|
40
|
+
* });
|
|
41
|
+
*
|
|
42
|
+
* // イベントリスナーで進捗を監視
|
|
43
|
+
* engine.on('agentStarted', (agent) => console.log(`Started: ${agent}`));
|
|
44
|
+
* engine.on('agentCompleted', (agent, count) => console.log(`Completed: ${agent} (${count} results)`));
|
|
45
|
+
* engine.on('agentFailed', (agent, error) => console.error(`Failed: ${agent}: ${error}`));
|
|
46
|
+
* ```
|
|
47
|
+
*
|
|
48
|
+
* @events
|
|
49
|
+
* - `agentStarted(type: SourceType)` - エージェント開始時
|
|
50
|
+
* - `agentCompleted(type: SourceType, count: number)` - エージェント完了時
|
|
51
|
+
* - `agentFailed(type: SourceType, error: string)` - エージェント失敗時
|
|
52
|
+
* - `totalTimeout()` - 全体タイムアウト発生時
|
|
53
|
+
*/
|
|
54
|
+
export declare class WideResearchEngine extends EventEmitter {
|
|
55
|
+
private agents;
|
|
56
|
+
private agentConfigs;
|
|
57
|
+
private queryPlanner;
|
|
58
|
+
private resultAggregator;
|
|
59
|
+
private coverageAnalyzer;
|
|
60
|
+
constructor(configs?: Partial<Record<SourceType, Partial<AgentConfig>>>);
|
|
61
|
+
/**
|
|
62
|
+
* デフォルトエージェントを登録
|
|
63
|
+
*/
|
|
64
|
+
private registerDefaultAgents;
|
|
65
|
+
/**
|
|
66
|
+
* カスタムエージェントを登録
|
|
67
|
+
*/
|
|
68
|
+
registerAgent(agent: ISearchAgent): void;
|
|
69
|
+
/**
|
|
70
|
+
* エージェント設定を更新
|
|
71
|
+
*/
|
|
72
|
+
configure(configs: Partial<Record<SourceType, Partial<AgentConfig>>>): void;
|
|
73
|
+
/**
|
|
74
|
+
* 登録済みエージェント一覧を取得
|
|
75
|
+
*/
|
|
76
|
+
getAvailableAgents(): SourceType[];
|
|
77
|
+
/**
|
|
78
|
+
* Wide Research を実行
|
|
79
|
+
*/
|
|
80
|
+
research(query: WideResearchQuery): Promise<Result<WideResearchResult, ResearchError>>;
|
|
81
|
+
/**
|
|
82
|
+
* 設定をマージ
|
|
83
|
+
*/
|
|
84
|
+
private mergeConfig;
|
|
85
|
+
/**
|
|
86
|
+
* 使用するエージェントを選択
|
|
87
|
+
*/
|
|
88
|
+
private selectAgents;
|
|
89
|
+
/**
|
|
90
|
+
* 並列検索を実行
|
|
91
|
+
*/
|
|
92
|
+
private executeParallelSearch;
|
|
93
|
+
/**
|
|
94
|
+
* バッチに分割
|
|
95
|
+
*/
|
|
96
|
+
private createBatches;
|
|
97
|
+
/**
|
|
98
|
+
* ソース情報を生成
|
|
99
|
+
*/
|
|
100
|
+
private buildSourceInfos;
|
|
101
|
+
/**
|
|
102
|
+
* 統計情報を計算
|
|
103
|
+
*/
|
|
104
|
+
private calculateStatistics;
|
|
105
|
+
/**
|
|
106
|
+
* 完了ステータスを決定
|
|
107
|
+
*/
|
|
108
|
+
private determineCompletionStatus;
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=WideResearchEngine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WideResearchEngine.d.ts","sourceRoot":"","sources":["../../src/research/WideResearchEngine.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EAIb,UAAU,EACV,WAAW,EAEZ,MAAM,YAAY,CAAC;AAEpB,OAAO,KAAK,EAAE,YAAY,EAA2C,MAAM,mBAAmB,CAAC;AAS/F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,qBAAa,kBAAmB,SAAQ,YAAY;IAClD,OAAO,CAAC,MAAM,CAAgC;IAC9C,OAAO,CAAC,YAAY,CAA+B;IACnD,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,gBAAgB,CAAmB;gBAE/B,OAAO,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;IAevE;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAiB7B;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IAIxC;;OAEG;IACH,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI;IAW3E;;OAEG;IACH,kBAAkB,IAAI,UAAU,EAAE;IAIlC;;OAEG;IACG,QAAQ,CACZ,KAAK,EAAE,iBAAiB,GACvB,OAAO,CAAC,MAAM,CAAC,kBAAkB,EAAE,aAAa,CAAC,CAAC;IAsFrD;;OAEG;IACH,OAAO,CAAC,WAAW;IAcnB;;OAEG;IACH,OAAO,CAAC,YAAY;IAepB;;OAEG;YACW,qBAAqB;IA4EnC;;OAEG;IACH,OAAO,CAAC,aAAa;IAQrB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAexB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA8B3B;;OAEG;IACH,OAAO,CAAC,yBAAyB;CAYlC"}
|
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WideResearchEngine - 広域リサーチエンジン
|
|
3
|
+
*
|
|
4
|
+
* 複数の検索エージェントを並列実行し、多様なソースから情報を収集・統合する。
|
|
5
|
+
*
|
|
6
|
+
* @requirement REQ-COLLECT-008
|
|
7
|
+
* @design DES-COLLECT-008
|
|
8
|
+
* @task TASK-002
|
|
9
|
+
*/
|
|
10
|
+
import { ok, err } from '@nahisaho/katashiro-core';
|
|
11
|
+
import { EventEmitter } from 'events';
|
|
12
|
+
import { DEFAULT_RESEARCH_CONFIG } from './types.js';
|
|
13
|
+
import { WebSearchAgent } from './agents/WebSearchAgent.js';
|
|
14
|
+
import { NewsSearchAgent } from './agents/NewsSearchAgent.js';
|
|
15
|
+
import { AcademicSearchAgent } from './agents/AcademicSearchAgent.js';
|
|
16
|
+
import { EncyclopediaAgent } from './agents/EncyclopediaAgent.js';
|
|
17
|
+
import { ResultAggregator } from './ResultAggregator.js';
|
|
18
|
+
import { CoverageAnalyzer } from './CoverageAnalyzer.js';
|
|
19
|
+
import { QueryPlanner } from './QueryPlanner.js';
|
|
20
|
+
/**
|
|
21
|
+
* Wide Research Engine
|
|
22
|
+
*
|
|
23
|
+
* 複数のソースから並列に情報を収集し、統合された結果を返す。
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```typescript
|
|
27
|
+
* const engine = new WideResearchEngine();
|
|
28
|
+
*
|
|
29
|
+
* // 基本的な使用
|
|
30
|
+
* const result = await engine.research({
|
|
31
|
+
* topic: 'AI ethics in healthcare',
|
|
32
|
+
* depth: 'medium',
|
|
33
|
+
* });
|
|
34
|
+
*
|
|
35
|
+
* if (isOk(result)) {
|
|
36
|
+
* console.log(`Found ${result.value.findings.length} results`);
|
|
37
|
+
* console.log(`Coverage: ${result.value.coverage.coverageRate * 100}%`);
|
|
38
|
+
* }
|
|
39
|
+
*
|
|
40
|
+
* // 特定ソースのみ使用
|
|
41
|
+
* const newsResult = await engine.research({
|
|
42
|
+
* topic: 'latest AI regulations',
|
|
43
|
+
* depth: 'shallow',
|
|
44
|
+
* sources: ['news'],
|
|
45
|
+
* dateRange: { start: new Date('2025-01-01') },
|
|
46
|
+
* });
|
|
47
|
+
*
|
|
48
|
+
* // イベントリスナーで進捗を監視
|
|
49
|
+
* engine.on('agentStarted', (agent) => console.log(`Started: ${agent}`));
|
|
50
|
+
* engine.on('agentCompleted', (agent, count) => console.log(`Completed: ${agent} (${count} results)`));
|
|
51
|
+
* engine.on('agentFailed', (agent, error) => console.error(`Failed: ${agent}: ${error}`));
|
|
52
|
+
* ```
|
|
53
|
+
*
|
|
54
|
+
* @events
|
|
55
|
+
* - `agentStarted(type: SourceType)` - エージェント開始時
|
|
56
|
+
* - `agentCompleted(type: SourceType, count: number)` - エージェント完了時
|
|
57
|
+
* - `agentFailed(type: SourceType, error: string)` - エージェント失敗時
|
|
58
|
+
* - `totalTimeout()` - 全体タイムアウト発生時
|
|
59
|
+
*/
|
|
60
|
+
export class WideResearchEngine extends EventEmitter {
|
|
61
|
+
agents;
|
|
62
|
+
agentConfigs;
|
|
63
|
+
queryPlanner;
|
|
64
|
+
resultAggregator;
|
|
65
|
+
coverageAnalyzer;
|
|
66
|
+
constructor(configs) {
|
|
67
|
+
super();
|
|
68
|
+
this.agents = new Map();
|
|
69
|
+
this.agentConfigs = new Map();
|
|
70
|
+
this.queryPlanner = new QueryPlanner();
|
|
71
|
+
this.resultAggregator = new ResultAggregator();
|
|
72
|
+
this.coverageAnalyzer = new CoverageAnalyzer();
|
|
73
|
+
this.registerDefaultAgents();
|
|
74
|
+
if (configs) {
|
|
75
|
+
this.configure(configs);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* デフォルトエージェントを登録
|
|
80
|
+
*/
|
|
81
|
+
registerDefaultAgents() {
|
|
82
|
+
this.registerAgent(new WebSearchAgent());
|
|
83
|
+
this.registerAgent(new NewsSearchAgent());
|
|
84
|
+
this.registerAgent(new AcademicSearchAgent());
|
|
85
|
+
this.registerAgent(new EncyclopediaAgent());
|
|
86
|
+
// デフォルト設定
|
|
87
|
+
const defaultTypes = ['web', 'news', 'academic', 'encyclopedia'];
|
|
88
|
+
defaultTypes.forEach((type, index) => {
|
|
89
|
+
this.agentConfigs.set(type, {
|
|
90
|
+
type,
|
|
91
|
+
enabled: true,
|
|
92
|
+
priority: index + 1,
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* カスタムエージェントを登録
|
|
98
|
+
*/
|
|
99
|
+
registerAgent(agent) {
|
|
100
|
+
this.agents.set(agent.type, agent);
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* エージェント設定を更新
|
|
104
|
+
*/
|
|
105
|
+
configure(configs) {
|
|
106
|
+
for (const [type, config] of Object.entries(configs)) {
|
|
107
|
+
const existing = this.agentConfigs.get(type) || {
|
|
108
|
+
type: type,
|
|
109
|
+
enabled: true,
|
|
110
|
+
priority: 99,
|
|
111
|
+
};
|
|
112
|
+
this.agentConfigs.set(type, { ...existing, ...config });
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* 登録済みエージェント一覧を取得
|
|
117
|
+
*/
|
|
118
|
+
getAvailableAgents() {
|
|
119
|
+
return Array.from(this.agents.keys());
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Wide Research を実行
|
|
123
|
+
*/
|
|
124
|
+
async research(query) {
|
|
125
|
+
const startTime = Date.now();
|
|
126
|
+
// クエリ検証
|
|
127
|
+
if (!query.topic || query.topic.trim().length === 0) {
|
|
128
|
+
return err({
|
|
129
|
+
code: 'INVALID_QUERY',
|
|
130
|
+
message: 'Topic is required',
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
// 設定のマージ
|
|
134
|
+
const config = this.mergeConfig(query);
|
|
135
|
+
// 使用するエージェントを決定
|
|
136
|
+
const selectedAgents = this.selectAgents(config);
|
|
137
|
+
if (selectedAgents.length === 0) {
|
|
138
|
+
return err({
|
|
139
|
+
code: 'CONFIGURATION_ERROR',
|
|
140
|
+
message: 'No agents available for the specified sources',
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
// クエリ計画を作成
|
|
144
|
+
const queryPlan = this.queryPlanner.plan(query, selectedAgents, {
|
|
145
|
+
agentTimeout: config.agentTimeout,
|
|
146
|
+
maxResultsPerSource: config.maxResultsPerSource,
|
|
147
|
+
});
|
|
148
|
+
// 並列検索を実行
|
|
149
|
+
const agentResults = await this.executeParallelSearch(queryPlan, config.maxParallelAgents, config.totalTimeout);
|
|
150
|
+
// 全エージェント失敗チェック
|
|
151
|
+
const successfulResults = agentResults.filter((r) => r.result.status !== 'failed' && r.result.status !== 'timeout');
|
|
152
|
+
if (successfulResults.length === 0) {
|
|
153
|
+
return err({
|
|
154
|
+
code: 'ALL_SOURCES_FAILED',
|
|
155
|
+
message: 'All search agents failed',
|
|
156
|
+
details: agentResults.map((r) => ({
|
|
157
|
+
agent: r.agent.type,
|
|
158
|
+
error: r.result.error,
|
|
159
|
+
})),
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
// 結果を集約
|
|
163
|
+
const aggregated = this.resultAggregator.aggregate(agentResults.map((r) => r.result), query.topic);
|
|
164
|
+
// ソース情報を生成
|
|
165
|
+
const sourceInfos = this.buildSourceInfos(agentResults, queryPlan);
|
|
166
|
+
// カバレッジ分析
|
|
167
|
+
const coverage = this.coverageAnalyzer.analyze(agentResults, selectedAgents.map((a) => a.type));
|
|
168
|
+
// 統計情報を計算
|
|
169
|
+
const statistics = this.calculateStatistics(aggregated, agentResults);
|
|
170
|
+
// 完了ステータスを決定
|
|
171
|
+
const completionStatus = this.determineCompletionStatus(agentResults, selectedAgents.length);
|
|
172
|
+
return ok({
|
|
173
|
+
findings: aggregated,
|
|
174
|
+
sources: sourceInfos,
|
|
175
|
+
coverage,
|
|
176
|
+
completionStatus,
|
|
177
|
+
statistics,
|
|
178
|
+
processingTime: Date.now() - startTime,
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* 設定をマージ
|
|
183
|
+
*/
|
|
184
|
+
mergeConfig(query) {
|
|
185
|
+
const depthConfig = DEFAULT_RESEARCH_CONFIG.depthConfig[query.depth];
|
|
186
|
+
return {
|
|
187
|
+
maxParallelAgents: query.maxParallelAgents ?? DEFAULT_RESEARCH_CONFIG.maxParallelAgents,
|
|
188
|
+
agentTimeout: query.agentTimeout ?? DEFAULT_RESEARCH_CONFIG.agentTimeout,
|
|
189
|
+
totalTimeout: query.totalTimeout ?? DEFAULT_RESEARCH_CONFIG.totalTimeout,
|
|
190
|
+
maxResultsPerSource: query.maxResultsPerSource ?? depthConfig.maxResults,
|
|
191
|
+
sources: query.sources ?? depthConfig.sources,
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* 使用するエージェントを選択
|
|
196
|
+
*/
|
|
197
|
+
selectAgents(config) {
|
|
198
|
+
return config.sources
|
|
199
|
+
.map((type) => {
|
|
200
|
+
const agentConfig = this.agentConfigs.get(type);
|
|
201
|
+
if (!agentConfig?.enabled)
|
|
202
|
+
return null;
|
|
203
|
+
return this.agents.get(type) ?? null;
|
|
204
|
+
})
|
|
205
|
+
.filter((agent) => agent !== null)
|
|
206
|
+
.sort((a, b) => {
|
|
207
|
+
const aConfig = this.agentConfigs.get(a.type);
|
|
208
|
+
const bConfig = this.agentConfigs.get(b.type);
|
|
209
|
+
return (aConfig?.priority ?? 99) - (bConfig?.priority ?? 99);
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* 並列検索を実行
|
|
214
|
+
*/
|
|
215
|
+
async executeParallelSearch(queryPlan, maxParallel, totalTimeout) {
|
|
216
|
+
const results = [];
|
|
217
|
+
const agents = queryPlan.agents;
|
|
218
|
+
// 並列実行(バッチ処理)
|
|
219
|
+
const batches = this.createBatches(agents, maxParallel);
|
|
220
|
+
const timeoutPromise = new Promise((resolve) => {
|
|
221
|
+
setTimeout(() => resolve('timeout'), totalTimeout);
|
|
222
|
+
});
|
|
223
|
+
for (const batch of batches) {
|
|
224
|
+
const batchPromises = batch.map(async (agent) => {
|
|
225
|
+
this.emit('agentStarted', agent.type);
|
|
226
|
+
const startTime = Date.now();
|
|
227
|
+
const agentQuery = queryPlan.queries.get(agent.type);
|
|
228
|
+
if (!agentQuery) {
|
|
229
|
+
return {
|
|
230
|
+
agent,
|
|
231
|
+
result: {
|
|
232
|
+
findings: [],
|
|
233
|
+
status: 'failed',
|
|
234
|
+
error: 'No query found for agent',
|
|
235
|
+
processingTime: 0,
|
|
236
|
+
},
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
try {
|
|
240
|
+
const result = await Promise.race([
|
|
241
|
+
agent.search(agentQuery),
|
|
242
|
+
new Promise((_, reject) => {
|
|
243
|
+
setTimeout(() => reject(new Error('Agent timeout')), queryPlan.timeout);
|
|
244
|
+
}),
|
|
245
|
+
]);
|
|
246
|
+
this.emit('agentCompleted', agent.type, result.findings.length);
|
|
247
|
+
return { agent, result };
|
|
248
|
+
}
|
|
249
|
+
catch (error) {
|
|
250
|
+
const errorResult = {
|
|
251
|
+
findings: [],
|
|
252
|
+
status: 'timeout',
|
|
253
|
+
error: error.message,
|
|
254
|
+
processingTime: Date.now() - startTime,
|
|
255
|
+
};
|
|
256
|
+
this.emit('agentFailed', agent.type, error.message);
|
|
257
|
+
return { agent, result: errorResult };
|
|
258
|
+
}
|
|
259
|
+
});
|
|
260
|
+
const raceResult = await Promise.race([
|
|
261
|
+
Promise.all(batchPromises),
|
|
262
|
+
timeoutPromise,
|
|
263
|
+
]);
|
|
264
|
+
if (raceResult === 'timeout') {
|
|
265
|
+
// タイムアウト時は収集済み結果を返す
|
|
266
|
+
this.emit('totalTimeout');
|
|
267
|
+
break;
|
|
268
|
+
}
|
|
269
|
+
results.push(...raceResult);
|
|
270
|
+
}
|
|
271
|
+
return results;
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* バッチに分割
|
|
275
|
+
*/
|
|
276
|
+
createBatches(items, batchSize) {
|
|
277
|
+
const batches = [];
|
|
278
|
+
for (let i = 0; i < items.length; i += batchSize) {
|
|
279
|
+
batches.push(items.slice(i, i + batchSize));
|
|
280
|
+
}
|
|
281
|
+
return batches;
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* ソース情報を生成
|
|
285
|
+
*/
|
|
286
|
+
buildSourceInfos(results, queryPlan) {
|
|
287
|
+
return results.map(({ agent, result }) => ({
|
|
288
|
+
type: agent.type,
|
|
289
|
+
name: agent.name,
|
|
290
|
+
query: queryPlan.queries.get(agent.type)?.query ?? '',
|
|
291
|
+
resultCount: result.findings.length,
|
|
292
|
+
status: result.status,
|
|
293
|
+
error: result.error,
|
|
294
|
+
processingTime: result.processingTime,
|
|
295
|
+
}));
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* 統計情報を計算
|
|
299
|
+
*/
|
|
300
|
+
calculateStatistics(findings, results) {
|
|
301
|
+
const resultsBySource = {};
|
|
302
|
+
for (const { agent, result } of results) {
|
|
303
|
+
resultsBySource[agent.type] = result.findings.length;
|
|
304
|
+
}
|
|
305
|
+
const totalResults = results.reduce((sum, r) => sum + r.result.findings.length, 0);
|
|
306
|
+
return {
|
|
307
|
+
totalResults,
|
|
308
|
+
uniqueResults: findings.length,
|
|
309
|
+
resultsBySource,
|
|
310
|
+
averageRelevance: findings.length > 0
|
|
311
|
+
? findings.reduce((sum, f) => sum + f.relevanceScore, 0) / findings.length
|
|
312
|
+
: 0,
|
|
313
|
+
averageCredibility: findings.length > 0
|
|
314
|
+
? findings.reduce((sum, f) => sum + f.credibilityScore, 0) / findings.length
|
|
315
|
+
: 0,
|
|
316
|
+
};
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* 完了ステータスを決定
|
|
320
|
+
*/
|
|
321
|
+
determineCompletionStatus(results, expectedCount) {
|
|
322
|
+
const successCount = results.filter((r) => r.result.status === 'success').length;
|
|
323
|
+
if (successCount === expectedCount)
|
|
324
|
+
return 'full';
|
|
325
|
+
if (successCount > 0)
|
|
326
|
+
return 'partial';
|
|
327
|
+
return 'failed';
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
//# sourceMappingURL=WideResearchEngine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WideResearchEngine.js","sourceRoot":"","sources":["../../src/research/WideResearchEngine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AcademicSearchAgent - 学術論文検索エージェント
|
|
3
|
+
*
|
|
4
|
+
* arXiv、CrossRef、Semantic Scholarなどの学術APIを使用。
|
|
5
|
+
* 現在はarXiv APIを実装。
|
|
6
|
+
*
|
|
7
|
+
* @requirement REQ-COLLECT-008
|
|
8
|
+
* @design DES-COLLECT-008
|
|
9
|
+
* @task TASK-002
|
|
10
|
+
*/
|
|
11
|
+
import type { ISearchAgent, AgentSearchQuery, AgentSearchResult } from './types.js';
|
|
12
|
+
import type { SourceType } from '../types.js';
|
|
13
|
+
/**
|
|
14
|
+
* 学術論文検索エージェント
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```typescript
|
|
18
|
+
* const agent = new AcademicSearchAgent();
|
|
19
|
+
* const result = await agent.search({
|
|
20
|
+
* query: 'machine learning',
|
|
21
|
+
* maxResults: 10,
|
|
22
|
+
* timeout: 30000,
|
|
23
|
+
* });
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export declare class AcademicSearchAgent implements ISearchAgent {
|
|
27
|
+
readonly type: SourceType;
|
|
28
|
+
readonly name = "Academic Search (arXiv)";
|
|
29
|
+
private readonly arxivApiUrl;
|
|
30
|
+
search(query: AgentSearchQuery): Promise<AgentSearchResult>;
|
|
31
|
+
isAvailable(): Promise<boolean>;
|
|
32
|
+
/**
|
|
33
|
+
* arXiv APIで検索
|
|
34
|
+
*/
|
|
35
|
+
private searchArxiv;
|
|
36
|
+
/**
|
|
37
|
+
* arXiv XMLレスポンスをパース
|
|
38
|
+
*/
|
|
39
|
+
private parseArxivResponse;
|
|
40
|
+
/**
|
|
41
|
+
* XMLタグの内容を抽出
|
|
42
|
+
*/
|
|
43
|
+
private extractXmlTag;
|
|
44
|
+
/**
|
|
45
|
+
* 著者を抽出
|
|
46
|
+
*/
|
|
47
|
+
private extractAuthors;
|
|
48
|
+
/**
|
|
49
|
+
* カテゴリを抽出
|
|
50
|
+
*/
|
|
51
|
+
private extractCategory;
|
|
52
|
+
/**
|
|
53
|
+
* 関連性スコアを計算
|
|
54
|
+
*/
|
|
55
|
+
private calculateRelevance;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=AcademicSearchAgent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AcademicSearchAgent.d.ts","sourceRoot":"","sources":["../../../src/research/agents/AcademicSearchAgent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACpF,OAAO,KAAK,EAAW,UAAU,EAAE,MAAM,aAAa,CAAC;AAEvD;;;;;;;;;;;;GAYG;AACH,qBAAa,mBAAoB,YAAW,YAAY;IACtD,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAc;IACvC,QAAQ,CAAC,IAAI,6BAA6B;IAE1C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAuC;IAE7D,MAAM,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAyB3D,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAKrC;;OAEG;YACW,WAAW;IAgCzB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAuD1B;;OAEG;IACH,OAAO,CAAC,aAAa;IAMrB;;OAEG;IACH,OAAO,CAAC,cAAc;IActB;;OAEG;IACH,OAAO,CAAC,eAAe;IAMvB;;OAEG;IACH,OAAO,CAAC,kBAAkB;CAkB3B"}
|