@nahisaho/katashiro-analyzer 2.0.13 → 2.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/dist/index.d.ts +3 -1
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +2 -0
  4. package/dist/index.js.map +1 -1
  5. package/dist/research/agent/ActionRouter.d.ts +101 -0
  6. package/dist/research/agent/ActionRouter.d.ts.map +1 -0
  7. package/dist/research/agent/ActionRouter.js +284 -0
  8. package/dist/research/agent/ActionRouter.js.map +1 -0
  9. package/dist/research/agent/ActionTracker.d.ts +105 -0
  10. package/dist/research/agent/ActionTracker.d.ts.map +1 -0
  11. package/dist/research/agent/ActionTracker.js +219 -0
  12. package/dist/research/agent/ActionTracker.js.map +1 -0
  13. package/dist/research/agent/AnswerEvaluator.d.ts +156 -0
  14. package/dist/research/agent/AnswerEvaluator.d.ts.map +1 -0
  15. package/dist/research/agent/AnswerEvaluator.js +626 -0
  16. package/dist/research/agent/AnswerEvaluator.js.map +1 -0
  17. package/dist/research/agent/DeepResearchAgent.d.ts +136 -0
  18. package/dist/research/agent/DeepResearchAgent.d.ts.map +1 -0
  19. package/dist/research/agent/DeepResearchAgent.js +381 -0
  20. package/dist/research/agent/DeepResearchAgent.js.map +1 -0
  21. package/dist/research/agent/KnowledgeStore.d.ts +95 -0
  22. package/dist/research/agent/KnowledgeStore.d.ts.map +1 -0
  23. package/dist/research/agent/KnowledgeStore.js +189 -0
  24. package/dist/research/agent/KnowledgeStore.js.map +1 -0
  25. package/dist/research/agent/QueryRewriter.d.ts +111 -0
  26. package/dist/research/agent/QueryRewriter.d.ts.map +1 -0
  27. package/dist/research/agent/QueryRewriter.js +350 -0
  28. package/dist/research/agent/QueryRewriter.js.map +1 -0
  29. package/dist/research/agent/TokenTracker.d.ts +100 -0
  30. package/dist/research/agent/TokenTracker.d.ts.map +1 -0
  31. package/dist/research/agent/TokenTracker.js +150 -0
  32. package/dist/research/agent/TokenTracker.js.map +1 -0
  33. package/dist/research/agent/actions/AnswerActionHandler.d.ts +44 -0
  34. package/dist/research/agent/actions/AnswerActionHandler.d.ts.map +1 -0
  35. package/dist/research/agent/actions/AnswerActionHandler.js +158 -0
  36. package/dist/research/agent/actions/AnswerActionHandler.js.map +1 -0
  37. package/dist/research/agent/actions/BaseActionHandler.d.ts +87 -0
  38. package/dist/research/agent/actions/BaseActionHandler.d.ts.map +1 -0
  39. package/dist/research/agent/actions/BaseActionHandler.js +67 -0
  40. package/dist/research/agent/actions/BaseActionHandler.js.map +1 -0
  41. package/dist/research/agent/actions/CodingActionHandler.d.ts +66 -0
  42. package/dist/research/agent/actions/CodingActionHandler.d.ts.map +1 -0
  43. package/dist/research/agent/actions/CodingActionHandler.js +233 -0
  44. package/dist/research/agent/actions/CodingActionHandler.js.map +1 -0
  45. package/dist/research/agent/actions/ReflectActionHandler.d.ts +32 -0
  46. package/dist/research/agent/actions/ReflectActionHandler.d.ts.map +1 -0
  47. package/dist/research/agent/actions/ReflectActionHandler.js +107 -0
  48. package/dist/research/agent/actions/ReflectActionHandler.js.map +1 -0
  49. package/dist/research/agent/actions/SearchActionHandler.d.ts +30 -0
  50. package/dist/research/agent/actions/SearchActionHandler.d.ts.map +1 -0
  51. package/dist/research/agent/actions/SearchActionHandler.js +73 -0
  52. package/dist/research/agent/actions/SearchActionHandler.js.map +1 -0
  53. package/dist/research/agent/actions/VisitActionHandler.d.ts +33 -0
  54. package/dist/research/agent/actions/VisitActionHandler.d.ts.map +1 -0
  55. package/dist/research/agent/actions/VisitActionHandler.js +83 -0
  56. package/dist/research/agent/actions/VisitActionHandler.js.map +1 -0
  57. package/dist/research/agent/actions/index.d.ts +10 -0
  58. package/dist/research/agent/actions/index.d.ts.map +1 -0
  59. package/dist/research/agent/actions/index.js +10 -0
  60. package/dist/research/agent/actions/index.js.map +1 -0
  61. package/dist/research/agent/index.d.ts +62 -0
  62. package/dist/research/agent/index.d.ts.map +1 -0
  63. package/dist/research/agent/index.js +57 -0
  64. package/dist/research/agent/index.js.map +1 -0
  65. package/dist/research/agent/types.d.ts +421 -0
  66. package/dist/research/agent/types.d.ts.map +1 -0
  67. package/dist/research/agent/types.js +45 -0
  68. package/dist/research/agent/types.js.map +1 -0
  69. package/dist/research/index.d.ts +1 -0
  70. package/dist/research/index.d.ts.map +1 -1
  71. package/dist/research/index.js +2 -0
  72. package/dist/research/index.js.map +1 -1
  73. package/package.json +2 -1
