@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,66 @@
1
+ /**
2
+ * CodingActionHandler - コード実行アクション
3
+ *
4
+ * @requirement REQ-DR-001
5
+ * @design DES-v2.1.0-DeepResearchAgent
6
+ */
7
+ import type { CodingParams } from '../types.js';
8
+ import { BaseActionHandler, type ExecutionContext, type ActionResult, type ActionHandlerOptions } from './BaseActionHandler.js';
9
+ /**
10
+ * コード実行アクションハンドラのオプション
11
+ */
12
+ export interface CodingActionHandlerOptions extends ActionHandlerOptions {
13
+ /** コードエグゼキューター(オプション) */
14
+ codeExecutor?: CodeExecutor;
15
+ }
16
+ /**
17
+ * コードエグゼキューターのインターフェース
18
+ */
19
+ export interface CodeExecutor {
20
+ execute(code: string, language: string): Promise<{
21
+ success: boolean;
22
+ output: string;
23
+ error?: string;
24
+ }>;
25
+ }
26
+ /**
27
+ * 計算やデータ処理のためのコード実行アクションハンドラ
28
+ */
29
+ export declare class CodingActionHandler extends BaseActionHandler<CodingParams> {
30
+ readonly actionType: "coding";
31
+ private codeExecutor?;
32
+ constructor(options: CodingActionHandlerOptions);
33
+ /**
34
+ * コードを実行
35
+ */
36
+ execute(params: CodingParams, _context: ExecutionContext): Promise<ActionResult>;
37
+ /**
38
+ * ビルトインの計算を実行
39
+ */
40
+ private executeBuiltIn;
41
+ /**
42
+ * 日付計算かどうか
43
+ */
44
+ private isDateCalculation;
45
+ /**
46
+ * 日付計算を実行
47
+ */
48
+ private calculateDate;
49
+ /**
50
+ * 数値計算かどうか
51
+ */
52
+ private isMathCalculation;
53
+ /**
54
+ * 数値計算を実行
55
+ */
56
+ private calculateMath;
57
+ /**
58
+ * 単位変換かどうか
59
+ */
60
+ private isUnitConversion;
61
+ /**
62
+ * 単位変換を実行
63
+ */
64
+ private convertUnit;
65
+ }
66
+ //# sourceMappingURL=CodingActionHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CodingActionHandler.d.ts","sourceRoot":"","sources":["../../../../src/research/agent/actions/CodingActionHandler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,KAAK,YAAY,EAAE,KAAK,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAEhI;;GAEG;AACH,MAAM,WAAW,0BAA2B,SAAQ,oBAAoB;IACtE,yBAAyB;IACzB,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;QAC/C,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;CACJ;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,iBAAiB,CAAC,YAAY,CAAC;IACtE,QAAQ,CAAC,UAAU,EAAG,QAAQ,CAAU;IAExC,OAAO,CAAC,YAAY,CAAC,CAAe;gBAExB,OAAO,EAAE,0BAA0B;IAK/C;;OAEG;IACG,OAAO,CAAC,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC;IAyCtF;;OAEG;YACW,cAAc;IA2B5B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAezB;;OAEG;IACH,OAAO,CAAC,aAAa;IA0CrB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAKzB;;OAEG;IACH,OAAO,CAAC,aAAa;IA+BrB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAKxB;;OAEG;IACH,OAAO,CAAC,WAAW;CAiDpB"}
@@ -0,0 +1,233 @@
1
+ /**
2
+ * CodingActionHandler - コード実行アクション
3
+ *
4
+ * @requirement REQ-DR-001
5
+ * @design DES-v2.1.0-DeepResearchAgent
6
+ */
7
+ import { BaseActionHandler } from './BaseActionHandler.js';
8
+ /**
9
+ * 計算やデータ処理のためのコード実行アクションハンドラ
10
+ */
11
+ export class CodingActionHandler extends BaseActionHandler {
12
+ actionType = 'coding';
13
+ codeExecutor;
14
+ constructor(options) {
15
+ super(options);
16
+ this.codeExecutor = options.codeExecutor;
17
+ }
18
+ /**
19
+ * コードを実行
20
+ */
21
+ async execute(params, _context) {
22
+ const { codingIssue, code } = params;
23
+ try {
24
+ let result;
25
+ if (this.codeExecutor && code) {
26
+ // 外部エグゼキューターでコードを実行
27
+ result = await this.codeExecutor.execute(code, 'python');
28
+ }
29
+ else {
30
+ // ビルトインの計算を試行
31
+ result = await this.executeBuiltIn(codingIssue ?? '');
32
+ }
33
+ // 結果をナレッジアイテムとして保存
34
+ const item = this.createKnowledgeItem(`Coding Task: ${codingIssue ?? 'Unknown'}\n\nCode:\n${code || 'Built-in calculation'}\n\nResult:\n${result.output}${result.error ? `\n\nError: ${result.error}` : ''}`, {
35
+ type: 'code',
36
+ title: `Calculation: ${(codingIssue ?? 'Unknown').slice(0, 50)}...`,
37
+ });
38
+ return {
39
+ success: result.success,
40
+ knowledgeItems: [item],
41
+ error: result.error,
42
+ metadata: {
43
+ codingIssue,
44
+ output: result.output,
45
+ },
46
+ };
47
+ }
48
+ catch (error) {
49
+ return {
50
+ success: false,
51
+ knowledgeItems: [],
52
+ error: error instanceof Error ? error.message : 'Code execution failed',
53
+ };
54
+ }
55
+ }
56
+ /**
57
+ * ビルトインの計算を実行
58
+ */
59
+ async executeBuiltIn(issue) {
60
+ // 日付計算
61
+ if (this.isDateCalculation(issue)) {
62
+ return this.calculateDate(issue);
63
+ }
64
+ // 数値計算
65
+ if (this.isMathCalculation(issue)) {
66
+ return this.calculateMath(issue);
67
+ }
68
+ // 単位変換
69
+ if (this.isUnitConversion(issue)) {
70
+ return this.convertUnit(issue);
71
+ }
72
+ return {
73
+ success: false,
74
+ output: '',
75
+ error: 'No code executor available and built-in calculation not supported',
76
+ };
77
+ }
78
+ /**
79
+ * 日付計算かどうか
80
+ */
81
+ isDateCalculation(issue) {
82
+ const dateKeywords = [
83
+ 'days ago',
84
+ 'days from',
85
+ 'date',
86
+ 'year',
87
+ 'month',
88
+ 'week',
89
+ 'today',
90
+ 'yesterday',
91
+ 'tomorrow',
92
+ ];
93
+ return dateKeywords.some((k) => issue.toLowerCase().includes(k));
94
+ }
95
+ /**
96
+ * 日付計算を実行
97
+ */
98
+ calculateDate(issue) {
99
+ try {
100
+ const today = new Date();
101
+ // "X days ago" パターン
102
+ const daysAgoMatch = issue.match(/(\d+)\s*days?\s*ago/i);
103
+ if (daysAgoMatch && daysAgoMatch[1]) {
104
+ const days = parseInt(daysAgoMatch[1], 10);
105
+ const date = new Date(today);
106
+ date.setDate(date.getDate() - days);
107
+ return {
108
+ success: true,
109
+ output: `${days} days ago was: ${date.toISOString().split('T')[0]}`,
110
+ };
111
+ }
112
+ // "X days from now" パターン
113
+ const daysFromMatch = issue.match(/(\d+)\s*days?\s*from\s*(?:now|today)/i);
114
+ if (daysFromMatch && daysFromMatch[1]) {
115
+ const days = parseInt(daysFromMatch[1], 10);
116
+ const date = new Date(today);
117
+ date.setDate(date.getDate() + days);
118
+ return {
119
+ success: true,
120
+ output: `${days} days from now: ${date.toISOString().split('T')[0]}`,
121
+ };
122
+ }
123
+ // 今日の日付
124
+ return {
125
+ success: true,
126
+ output: `Today's date: ${today.toISOString().split('T')[0]}`,
127
+ };
128
+ }
129
+ catch (error) {
130
+ return {
131
+ success: false,
132
+ output: '',
133
+ error: error instanceof Error ? error.message : 'Date calculation failed',
134
+ };
135
+ }
136
+ }
137
+ /**
138
+ * 数値計算かどうか
139
+ */
140
+ isMathCalculation(issue) {
141
+ const mathKeywords = ['calculate', 'compute', 'sum', 'average', 'multiply', 'divide', '+', '-', '*', '/', '%'];
142
+ return mathKeywords.some((k) => issue.toLowerCase().includes(k));
143
+ }
144
+ /**
145
+ * 数値計算を実行
146
+ */
147
+ calculateMath(issue) {
148
+ try {
149
+ // 数式を抽出(安全なパターンのみ)
150
+ const mathMatch = issue.match(/[\d\s+\-*/().]+/);
151
+ if (mathMatch) {
152
+ const expression = mathMatch[0].trim();
153
+ // 安全性チェック: 数字と演算子のみ
154
+ if (/^[\d\s+\-*/().]+$/.test(expression)) {
155
+ // eval の代わりに Function を使用(やや安全)
156
+ const result = new Function(`return ${expression}`)();
157
+ return {
158
+ success: true,
159
+ output: `${expression} = ${result}`,
160
+ };
161
+ }
162
+ }
163
+ return {
164
+ success: false,
165
+ output: '',
166
+ error: 'Could not parse math expression',
167
+ };
168
+ }
169
+ catch (error) {
170
+ return {
171
+ success: false,
172
+ output: '',
173
+ error: error instanceof Error ? error.message : 'Math calculation failed',
174
+ };
175
+ }
176
+ }
177
+ /**
178
+ * 単位変換かどうか
179
+ */
180
+ isUnitConversion(issue) {
181
+ const unitKeywords = ['convert', 'to', 'from', 'km', 'miles', 'kg', 'pounds', 'celsius', 'fahrenheit'];
182
+ return unitKeywords.some((k) => issue.toLowerCase().includes(k));
183
+ }
184
+ /**
185
+ * 単位変換を実行
186
+ */
187
+ convertUnit(issue) {
188
+ try {
189
+ const lowerIssue = issue.toLowerCase();
190
+ // km to miles
191
+ const kmToMilesMatch = lowerIssue.match(/(\d+(?:\.\d+)?)\s*(?:km|kilometers?)\s*to\s*miles?/);
192
+ if (kmToMilesMatch && kmToMilesMatch[1]) {
193
+ const km = parseFloat(kmToMilesMatch[1]);
194
+ const miles = km * 0.621371;
195
+ return { success: true, output: `${km} km = ${miles.toFixed(2)} miles` };
196
+ }
197
+ // miles to km
198
+ const milesToKmMatch = lowerIssue.match(/(\d+(?:\.\d+)?)\s*miles?\s*to\s*(?:km|kilometers?)/);
199
+ if (milesToKmMatch && milesToKmMatch[1]) {
200
+ const miles = parseFloat(milesToKmMatch[1]);
201
+ const km = miles * 1.60934;
202
+ return { success: true, output: `${miles} miles = ${km.toFixed(2)} km` };
203
+ }
204
+ // celsius to fahrenheit
205
+ const celsiusMatch = lowerIssue.match(/(\d+(?:\.\d+)?)\s*(?:°?c|celsius)\s*to\s*(?:°?f|fahrenheit)/);
206
+ if (celsiusMatch && celsiusMatch[1]) {
207
+ const c = parseFloat(celsiusMatch[1]);
208
+ const f = (c * 9) / 5 + 32;
209
+ return { success: true, output: `${c}°C = ${f.toFixed(1)}°F` };
210
+ }
211
+ // fahrenheit to celsius
212
+ const fahrenheitMatch = lowerIssue.match(/(\d+(?:\.\d+)?)\s*(?:°?f|fahrenheit)\s*to\s*(?:°?c|celsius)/);
213
+ if (fahrenheitMatch && fahrenheitMatch[1]) {
214
+ const f = parseFloat(fahrenheitMatch[1]);
215
+ const c = ((f - 32) * 5) / 9;
216
+ return { success: true, output: `${f}°F = ${c.toFixed(1)}°C` };
217
+ }
218
+ return {
219
+ success: false,
220
+ output: '',
221
+ error: 'Unit conversion pattern not recognized',
222
+ };
223
+ }
224
+ catch (error) {
225
+ return {
226
+ success: false,
227
+ output: '',
228
+ error: error instanceof Error ? error.message : 'Unit conversion failed',
229
+ };
230
+ }
231
+ }
232
+ }
233
+ //# sourceMappingURL=CodingActionHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CodingActionHandler.js","sourceRoot":"","sources":["../../../../src/research/agent/actions/CodingActionHandler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * ReflectActionHandler - リフレクションアクション
3
+ *
4
+ * @requirement REQ-DR-001
5
+ * @design DES-v2.1.0-DeepResearchAgent
6
+ */
7
+ import type { LLMClientInterface, ReflectParams } from '../types.js';
8
+ import { BaseActionHandler, type ExecutionContext, type ActionResult, type ActionHandlerOptions } from './BaseActionHandler.js';
9
+ /**
10
+ * リフレクションアクションハンドラのオプション
11
+ */
12
+ export interface ReflectActionHandlerOptions extends ActionHandlerOptions {
13
+ /** LLMクライアント */
14
+ llmClient: LLMClientInterface;
15
+ }
16
+ /**
17
+ * 質問をサブ質問に分解するアクションハンドラ
18
+ */
19
+ export declare class ReflectActionHandler extends BaseActionHandler<ReflectParams> {
20
+ readonly actionType: "reflect";
21
+ private llmClient;
22
+ constructor(options: ReflectActionHandlerOptions);
23
+ /**
24
+ * リフレクションを実行
25
+ */
26
+ execute(params: ReflectParams, context: ExecutionContext): Promise<ActionResult>;
27
+ /**
28
+ * 単一の質問に対してリフレクション
29
+ */
30
+ private reflectOnQuestion;
31
+ }
32
+ //# sourceMappingURL=ReflectActionHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReflectActionHandler.d.ts","sourceRoot":"","sources":["../../../../src/research/agent/actions/ReflectActionHandler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,KAAK,YAAY,EAAE,KAAK,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAEhI;;GAEG;AACH,MAAM,WAAW,2BAA4B,SAAQ,oBAAoB;IACvE,gBAAgB;IAChB,SAAS,EAAE,kBAAkB,CAAC;CAC/B;AAED;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,iBAAiB,CAAC,aAAa,CAAC;IACxE,QAAQ,CAAC,UAAU,EAAG,SAAS,CAAU;IAEzC,OAAO,CAAC,SAAS,CAAqB;gBAE1B,OAAO,EAAE,2BAA2B;IAKhD;;OAEG;IACG,OAAO,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC;IA+CtF;;OAEG;YACW,iBAAiB;CA4DhC"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * ReflectActionHandler - リフレクションアクション
3
+ *
4
+ * @requirement REQ-DR-001
5
+ * @design DES-v2.1.0-DeepResearchAgent
6
+ */
7
+ import { BaseActionHandler } from './BaseActionHandler.js';
8
+ /**
9
+ * 質問をサブ質問に分解するアクションハンドラ
10
+ */
11
+ export class ReflectActionHandler extends BaseActionHandler {
12
+ actionType = 'reflect';
13
+ llmClient;
14
+ constructor(options) {
15
+ super(options);
16
+ this.llmClient = options.llmClient;
17
+ }
18
+ /**
19
+ * リフレクションを実行
20
+ */
21
+ async execute(params, context) {
22
+ const { questions } = params;
23
+ const knowledgeItems = [];
24
+ try {
25
+ // 現在のナレッジをコンテキストとして構築
26
+ const knowledgeContext = context.currentKnowledge
27
+ .slice(-10)
28
+ .map((k) => k.summary)
29
+ .join('\n');
30
+ // 各サブ質問に対してリフレクション
31
+ for (const question of questions) {
32
+ const reflectionResult = await this.reflectOnQuestion(question, context.question, knowledgeContext);
33
+ // リフレクション結果をナレッジアイテムとして保存
34
+ const item = this.createKnowledgeItem(`Sub-question: ${question}\n\nAnalysis: ${reflectionResult.analysis}\n\nGaps: ${reflectionResult.gaps.join(', ')}`, {
35
+ type: 'reflection',
36
+ title: `Reflection: ${question.slice(0, 50)}...`,
37
+ });
38
+ knowledgeItems.push(item);
39
+ }
40
+ return {
41
+ success: true,
42
+ knowledgeItems,
43
+ metadata: {
44
+ subQuestions: questions,
45
+ reflectionCount: knowledgeItems.length,
46
+ },
47
+ };
48
+ }
49
+ catch (error) {
50
+ return {
51
+ success: false,
52
+ knowledgeItems: [],
53
+ error: error instanceof Error ? error.message : 'Reflection failed',
54
+ };
55
+ }
56
+ }
57
+ /**
58
+ * 単一の質問に対してリフレクション
59
+ */
60
+ async reflectOnQuestion(subQuestion, mainQuestion, knowledgeContext) {
61
+ const prompt = `Analyze this sub-question in the context of the main research question.
62
+
63
+ Main Question: "${mainQuestion}"
64
+ Sub-question: "${subQuestion}"
65
+
66
+ Current Knowledge:
67
+ ${knowledgeContext || 'No knowledge gathered yet.'}
68
+
69
+ Provide:
70
+ 1. Analysis: How this sub-question relates to the main question
71
+ 2. Gaps: What information is still missing
72
+ 3. Suggested Queries: Search queries to fill the gaps
73
+
74
+ Respond in JSON format:
75
+ {
76
+ "analysis": "...",
77
+ "gaps": ["gap1", "gap2"],
78
+ "suggestedQueries": ["query1", "query2"]
79
+ }`;
80
+ const response = await this.llmClient.chat({
81
+ messages: [{ role: 'user', content: prompt }],
82
+ temperature: 0.7,
83
+ maxTokens: 800,
84
+ });
85
+ // トークン追跡
86
+ if (response.usage) {
87
+ this.tokenTracker.trackUsage(response.usage.promptTokens ?? 0, response.usage.completionTokens ?? 0);
88
+ }
89
+ try {
90
+ const jsonMatch = response.content.match(/\{[\s\S]*\}/);
91
+ if (jsonMatch) {
92
+ const parsed = JSON.parse(jsonMatch[0]);
93
+ return parsed;
94
+ }
95
+ }
96
+ catch {
97
+ // パース失敗
98
+ }
99
+ // デフォルト
100
+ return {
101
+ analysis: response.content,
102
+ gaps: ['More information needed'],
103
+ suggestedQueries: [subQuestion],
104
+ };
105
+ }
106
+ }
107
+ //# sourceMappingURL=ReflectActionHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReflectActionHandler.js","sourceRoot":"","sources":["../../../../src/research/agent/actions/ReflectActionHandler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * SearchActionHandler - Web検索アクション
3
+ *
4
+ * @requirement REQ-DR-001
5
+ * @requirement REQ-DR-009
6
+ * @design DES-v2.1.0-DeepResearchAgent
7
+ */
8
+ import type { WebSearchClient } from '@nahisaho/katashiro-collector';
9
+ import type { SearchParams } from '../types.js';
10
+ import { BaseActionHandler, type ExecutionContext, type ActionResult, type ActionHandlerOptions } from './BaseActionHandler.js';
11
+ /**
12
+ * 検索アクションハンドラのオプション
13
+ */
14
+ export interface SearchActionHandlerOptions extends ActionHandlerOptions {
15
+ /** Web検索クライアント */
16
+ searchClient: WebSearchClient;
17
+ }
18
+ /**
19
+ * Web検索を実行するアクションハンドラ
20
+ */
21
+ export declare class SearchActionHandler extends BaseActionHandler<SearchParams> {
22
+ readonly actionType: "search";
23
+ private searchClient;
24
+ constructor(options: SearchActionHandlerOptions);
25
+ /**
26
+ * 検索を実行
27
+ */
28
+ execute(params: SearchParams, _context: ExecutionContext): Promise<ActionResult>;
29
+ }
30
+ //# sourceMappingURL=SearchActionHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchActionHandler.d.ts","sourceRoot":"","sources":["../../../../src/research/agent/actions/SearchActionHandler.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,KAAK,YAAY,EAAE,KAAK,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAEhI;;GAEG;AACH,MAAM,WAAW,0BAA2B,SAAQ,oBAAoB;IACtE,kBAAkB;IAClB,YAAY,EAAE,eAAe,CAAC;CAC/B;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,iBAAiB,CAAC,YAAY,CAAC;IACtE,QAAQ,CAAC,UAAU,EAAG,QAAQ,CAAU;IAExC,OAAO,CAAC,YAAY,CAAkB;gBAE1B,OAAO,EAAE,0BAA0B;IAK/C;;OAEG;IACG,OAAO,CAAC,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC;CA2DvF"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * SearchActionHandler - Web検索アクション
3
+ *
4
+ * @requirement REQ-DR-001
5
+ * @requirement REQ-DR-009
6
+ * @design DES-v2.1.0-DeepResearchAgent
7
+ */
8
+ import { BaseActionHandler } from './BaseActionHandler.js';
9
+ /**
10
+ * Web検索を実行するアクションハンドラ
11
+ */
12
+ export class SearchActionHandler extends BaseActionHandler {
13
+ actionType = 'search';
14
+ searchClient;
15
+ constructor(options) {
16
+ super(options);
17
+ this.searchClient = options.searchClient;
18
+ }
19
+ /**
20
+ * 検索を実行
21
+ */
22
+ async execute(params, _context) {
23
+ const { searchQueries } = params;
24
+ const knowledgeItems = [];
25
+ const allUrls = [];
26
+ let urlIndex = 0;
27
+ try {
28
+ // 各クエリで検索を実行
29
+ for (const query of searchQueries) {
30
+ const provider = this.config.searchOptions?.providers?.[0] ?? 'duckduckgo';
31
+ const results = await this.searchClient.search({
32
+ query,
33
+ maxResults: this.config.searchOptions?.maxResultsPerQuery ?? 10,
34
+ }, { provider: provider });
35
+ // 検索結果からナレッジアイテムを生成
36
+ for (const result of results) {
37
+ // URLリストに追加
38
+ allUrls.push({
39
+ index: urlIndex++,
40
+ url: result.url,
41
+ title: result.title,
42
+ });
43
+ // スニペットからナレッジアイテムを生成
44
+ if (result.snippet) {
45
+ const item = this.createKnowledgeItem(`Title: ${result.title}\nSnippet: ${result.snippet}`, {
46
+ url: result.url,
47
+ title: result.title,
48
+ type: 'web',
49
+ });
50
+ knowledgeItems.push(item);
51
+ }
52
+ }
53
+ }
54
+ return {
55
+ success: true,
56
+ knowledgeItems,
57
+ metadata: {
58
+ searchQueries,
59
+ resultCount: allUrls.length,
60
+ urls: allUrls,
61
+ },
62
+ };
63
+ }
64
+ catch (error) {
65
+ return {
66
+ success: false,
67
+ knowledgeItems: [],
68
+ error: error instanceof Error ? error.message : 'Search failed',
69
+ };
70
+ }
71
+ }
72
+ }
73
+ //# sourceMappingURL=SearchActionHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchActionHandler.js","sourceRoot":"","sources":["../../../../src/research/agent/actions/SearchActionHandler.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAAE,iBAAiB,EAAuE,MAAM,wBAAwB,CAAC;AAUhI;;GAEG;AACH,MAAM,OAAO,mBAAoB,SAAQ,iBAA+B;IAC7D,UAAU,GAAG,QAAiB,CAAC;IAEhC,YAAY,CAAkB;IAEtC,YAAY,OAAmC;QAC7C,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,MAAoB,EAAE,QAA0B;QAC5D,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC;QACjC,MAAM,cAAc,GAAmC,EAAE,CAAC;QAC1D,MAAM,OAAO,GAAoD,EAAE,CAAC;QACpE,IAAI,QAAQ,GAAG,CAAC,CAAC;QAEjB,IAAI,CAAC;YACH,aAAa;YACb,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;gBAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC;gBAC3E,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAC5C;oBACE,KAAK;oBACL,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,kBAAkB,IAAI,EAAE;iBAChE,EACD,EAAE,QAAQ,EAAE,QAAwD,EAAE,CACvE,CAAC;gBAEF,oBAAoB;gBACpB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;oBAC7B,YAAY;oBACZ,OAAO,CAAC,IAAI,CAAC;wBACX,KAAK,EAAE,QAAQ,EAAE;wBACjB,GAAG,EAAE,MAAM,CAAC,GAAG;wBACf,KAAK,EAAE,MAAM,CAAC,KAAK;qBACpB,CAAC,CAAC;oBAEH,qBAAqB;oBACrB,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;wBACnB,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,CACnC,UAAU,MAAM,CAAC,KAAK,cAAc,MAAM,CAAC,OAAO,EAAE,EACpD;4BACE,GAAG,EAAE,MAAM,CAAC,GAAG;4BACf,KAAK,EAAE,MAAM,CAAC,KAAK;4BACnB,IAAI,EAAE,KAAK;yBACZ,CACF,CAAC;wBACF,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC5B,CAAC;gBACH,CAAC;YACH,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,cAAc;gBACd,QAAQ,EAAE;oBACR,aAAa;oBACb,WAAW,EAAE,OAAO,CAAC,MAAM;oBAC3B,IAAI,EAAE,OAAO;iBACd;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,cAAc,EAAE,EAAE;gBAClB,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;aAChE,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * VisitActionHandler - URLアクセスアクション
3
+ *
4
+ * @requirement REQ-DR-001
5
+ * @design DES-v2.1.0-DeepResearchAgent
6
+ */
7
+ import type { WebScraper } from '@nahisaho/katashiro-collector';
8
+ import type { VisitParams } from '../types.js';
9
+ import { BaseActionHandler, type ExecutionContext, type ActionResult, type ActionHandlerOptions } from './BaseActionHandler.js';
10
+ /**
11
+ * 訪問アクションハンドラのオプション
12
+ */
13
+ export interface VisitActionHandlerOptions extends ActionHandlerOptions {
14
+ /** Webスクレイパー */
15
+ scraper: WebScraper;
16
+ }
17
+ /**
18
+ * URLを訪問してコンテンツを取得するアクションハンドラ
19
+ */
20
+ export declare class VisitActionHandler extends BaseActionHandler<VisitParams> {
21
+ readonly actionType: "visit";
22
+ private scraper;
23
+ constructor(options: VisitActionHandlerOptions);
24
+ /**
25
+ * URLを訪問してコンテンツを取得
26
+ */
27
+ execute(params: VisitParams, context: ExecutionContext): Promise<ActionResult>;
28
+ /**
29
+ * ページコンテンツをフォーマット
30
+ */
31
+ private formatPageContent;
32
+ }
33
+ //# sourceMappingURL=VisitActionHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VisitActionHandler.d.ts","sourceRoot":"","sources":["../../../../src/research/agent/actions/VisitActionHandler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAkB,MAAM,+BAA+B,CAAC;AAEhF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,KAAK,YAAY,EAAE,KAAK,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAEhI;;GAEG;AACH,MAAM,WAAW,yBAA0B,SAAQ,oBAAoB;IACrE,gBAAgB;IAChB,OAAO,EAAE,UAAU,CAAC;CACrB;AAED;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,iBAAiB,CAAC,WAAW,CAAC;IACpE,QAAQ,CAAC,UAAU,EAAG,OAAO,CAAU;IAEvC,OAAO,CAAC,OAAO,CAAa;gBAEhB,OAAO,EAAE,yBAAyB;IAK9C;;OAEG;IACG,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC;IAuDpF;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAe1B"}