@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,189 @@
1
+ /**
2
+ * KnowledgeStore - 中間知識の管理
3
+ *
4
+ * @requirement REQ-DR-003
5
+ * @design DES-v2.1.0-DeepResearchAgent
6
+ */
7
+ /**
8
+ * 調査中に得た知識を構造化して蓄積するストア
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * const store = new KnowledgeStore();
13
+ *
14
+ * const id = store.add({
15
+ * question: 'What is AI ethics?',
16
+ * answer: 'AI ethics is...',
17
+ * type: 'url',
18
+ * references: ['https://example.com'],
19
+ * confidence: 0.9,
20
+ * });
21
+ *
22
+ * const items = store.search('ethics');
23
+ * const messages = store.toMessages();
24
+ * ```
25
+ */
26
+ export class KnowledgeStore {
27
+ items;
28
+ idCounter;
29
+ constructor() {
30
+ this.items = new Map();
31
+ this.idCounter = 0;
32
+ }
33
+ /**
34
+ * ナレッジアイテムを追加
35
+ */
36
+ add(item) {
37
+ const id = `knowledge-${++this.idCounter}`;
38
+ const fullItem = {
39
+ ...item,
40
+ id,
41
+ updated: new Date().toISOString(),
42
+ };
43
+ this.items.set(id, fullItem);
44
+ return id;
45
+ }
46
+ /**
47
+ * IDでアイテムを取得
48
+ */
49
+ get(id) {
50
+ return this.items.get(id);
51
+ }
52
+ /**
53
+ * 全アイテムを取得
54
+ */
55
+ getAll() {
56
+ return Array.from(this.items.values());
57
+ }
58
+ /**
59
+ * タイプでフィルタリング
60
+ */
61
+ getByType(type) {
62
+ return this.getAll().filter((item) => item.type === type);
63
+ }
64
+ /**
65
+ * キーワードで検索
66
+ */
67
+ search(query) {
68
+ const lowerQuery = query.toLowerCase();
69
+ return this.getAll().filter((item) => (item.question?.toLowerCase().includes(lowerQuery) ?? false) ||
70
+ (item.answer?.toLowerCase().includes(lowerQuery) ?? false) ||
71
+ (item.summary?.toLowerCase().includes(lowerQuery) ?? false) ||
72
+ (item.content?.toLowerCase().includes(lowerQuery) ?? false));
73
+ }
74
+ /**
75
+ * 信頼度でソート
76
+ */
77
+ getByConfidence(minConfidence = 0) {
78
+ return this.getAll()
79
+ .filter((item) => (item.confidence ?? 0) >= minConfidence)
80
+ .sort((a, b) => (b.confidence ?? 0) - (a.confidence ?? 0));
81
+ }
82
+ /**
83
+ * Q&A形式のメッセージに変換
84
+ */
85
+ toMessages() {
86
+ const messages = [];
87
+ for (const item of this.getAll()) {
88
+ // ユーザーの質問(questionがなければスキップ)
89
+ const questionText = item.question ?? item.summary ?? '';
90
+ if (!questionText)
91
+ continue;
92
+ messages.push({
93
+ role: 'user',
94
+ content: questionText.trim(),
95
+ });
96
+ // アシスタントの回答(メタデータ付き)
97
+ let answerContent = '';
98
+ if (item.updated && (item.type === 'url' || item.type === 'side-info')) {
99
+ answerContent += `<answer-datetime>\n${item.updated}\n</answer-datetime>\n\n`;
100
+ }
101
+ if (item.references && item.references.length > 0 && item.type === 'url') {
102
+ answerContent += `<url>\n${item.references[0]}\n</url>\n\n`;
103
+ }
104
+ answerContent += item.answer;
105
+ messages.push({
106
+ role: 'assistant',
107
+ content: answerContent.trim(),
108
+ });
109
+ }
110
+ return messages;
111
+ }
112
+ /**
113
+ * アイテムを更新
114
+ */
115
+ update(id, updates) {
116
+ const item = this.items.get(id);
117
+ if (!item)
118
+ return false;
119
+ this.items.set(id, {
120
+ ...item,
121
+ ...updates,
122
+ updated: new Date().toISOString(),
123
+ });
124
+ return true;
125
+ }
126
+ /**
127
+ * アイテムを削除
128
+ */
129
+ delete(id) {
130
+ return this.items.delete(id);
131
+ }
132
+ /**
133
+ * 全てクリア
134
+ */
135
+ clear() {
136
+ this.items.clear();
137
+ this.idCounter = 0;
138
+ }
139
+ /**
140
+ * アイテム数を取得
141
+ */
142
+ size() {
143
+ return this.items.size;
144
+ }
145
+ /**
146
+ * 重複チェック(同じ質問が既にあるか)
147
+ */
148
+ hasSimilarQuestion(question, threshold = 0.8) {
149
+ const normalizedQuestion = question.toLowerCase().trim();
150
+ for (const item of this.items.values()) {
151
+ const itemQuestion = item.question ?? item.summary ?? '';
152
+ const normalizedExisting = itemQuestion.toLowerCase().trim();
153
+ if (this.similarity(normalizedQuestion, normalizedExisting) >= threshold) {
154
+ return true;
155
+ }
156
+ }
157
+ return false;
158
+ }
159
+ /**
160
+ * 簡易的な類似度計算(Jaccard係数)
161
+ */
162
+ similarity(a, b) {
163
+ const setA = new Set(a.split(/\s+/));
164
+ const setB = new Set(b.split(/\s+/));
165
+ const intersection = new Set([...setA].filter((x) => setB.has(x)));
166
+ const union = new Set([...setA, ...setB]);
167
+ return intersection.size / union.size;
168
+ }
169
+ /**
170
+ * JSONにシリアライズ
171
+ */
172
+ toJSON() {
173
+ return this.getAll();
174
+ }
175
+ /**
176
+ * JSONからデシリアライズ
177
+ */
178
+ fromJSON(items) {
179
+ this.clear();
180
+ for (const item of items) {
181
+ this.items.set(item.id, item);
182
+ const numId = parseInt(item.id.replace('knowledge-', ''), 10);
183
+ if (!isNaN(numId) && numId > this.idCounter) {
184
+ this.idCounter = numId;
185
+ }
186
+ }
187
+ }
188
+ }
189
+ //# sourceMappingURL=KnowledgeStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KnowledgeStore.js","sourceRoot":"","sources":["../../../src/research/agent/KnowledgeStore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,111 @@
1
+ /**
2
+ * QueryRewriter - クエリ拡張・意図マイニング
3
+ *
4
+ * @requirement REQ-DR-002
5
+ * @design DES-v2.1.0-DeepResearchAgent
6
+ */
7
+ import type { LLMClientInterface, QuestionType } from './types.js';
8
+ import type { TokenTracker } from './TokenTracker.js';
9
+ /**
10
+ * 意図マイニングの層
11
+ */
12
+ export interface IntentLayer {
13
+ /** 層の番号(1-5) */
14
+ layer: number;
15
+ /** 層の名前 */
16
+ name: string;
17
+ /** この層で抽出された意図 */
18
+ intent: string;
19
+ /** 生成されたサブクエリ */
20
+ queries: string[];
21
+ }
22
+ /**
23
+ * クエリ書き換え結果
24
+ */
25
+ export interface RewriteResult {
26
+ /** 元のクエリ */
27
+ originalQuery: string;
28
+ /** 拡張されたクエリのリスト */
29
+ expandedQueries: string[];
30
+ /** 意図マイニング結果 */
31
+ intentLayers: IntentLayer[];
32
+ /** 質問タイプ */
33
+ questionType: QuestionType;
34
+ /** 複雑さスコア(1-10) */
35
+ complexityScore: number;
36
+ }
37
+ /**
38
+ * クエリ書き換えオプション
39
+ */
40
+ export interface QueryRewriterOptions {
41
+ /** LLMクライアント */
42
+ llmClient: LLMClientInterface;
43
+ /** トークントラッカー */
44
+ tokenTracker: TokenTracker;
45
+ /** 最大クエリ数 */
46
+ maxQueries?: number;
47
+ /** 言語 */
48
+ language?: string;
49
+ }
50
+ /**
51
+ * jina-ai風の5層意図マイニングを実装するクエリリライター
52
+ *
53
+ * 5つの層:
54
+ * 1. Surface Intent - 表面的な意図
55
+ * 2. Deep Intent - 深層の意図
56
+ * 3. Context Intent - 文脈的な意図
57
+ * 4. Domain Intent - ドメイン固有の意図
58
+ * 5. Meta Intent - メタ意図(なぜこの質問をしているか)
59
+ */
60
+ export declare class QueryRewriter {
61
+ private llmClient;
62
+ private tokenTracker;
63
+ private maxQueries;
64
+ private languageCode;
65
+ constructor(options: QueryRewriterOptions);
66
+ /**
67
+ * 言語コードを取得
68
+ */
69
+ get language(): string;
70
+ /**
71
+ * クエリを拡張・書き換え
72
+ */
73
+ rewrite(query: string): Promise<RewriteResult>;
74
+ /**
75
+ * 質問タイプを分析
76
+ */
77
+ private analyzeQuestionType;
78
+ /**
79
+ * 5層意図マイニング
80
+ */
81
+ private mineIntents;
82
+ /**
83
+ * デフォルトの意図層を生成
84
+ */
85
+ private createDefaultIntentLayers;
86
+ /**
87
+ * 意図層からクエリを抽出
88
+ */
89
+ private extractQueries;
90
+ /**
91
+ * 複雑さスコアを計算
92
+ */
93
+ private calculateComplexity;
94
+ /**
95
+ * サブ質問を生成(reflectアクション用)
96
+ */
97
+ generateSubQuestions(query: string, existingKnowledge: string[]): Promise<string[]>;
98
+ /**
99
+ * デフォルトのサブ質問を生成
100
+ */
101
+ private createDefaultSubQuestions;
102
+ /**
103
+ * クエリからメイントピックを抽出
104
+ */
105
+ private extractMainTopic;
106
+ /**
107
+ * フォローアップクエリを生成
108
+ */
109
+ generateFollowUpQueries(originalQuery: string, currentKnowledge: string[], gaps: string[]): Promise<string[]>;
110
+ }
111
+ //# sourceMappingURL=QueryRewriter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryRewriter.d.ts","sourceRoot":"","sources":["../../../src/research/agent/QueryRewriter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,gBAAgB;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW;IACX,IAAI,EAAE,MAAM,CAAC;IACb,kBAAkB;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,YAAY;IACZ,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB;IACnB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,gBAAgB;IAChB,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,YAAY;IACZ,YAAY,EAAE,YAAY,CAAC;IAC3B,mBAAmB;IACnB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,gBAAgB;IAChB,SAAS,EAAE,kBAAkB,CAAC;IAC9B,gBAAgB;IAChB,YAAY,EAAE,YAAY,CAAC;IAC3B,aAAa;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS;IACT,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;GASG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,YAAY,CAAS;gBAEjB,OAAO,EAAE,oBAAoB;IAOzC;;OAEG;IACH,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED;;OAEG;IACG,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAsBpD;;OAEG;YACW,mBAAmB;IA0CjC;;OAEG;YACW,WAAW;IAuEzB;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAmCjC;;OAEG;IACH,OAAO,CAAC,cAAc;IAYtB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA2B3B;;OAEG;IACG,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IA+CzF;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAQjC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAgCxB;;OAEG;IACG,uBAAuB,CAC3B,aAAa,EAAE,MAAM,EACrB,gBAAgB,EAAE,MAAM,EAAE,EAC1B,IAAI,EAAE,MAAM,EAAE,GACb,OAAO,CAAC,MAAM,EAAE,CAAC;CA0CrB"}
@@ -0,0 +1,350 @@
1
+ /**
2
+ * QueryRewriter - クエリ拡張・意図マイニング
3
+ *
4
+ * @requirement REQ-DR-002
5
+ * @design DES-v2.1.0-DeepResearchAgent
6
+ */
7
+ /**
8
+ * jina-ai風の5層意図マイニングを実装するクエリリライター
9
+ *
10
+ * 5つの層:
11
+ * 1. Surface Intent - 表面的な意図
12
+ * 2. Deep Intent - 深層の意図
13
+ * 3. Context Intent - 文脈的な意図
14
+ * 4. Domain Intent - ドメイン固有の意図
15
+ * 5. Meta Intent - メタ意図(なぜこの質問をしているか)
16
+ */
17
+ export class QueryRewriter {
18
+ llmClient;
19
+ tokenTracker;
20
+ maxQueries;
21
+ languageCode;
22
+ constructor(options) {
23
+ this.llmClient = options.llmClient;
24
+ this.tokenTracker = options.tokenTracker;
25
+ this.maxQueries = options.maxQueries ?? 10;
26
+ this.languageCode = options.language ?? 'en';
27
+ }
28
+ /**
29
+ * 言語コードを取得
30
+ */
31
+ get language() {
32
+ return this.languageCode;
33
+ }
34
+ /**
35
+ * クエリを拡張・書き換え
36
+ */
37
+ async rewrite(query) {
38
+ // 1. 質問タイプを分析
39
+ const questionType = await this.analyzeQuestionType(query);
40
+ // 2. 5層意図マイニング
41
+ const intentLayers = await this.mineIntents(query, questionType);
42
+ // 3. 拡張クエリを生成
43
+ const expandedQueries = this.extractQueries(intentLayers);
44
+ // 4. 複雑さスコアを計算
45
+ const complexityScore = this.calculateComplexity(query, intentLayers);
46
+ return {
47
+ originalQuery: query,
48
+ expandedQueries,
49
+ intentLayers,
50
+ questionType,
51
+ complexityScore,
52
+ };
53
+ }
54
+ /**
55
+ * 質問タイプを分析
56
+ */
57
+ async analyzeQuestionType(query) {
58
+ const prompt = `Analyze the following question and determine its type.
59
+
60
+ Question: "${query}"
61
+
62
+ Question Types:
63
+ - FACTUAL: Questions seeking specific facts (who, what, when, where)
64
+ - EXPLORATORY: Questions seeking broad understanding
65
+ - COMPARATIVE: Questions comparing multiple items
66
+ - CAUSAL: Questions about cause and effect (why, how)
67
+ - PROCEDURAL: Questions about how to do something
68
+ - EVALUATIVE: Questions seeking judgment or opinion
69
+
70
+ Respond with only the type name (e.g., "FACTUAL").`;
71
+ const response = await this.llmClient.chat({
72
+ messages: [{ role: 'user', content: prompt }],
73
+ temperature: 0.3,
74
+ maxTokens: 50,
75
+ });
76
+ // トークン追跡
77
+ if (response.usage) {
78
+ this.tokenTracker.trackUsage(response.usage.promptTokens ?? 0, response.usage.completionTokens ?? 0);
79
+ }
80
+ const typeMap = {
81
+ FACTUAL: 'factual',
82
+ EXPLORATORY: 'exploratory',
83
+ COMPARATIVE: 'comparative',
84
+ CAUSAL: 'causal',
85
+ PROCEDURAL: 'procedural',
86
+ EVALUATIVE: 'evaluative',
87
+ };
88
+ const content = response.content.trim().toUpperCase();
89
+ return typeMap[content] || 'exploratory';
90
+ }
91
+ /**
92
+ * 5層意図マイニング
93
+ */
94
+ async mineIntents(query, questionType) {
95
+ const prompt = `Perform 5-layer intent mining for the following question.
96
+
97
+ Question: "${query}"
98
+ Question Type: ${questionType}
99
+
100
+ Analyze the question at 5 different layers and generate search queries for each:
101
+
102
+ 1. **Surface Intent**: What is the literal meaning of the question?
103
+ 2. **Deep Intent**: What underlying information is the user really seeking?
104
+ 3. **Context Intent**: What contextual knowledge is needed to fully answer?
105
+ 4. **Domain Intent**: What domain-specific aspects should be explored?
106
+ 5. **Meta Intent**: Why might the user be asking this question?
107
+
108
+ For each layer, provide:
109
+ - The intent (what the user wants)
110
+ - 2-3 search queries to gather relevant information
111
+
112
+ Respond in JSON format:
113
+ {
114
+ "layers": [
115
+ {
116
+ "layer": 1,
117
+ "name": "Surface Intent",
118
+ "intent": "...",
119
+ "queries": ["query1", "query2"]
120
+ },
121
+ ...
122
+ ]
123
+ }`;
124
+ const response = await this.llmClient.chat({
125
+ messages: [{ role: 'user', content: prompt }],
126
+ temperature: 0.7,
127
+ maxTokens: 1500,
128
+ });
129
+ // トークン追跡
130
+ if (response.usage) {
131
+ this.tokenTracker.trackUsage(response.usage.promptTokens ?? 0, response.usage.completionTokens ?? 0);
132
+ }
133
+ try {
134
+ const jsonMatch = response.content.match(/\{[\s\S]*\}/);
135
+ if (!jsonMatch) {
136
+ return this.createDefaultIntentLayers(query);
137
+ }
138
+ const parsed = JSON.parse(jsonMatch[0]);
139
+ return parsed.layers.map((l) => ({
140
+ layer: l.layer,
141
+ name: l.name,
142
+ intent: l.intent,
143
+ queries: l.queries.slice(0, 3),
144
+ }));
145
+ }
146
+ catch {
147
+ return this.createDefaultIntentLayers(query);
148
+ }
149
+ }
150
+ /**
151
+ * デフォルトの意図層を生成
152
+ */
153
+ createDefaultIntentLayers(query) {
154
+ return [
155
+ {
156
+ layer: 1,
157
+ name: 'Surface Intent',
158
+ intent: `Direct answer to: ${query}`,
159
+ queries: [query, `${query} definition`, `${query} explanation`],
160
+ },
161
+ {
162
+ layer: 2,
163
+ name: 'Deep Intent',
164
+ intent: 'Understanding the core concept',
165
+ queries: [`${query} details`, `${query} in depth`],
166
+ },
167
+ {
168
+ layer: 3,
169
+ name: 'Context Intent',
170
+ intent: 'Related context and background',
171
+ queries: [`${query} background`, `${query} history`],
172
+ },
173
+ {
174
+ layer: 4,
175
+ name: 'Domain Intent',
176
+ intent: 'Domain-specific aspects',
177
+ queries: [`${query} applications`, `${query} examples`],
178
+ },
179
+ {
180
+ layer: 5,
181
+ name: 'Meta Intent',
182
+ intent: 'Practical implications',
183
+ queries: [`${query} importance`, `${query} impact`],
184
+ },
185
+ ];
186
+ }
187
+ /**
188
+ * 意図層からクエリを抽出
189
+ */
190
+ extractQueries(layers) {
191
+ const allQueries = [];
192
+ for (const layer of layers) {
193
+ allQueries.push(...layer.queries);
194
+ }
195
+ // 重複を除去して最大数に制限
196
+ const unique = [...new Set(allQueries)];
197
+ return unique.slice(0, this.maxQueries);
198
+ }
199
+ /**
200
+ * 複雑さスコアを計算
201
+ */
202
+ calculateComplexity(query, layers) {
203
+ let score = 1;
204
+ // クエリの長さ
205
+ if (query.length > 100)
206
+ score += 1;
207
+ if (query.length > 200)
208
+ score += 1;
209
+ // 単語数
210
+ const wordCount = query.split(/\s+/).length;
211
+ if (wordCount > 10)
212
+ score += 1;
213
+ if (wordCount > 20)
214
+ score += 1;
215
+ // 疑問詞の数
216
+ const questionWords = ['what', 'why', 'how', 'when', 'where', 'who', 'which'];
217
+ const questionWordCount = questionWords.filter((w) => query.toLowerCase().includes(w)).length;
218
+ score += Math.min(questionWordCount, 2);
219
+ // 意図層の多様性
220
+ const uniqueIntents = new Set(layers.map((l) => l.intent)).size;
221
+ if (uniqueIntents >= 4)
222
+ score += 1;
223
+ if (uniqueIntents >= 5)
224
+ score += 1;
225
+ return Math.min(score, 10);
226
+ }
227
+ /**
228
+ * サブ質問を生成(reflectアクション用)
229
+ */
230
+ async generateSubQuestions(query, existingKnowledge) {
231
+ const knowledgeContext = existingKnowledge.length > 0
232
+ ? `\n\nExisting knowledge:\n${existingKnowledge.slice(0, 5).join('\n')}`
233
+ : '';
234
+ const prompt = `Generate 3-5 sub-questions to help answer the main question.
235
+
236
+ Main Question: "${query}"
237
+ ${knowledgeContext}
238
+
239
+ Generate sub-questions that:
240
+ 1. Break down the main question into smaller, answerable parts
241
+ 2. Cover different aspects of the question
242
+ 3. Are specific and focused
243
+ 4. Avoid overlapping with existing knowledge
244
+
245
+ Respond with a JSON array of questions:
246
+ ["sub-question 1", "sub-question 2", ...]`;
247
+ const response = await this.llmClient.chat({
248
+ messages: [{ role: 'user', content: prompt }],
249
+ temperature: 0.7,
250
+ maxTokens: 500,
251
+ });
252
+ // トークン追跡
253
+ if (response.usage) {
254
+ this.tokenTracker.trackUsage(response.usage.promptTokens ?? 0, response.usage.completionTokens ?? 0);
255
+ }
256
+ try {
257
+ const jsonMatch = response.content.match(/\[[\s\S]*\]/);
258
+ if (!jsonMatch) {
259
+ return this.createDefaultSubQuestions(query);
260
+ }
261
+ const parsed = JSON.parse(jsonMatch[0]);
262
+ return parsed.slice(0, 5);
263
+ }
264
+ catch {
265
+ return this.createDefaultSubQuestions(query);
266
+ }
267
+ }
268
+ /**
269
+ * デフォルトのサブ質問を生成
270
+ */
271
+ createDefaultSubQuestions(query) {
272
+ return [
273
+ `What is the definition of ${this.extractMainTopic(query)}?`,
274
+ `What are the key aspects of ${this.extractMainTopic(query)}?`,
275
+ `What are the recent developments in ${this.extractMainTopic(query)}?`,
276
+ ];
277
+ }
278
+ /**
279
+ * クエリからメイントピックを抽出
280
+ */
281
+ extractMainTopic(query) {
282
+ // 疑問詞と一般的な単語を除去
283
+ const stopWords = [
284
+ 'what',
285
+ 'why',
286
+ 'how',
287
+ 'when',
288
+ 'where',
289
+ 'who',
290
+ 'which',
291
+ 'is',
292
+ 'are',
293
+ 'the',
294
+ 'a',
295
+ 'an',
296
+ 'of',
297
+ 'in',
298
+ 'to',
299
+ 'for',
300
+ 'about',
301
+ ];
302
+ const words = query
303
+ .toLowerCase()
304
+ .replace(/[?.,!]/g, '')
305
+ .split(/\s+/)
306
+ .filter((w) => !stopWords.includes(w));
307
+ // 最初の3語を結合
308
+ return words.slice(0, 3).join(' ') || query.slice(0, 50);
309
+ }
310
+ /**
311
+ * フォローアップクエリを生成
312
+ */
313
+ async generateFollowUpQueries(originalQuery, currentKnowledge, gaps) {
314
+ const prompt = `Generate follow-up search queries to fill knowledge gaps.
315
+
316
+ Original Question: "${originalQuery}"
317
+
318
+ Current Knowledge Summary:
319
+ ${currentKnowledge.slice(0, 5).join('\n')}
320
+
321
+ Identified Gaps:
322
+ ${gaps.join('\n')}
323
+
324
+ Generate 3-5 specific search queries to fill these gaps.
325
+ Respond with a JSON array:
326
+ ["query1", "query2", ...]`;
327
+ const response = await this.llmClient.chat({
328
+ messages: [{ role: 'user', content: prompt }],
329
+ temperature: 0.7,
330
+ maxTokens: 300,
331
+ });
332
+ // トークン追跡
333
+ if (response.usage) {
334
+ this.tokenTracker.trackUsage(response.usage.promptTokens ?? 0, response.usage.completionTokens ?? 0);
335
+ }
336
+ try {
337
+ const jsonMatch = response.content.match(/\[[\s\S]*\]/);
338
+ if (jsonMatch) {
339
+ const parsed = JSON.parse(jsonMatch[0]);
340
+ return parsed.slice(0, 5);
341
+ }
342
+ }
343
+ catch {
344
+ // パース失敗
345
+ }
346
+ // ギャップからクエリを生成
347
+ return gaps.slice(0, 3).map((gap) => `${originalQuery} ${gap}`);
348
+ }
349
+ }
350
+ //# sourceMappingURL=QueryRewriter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryRewriter.js","sourceRoot":"","sources":["../../../src/research/agent/QueryRewriter.ts"],"names":[],"mappings":"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"}