@@ -0,0 +1,136 @@
1
+ /**
2
+ * DeepResearchAgent - jina-ai風の反復型リサーチエージェント
3
+ *
4
+ * @requirement REQ-DR-001
5
+ * @requirement REQ-DR-002
6
+ * @requirement REQ-DR-003
7
+ * @requirement REQ-DR-004
8
+ * @requirement REQ-DR-005
9
+ * @requirement REQ-DR-007
10
+ * @requirement REQ-DR-008
11
+ * @design DES-v2.1.0-DeepResearchAgent
12
+ */
13
+ import type { WebSearchClient, WebScraper } from '@nahisaho/katashiro-collector';
14
+ import type { LLMClientInterface, AgentConfig, AgentResearchResult } from './types.js';
15
+ import { type CodeExecutor } from './actions/index.js';
16
+ /**
17
+ * イベントタイプ
18
+ */
19
+ export type AgentEventType = 'researchStarted' | 'stepStarted' | 'stepCompleted' | 'actionExecuted' | 'answerEvaluated' | 'beastModeActivated' | 'researchCompleted' | 'error';
20
+ /**
21
+ * イベントデータ
22
+ */
23
+ export interface AgentEvent {
24
+ type: AgentEventType;
25
+ timestamp: string;
26
+ data: Record<string, unknown>;
27
+ }
28
+ /**
29
+ * イベントリスナー
30
+ */
31
+ export type AgentEventListener = (event: AgentEvent) => void;
32
+ /**
33
+ * DeepResearchAgentのオプション
34
+ */
35
+ export interface DeepResearchAgentOptions {
36
+ /** LLMクライアント */
37
+ llmClient: LLMClientInterface;
38
+ /** Web検索クライアント */
39
+ searchClient: WebSearchClient;
40
+ /** Webスクレイパー */
41
+ scraper: WebScraper;
42
+ /** コードエグゼキューター(オプション) */
43
+ codeExecutor?: CodeExecutor;
44
+ /** エージェント設定(オプション) */
45
+ config?: Partial<AgentConfig>;
46
+ }
47
+ /**
48
+ * jina-ai/node-DeepResearch風の反復型リサーチエージェント
49
+ *
50
+ * 5つのアクションタイプをサポート:
51
+ * - search: Web検索
52
+ * - visit: URLアクセス
53
+ * - reflect: サブ質問への分解
54
+ * - answer: 回答生成
55
+ * - coding: コード実行
56
+ *
57
+ * @example
58
+ * ```typescript
59
+ * const agent = new DeepResearchAgent({
60
+ * llmClient,
61
+ * searchClient,
62
+ * scraper,
63
+ * });
64
+ *
65
+ * agent.on((event) => {
66
+ * console.log(`[${event.type}]`, event.data);
67
+ * });
68
+ *
69
+ * const result = await agent.research('What is the impact of AI on healthcare?');
70
+ * console.log(result.answer);
71
+ * ```
72
+ */
73
+ export declare class DeepResearchAgent {
74
+ private llmClient;
75
+ private searchClient;
76
+ private scraper;
77
+ private codeExecutor?;
78
+ private config;
79
+ private tokenTracker;
80
+ private knowledgeStore;
81
+ private evaluator;
82
+ private actionTracker;
83
+ private actionRouter;
84
+ private queryRewriter;
85
+ private searchHandler;
86
+ private visitHandler;
87
+ private reflectHandler;
88
+ private answerHandler;
89
+ private codingHandler;
90
+ private currentStep;
91
+ private visitedUrls;
92
+ private searchResultUrls;
93
+ private subQuestions;
94
+ private answeredSubQuestions;
95
+ private lastEvaluation?;
96
+ private beastModeActivated;
97
+ private eventListeners;
98
+ constructor(options: DeepResearchAgentOptions);
99
+ /**
100
+ * リサーチを実行
101
+ */
102
+ research(question: string): Promise<AgentResearchResult>;
103
+ /**
104
+ * イベントリスナーを登録
105
+ */
106
+ on(listener: AgentEventListener): () => void;
107
+ /**
108
+ * コンポーネントを初期化
109
+ */
110
+ private initializeComponents;
111
+ /**
112
+ * 状態をリセット
113
+ */
114
+ private resetState;
115
+ /**
116
+ * 決定コンテキストを構築
117
+ */
118
+ private buildDecisionContext;
119
+ /**
120
+ * アクションを実行
121
+ */
122
+ private executeAction;
123
+ /**
124
+ * Beastモードをアクティブにすべきかチェック
125
+ */
126
+ private shouldActivateBeastMode;
127
+ /**
128
+ * 最終回答を生成
129
+ */
130
+ private generateFinalAnswer;
131
+ /**
132
+ * イベントを発行
133
+ */
134
+ private emitEvent;
135
+ }
136
+ //# sourceMappingURL=DeepResearchAgent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DeepResearchAgent.d.ts","sourceRoot":"","sources":["../../../src/research/agent/DeepResearchAgent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AACjF,OAAO,KAAK,EACV,kBAAkB,EAElB,WAAW,EACX,mBAAmB,EAOpB,MAAM,YAAY,CAAC;AAQpB,OAAO,EAQL,KAAK,YAAY,EAClB,MAAM,oBAAoB,CAAC;AAE5B;;GAEG;AACH,MAAM,MAAM,cAAc,GACtB,iBAAiB,GACjB,aAAa,GACb,eAAe,GACf,gBAAgB,GAChB,iBAAiB,GACjB,oBAAoB,GACpB,mBAAmB,GACnB,OAAO,CAAC;AAEZ;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,cAAc,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;AAE7D;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,gBAAgB;IAChB,SAAS,EAAE,kBAAkB,CAAC;IAC9B,kBAAkB;IAClB,YAAY,EAAE,eAAe,CAAC;IAC9B,gBAAgB;IAChB,OAAO,EAAE,UAAU,CAAC;IACpB,yBAAyB;IACzB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,sBAAsB;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;CAC/B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,YAAY,CAAkB;IACtC,OAAO,CAAC,OAAO,CAAa;IAC5B,OAAO,CAAC,YAAY,CAAC,CAAe;IACpC,OAAO,CAAC,MAAM,CAAc;IAG5B,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,cAAc,CAAkB;IACxC,OAAO,CAAC,SAAS,CAAmB;IACpC,OAAO,CAAC,aAAa,CAAiB;IACtC,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,aAAa,CAAiB;IAGtC,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,YAAY,CAAsB;IAC1C,OAAO,CAAC,cAAc,CAAwB;IAC9C,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,aAAa,CAAuB;IAG5C,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,WAAW,CAAgB;IACnC,OAAO,CAAC,gBAAgB,CAAuD;IAC/E,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,oBAAoB,CAAgB;IAC5C,OAAO,CAAC,cAAc,CAAC,CAAqB;IAC5C,OAAO,CAAC,kBAAkB,CAAkB;IAG5C,OAAO,CAAC,cAAc,CAA4B;gBAEtC,OAAO,EAAE,wBAAwB;IAQ7C;;OAEG;IACG,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA2I9D;;OAEG;IACH,EAAE,CAAC,QAAQ,EAAE,kBAAkB,GAAG,MAAM,IAAI;IAU5C;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAgD5B;;OAEG;IACH,OAAO,CAAC,UAAU;IAUlB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAkB5B;;OAEG;YACW,aAAa;IAiC3B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAU/B;;OAEG;YACW,mBAAmB;IAiCjC;;OAEG;IACH,OAAO,CAAC,SAAS;CAelB"}
@@ -0,0 +1,381 @@
1
+ /**
2
+ * DeepResearchAgent - jina-ai風の反復型リサーチエージェント
3
+ *
4
+ * @requirement REQ-DR-001
5
+ * @requirement REQ-DR-002
6
+ * @requirement REQ-DR-003
7
+ * @requirement REQ-DR-004
8
+ * @requirement REQ-DR-005
9
+ * @requirement REQ-DR-007
10
+ * @requirement REQ-DR-008
11
+ * @design DES-v2.1.0-DeepResearchAgent
12
+ */
13
+ import { DEFAULT_AGENT_CONFIG } from './types.js';
14
+ import { TokenTracker } from './TokenTracker.js';
15
+ import { KnowledgeStore } from './KnowledgeStore.js';
16
+ import { AnswerEvaluator } from './AnswerEvaluator.js';
17
+ import { ActionTracker } from './ActionTracker.js';
18
+ import { ActionRouter } from './ActionRouter.js';
19
+ import { QueryRewriter } from './QueryRewriter.js';
20
+ import { SearchActionHandler, VisitActionHandler, ReflectActionHandler, AnswerActionHandler, CodingActionHandler, } from './actions/index.js';
21
+ /**
22
+ * jina-ai/node-DeepResearch風の反復型リサーチエージェント
23
+ *
24
+ * 5つのアクションタイプをサポート:
25
+ * - search: Web検索
26
+ * - visit: URLアクセス
27
+ * - reflect: サブ質問への分解
28
+ * - answer: 回答生成
29
+ * - coding: コード実行
30
+ *
31
+ * @example
32
+ * ```typescript
33
+ * const agent = new DeepResearchAgent({
34
+ * llmClient,
35
+ * searchClient,
36
+ * scraper,
37
+ * });
38
+ *
39
+ * agent.on((event) => {
40
+ * console.log(`[${event.type}]`, event.data);
41
+ * });
42
+ *
43
+ * const result = await agent.research('What is the impact of AI on healthcare?');
44
+ * console.log(result.answer);
45
+ * ```
46
+ */
47
+ export class DeepResearchAgent {
48
+ llmClient;
49
+ searchClient;
50
+ scraper;
51
+ codeExecutor;
52
+ config;
53
+ // 内部コンポーネント
54
+ tokenTracker;
55
+ knowledgeStore;
56
+ evaluator;
57
+ actionTracker;
58
+ actionRouter;
59
+ queryRewriter;
60
+ // アクションハンドラ
61
+ searchHandler;
62
+ visitHandler;
63
+ reflectHandler;
64
+ answerHandler;
65
+ codingHandler;
66
+ // 状態
67
+ currentStep = 0;
68
+ visitedUrls = [];
69
+ searchResultUrls = [];
70
+ subQuestions = [];
71
+ answeredSubQuestions = [];
72
+ lastEvaluation;
73
+ beastModeActivated = false;
74
+ // イベントリスナー
75
+ eventListeners = [];
76
+ constructor(options) {
77
+ this.llmClient = options.llmClient;
78
+ this.searchClient = options.searchClient;
79
+ this.scraper = options.scraper;
80
+ this.codeExecutor = options.codeExecutor;
81
+ this.config = { ...DEFAULT_AGENT_CONFIG, ...options.config };
82
+ }
83
+ /**
84
+ * リサーチを実行
85
+ */
86
+ async research(question) {
87
+ const startTime = Date.now();
88
+ // コンポーネントを初期化
89
+ this.initializeComponents();
90
+ // 状態をリセット
91
+ this.resetState();
92
+ // イベント発行
93
+ this.emitEvent('researchStarted', { question });
94
+ try {
95
+ // クエリを拡張
96
+ const rewriteResult = await this.queryRewriter.rewrite(question);
97
+ // メインループ
98
+ while (this.currentStep < this.config.maxSteps && !this.tokenTracker.isExceeded()) {
99
+ // イベント発行
100
+ this.emitEvent('stepStarted', { step: this.currentStep + 1 });
101
+ // 決定コンテキストを構築
102
+ const decisionContext = this.buildDecisionContext(question, rewriteResult.questionType);
103
+ // 次のアクションを決定
104
+ const decision = await this.actionRouter.decide(decisionContext);
105
+ // アクションを実行
106
+ const result = await this.executeAction(decision.action, decision.params, question);
107
+ // ステップを記録
108
+ const stepAction = {
109
+ stepNumber: this.currentStep,
110
+ action: decision.action,
111
+ think: decision.think,
112
+ params: decision.params,
113
+ timestamp: new Date().toISOString(),
114
+ success: result.success,
115
+ error: result.error,
116
+ };
117
+ this.actionTracker.trackAction(stepAction);
118
+ // ナレッジを追加
119
+ for (const item of result.knowledgeItems) {
120
+ this.knowledgeStore.add(item);
121
+ }
122
+ // URL情報を更新
123
+ if (decision.action === 'search' && result.metadata?.urls) {
124
+ this.searchResultUrls = result.metadata.urls;
125
+ }
126
+ if (decision.action === 'visit' && result.metadata?.visitedUrls) {
127
+ this.visitedUrls.push(...result.metadata.visitedUrls);
128
+ }
129
+ // イベント発行
130
+ this.emitEvent('actionExecuted', {
131
+ action: decision.action,
132
+ success: result.success,
133
+ knowledgeCount: result.knowledgeItems.length,
134
+ });
135
+ // 回答アクションの場合、評価結果を保存
136
+ if (decision.action === 'answer' && result.metadata?.evaluation) {
137
+ this.lastEvaluation = result.metadata.evaluation;
138
+ this.emitEvent('answerEvaluated', {
139
+ pass: this.lastEvaluation.pass,
140
+ think: this.lastEvaluation.think,
141
+ });
142
+ // 評価に合格したら終了
143
+ if (this.lastEvaluation.pass || result.metadata.isFinal) {
144
+ break;
145
+ }
146
+ }
147
+ // イベント発行
148
+ this.emitEvent('stepCompleted', {
149
+ step: this.currentStep + 1,
150
+ action: decision.action,
151
+ success: result.success,
152
+ });
153
+ this.currentStep++;
154
+ // Beastモードチェック
155
+ if (this.shouldActivateBeastMode()) {
156
+ this.beastModeActivated = true;
157
+ this.emitEvent('beastModeActivated', {
158
+ reason: 'Token budget or step limit approaching',
159
+ });
160
+ }
161
+ }
162
+ // 最終回答を生成
163
+ const finalAnswer = await this.generateFinalAnswer(question);
164
+ const endTime = Date.now();
165
+ // 結果を構築
166
+ const result = {
167
+ question,
168
+ answer: finalAnswer.answer,
169
+ references: finalAnswer.references,
170
+ knowledgeItems: this.knowledgeStore.getAll(),
171
+ steps: this.actionTracker.getSteps(),
172
+ evaluation: this.lastEvaluation,
173
+ tokenUsage: {
174
+ promptTokens: this.tokenTracker.getUsage().promptTokens,
175
+ completionTokens: this.tokenTracker.getUsage().completionTokens,
176
+ totalTokens: this.tokenTracker.getUsage().totalTokens,
177
+ budget: this.config.tokenBudget,
178
+ remaining: this.tokenTracker.getRemainingBudget(),
179
+ },
180
+ metadata: {
181
+ durationMs: endTime - startTime,
182
+ stepCount: this.currentStep,
183
+ beastModeUsed: this.beastModeActivated,
184
+ questionType: rewriteResult.questionType,
185
+ complexityScore: rewriteResult.complexityScore,
186
+ },
187
+ };
188
+ // イベント発行
189
+ this.emitEvent('researchCompleted', {
190
+ answer: finalAnswer.answer,
191
+ stepCount: this.currentStep,
192
+ durationMs: endTime - startTime,
193
+ });
194
+ return result;
195
+ }
196
+ catch (error) {
197
+ // エラーイベント発行
198
+ this.emitEvent('error', {
199
+ error: error instanceof Error ? error.message : 'Unknown error',
200
+ });
201
+ throw error;
202
+ }
203
+ }
204
+ /**
205
+ * イベントリスナーを登録
206
+ */
207
+ on(listener) {
208
+ this.eventListeners.push(listener);
209
+ return () => {
210
+ const index = this.eventListeners.indexOf(listener);
211
+ if (index > -1) {
212
+ this.eventListeners.splice(index, 1);
213
+ }
214
+ };
215
+ }
216
+ /**
217
+ * コンポーネントを初期化
218
+ */
219
+ initializeComponents() {
220
+ this.tokenTracker = new TokenTracker({ budget: this.config.tokenBudget });
221
+ this.knowledgeStore = new KnowledgeStore();
222
+ this.evaluator = new AnswerEvaluator({
223
+ llmClient: this.llmClient,
224
+ tokenTracker: this.tokenTracker,
225
+ });
226
+ this.actionTracker = new ActionTracker();
227
+ this.actionRouter = new ActionRouter({
228
+ llmClient: this.llmClient,
229
+ config: this.config,
230
+ tokenTracker: this.tokenTracker,
231
+ actionTracker: this.actionTracker,
232
+ });
233
+ this.queryRewriter = new QueryRewriter({
234
+ llmClient: this.llmClient,
235
+ tokenTracker: this.tokenTracker,
236
+ });
237
+ // アクションハンドラを初期化
238
+ const handlerOptions = {
239
+ config: this.config,
240
+ tokenTracker: this.tokenTracker,
241
+ };
242
+ this.searchHandler = new SearchActionHandler({
243
+ ...handlerOptions,
244
+ searchClient: this.searchClient,
245
+ });
246
+ this.visitHandler = new VisitActionHandler({
247
+ ...handlerOptions,
248
+ scraper: this.scraper,
249
+ });
250
+ this.reflectHandler = new ReflectActionHandler({
251
+ ...handlerOptions,
252
+ llmClient: this.llmClient,
253
+ });
254
+ this.answerHandler = new AnswerActionHandler({
255
+ ...handlerOptions,
256
+ llmClient: this.llmClient,
257
+ evaluator: this.evaluator,
258
+ });
259
+ this.codingHandler = new CodingActionHandler({
260
+ ...handlerOptions,
261
+ codeExecutor: this.codeExecutor,
262
+ });
263
+ }
264
+ /**
265
+ * 状態をリセット
266
+ */
267
+ resetState() {
268
+ this.currentStep = 0;
269
+ this.visitedUrls = [];
270
+ this.searchResultUrls = [];
271
+ this.subQuestions = [];
272
+ this.answeredSubQuestions = [];
273
+ this.lastEvaluation = undefined;
274
+ this.beastModeActivated = false;
275
+ }
276
+ /**
277
+ * 決定コンテキストを構築
278
+ */
279
+ buildDecisionContext(question, questionType) {
280
+ return {
281
+ question,
282
+ questionType: questionType,
283
+ knowledge: this.knowledgeStore.getAll(),
284
+ visitedUrls: this.visitedUrls,
285
+ searchResultUrls: this.searchResultUrls,
286
+ lastEvaluation: this.lastEvaluation,
287
+ stepNumber: this.currentStep,
288
+ beastMode: this.beastModeActivated,
289
+ subQuestions: this.subQuestions,
290
+ answeredSubQuestions: this.answeredSubQuestions,
291
+ };
292
+ }
293
+ /**
294
+ * アクションを実行
295
+ */
296
+ async executeAction(action, params, question) {
297
+ const context = {
298
+ question,
299
+ stepNumber: this.currentStep,
300
+ visitedUrls: this.visitedUrls,
301
+ searchResultUrls: this.searchResultUrls,
302
+ currentKnowledge: this.knowledgeStore.getAll(),
303
+ };
304
+ switch (action) {
305
+ case 'search':
306
+ return this.searchHandler.execute(params, context);
307
+ case 'visit':
308
+ return this.visitHandler.execute(params, context);
309
+ case 'reflect':
310
+ return this.reflectHandler.execute(params, context);
311
+ case 'answer':
312
+ return this.answerHandler.execute(params, context);
313
+ case 'coding':
314
+ return this.codingHandler.execute(params, context);
315
+ default:
316
+ return {
317
+ success: false,
318
+ knowledgeItems: [],
319
+ error: `Unknown action: ${action}`,
320
+ };
321
+ }
322
+ }
323
+ /**
324
+ * Beastモードをアクティブにすべきかチェック
325
+ */
326
+ shouldActivateBeastMode() {
327
+ if (this.beastModeActivated)
328
+ return false;
329
+ const usageRatio = this.tokenTracker.getUsageRatio();
330
+ const stepRatio = this.currentStep / this.config.maxSteps;
331
+ // トークン予算の90%以上を使用、またはステップの90%以上を消費
332
+ return usageRatio > 0.9 || stepRatio > 0.9;
333
+ }
334
+ /**
335
+ * 最終回答を生成
336
+ */
337
+ async generateFinalAnswer(question) {
338
+ const knowledge = this.knowledgeStore.getAll();
339
+ if (this.beastModeActivated) {
340
+ // Beastモード: 強制的に回答生成
341
+ return this.answerHandler.generateForcedAnswer(question, knowledge);
342
+ }
343
+ // 通常の回答生成
344
+ const params = {
345
+ answer: '',
346
+ references: [],
347
+ isFinal: true,
348
+ };
349
+ const context = {
350
+ question,
351
+ stepNumber: this.currentStep,
352
+ visitedUrls: this.visitedUrls,
353
+ searchResultUrls: this.searchResultUrls,
354
+ currentKnowledge: knowledge,
355
+ };
356
+ const result = await this.answerHandler.execute(params, context);
357
+ return {
358
+ answer: result.metadata?.answer || 'Unable to generate answer',
359
+ references: result.metadata?.references || [],
360
+ };
361
+ }
362
+ /**
363
+ * イベントを発行
364
+ */
365
+ emitEvent(type, data) {
366
+ const event = {
367
+ type,
368
+ timestamp: new Date().toISOString(),
369
+ data,
370
+ };
371
+ for (const listener of this.eventListeners) {
372
+ try {
373
+ listener(event);
374
+ }
375
+ catch (error) {
376
+ console.error('Event listener error:', error);
377
+ }
378
+ }
379
+ }
380
+ }
381
+ //# sourceMappingURL=DeepResearchAgent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DeepResearchAgent.js","sourceRoot":"","sources":["../../../src/research/agent/DeepResearchAgent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * KnowledgeStore - 中間知識の管理
3
+ *
4
+ * @requirement REQ-DR-003
5
+ * @design DES-v2.1.0-DeepResearchAgent
6
+ */
7
+ import type { KnowledgeItem } from './types.js';
8
+ /**
9
+ * 調査中に得た知識を構造化して蓄積するストア
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * const store = new KnowledgeStore();
14
+ *
15
+ * const id = store.add({
16
+ * question: 'What is AI ethics?',
17
+ * answer: 'AI ethics is...',
18
+ * type: 'url',
19
+ * references: ['https://example.com'],
20
+ * confidence: 0.9,
21
+ * });
22
+ *
23
+ * const items = store.search('ethics');
24
+ * const messages = store.toMessages();
25
+ * ```
26
+ */
27
+ export declare class KnowledgeStore {
28
+ private items;
29
+ private idCounter;
30
+ constructor();
31
+ /**
32
+ * ナレッジアイテムを追加
33
+ */
34
+ add(item: Omit<KnowledgeItem, 'id' | 'updated'>): string;
35
+ /**
36
+ * IDでアイテムを取得
37
+ */
38
+ get(id: string): KnowledgeItem | undefined;
39
+ /**
40
+ * 全アイテムを取得
41
+ */
42
+ getAll(): KnowledgeItem[];
43
+ /**
44
+ * タイプでフィルタリング
45
+ */
46
+ getByType(type: KnowledgeItem['type']): KnowledgeItem[];
47
+ /**
48
+ * キーワードで検索
49
+ */
50
+ search(query: string): KnowledgeItem[];
51
+ /**
52
+ * 信頼度でソート
53
+ */
54
+ getByConfidence(minConfidence?: number): KnowledgeItem[];
55
+ /**
56
+ * Q&A形式のメッセージに変換
57
+ */
58
+ toMessages(): Array<{
59
+ role: 'user' | 'assistant';
60
+ content: string;
61
+ }>;
62
+ /**
63
+ * アイテムを更新
64
+ */
65
+ update(id: string, updates: Partial<Omit<KnowledgeItem, 'id'>>): boolean;
66
+ /**
67
+ * アイテムを削除
68
+ */
69
+ delete(id: string): boolean;
70
+ /**
71
+ * 全てクリア
72
+ */
73
+ clear(): void;
74
+ /**
75
+ * アイテム数を取得
76
+ */
77
+ size(): number;
78
+ /**
79
+ * 重複チェック(同じ質問が既にあるか)
80
+ */
81
+ hasSimilarQuestion(question: string, threshold?: number): boolean;
82
+ /**
83
+ * 簡易的な類似度計算(Jaccard係数)
84
+ */
85
+ private similarity;
86
+ /**
87
+ * JSONにシリアライズ
88
+ */
89
+ toJSON(): KnowledgeItem[];
90
+ /**
91
+ * JSONからデシリアライズ
92
+ */
93
+ fromJSON(items: KnowledgeItem[]): void;
94
+ }
95
+ //# sourceMappingURL=KnowledgeStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KnowledgeStore.d.ts","sourceRoot":"","sources":["../../../src/research/agent/KnowledgeStore.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,KAAK,CAA6B;IAC1C,OAAO,CAAC,SAAS,CAAS;;IAO1B;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,GAAG,SAAS,CAAC,GAAG,MAAM;IAWxD;;OAEG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAI1C;;OAEG;IACH,MAAM,IAAI,aAAa,EAAE;IAIzB;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,aAAa,EAAE;IAIvD;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,EAAE;IAWtC;;OAEG;IACH,eAAe,CAAC,aAAa,GAAE,MAAU,GAAG,aAAa,EAAE;IAM3D;;OAEG;IACH,UAAU,IAAI,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAmCpE;;OAEG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,GAAG,OAAO;IAYxE;;OAEG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAI3B;;OAEG;IACH,KAAK,IAAI,IAAI;IAKb;;OAEG;IACH,IAAI,IAAI,MAAM;IAId;;OAEG;IACH,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,GAAE,MAAY,GAAG,OAAO;IAYtE;;OAEG;IACH,OAAO,CAAC,UAAU;IAQlB;;OAEG;IACH,MAAM,IAAI,aAAa,EAAE;IAIzB;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,IAAI;CAUvC"}