@nahisaho/katashiro-analyzer 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.
Files changed (153) hide show
  1. package/dist/factcheck/ClaimParser.d.ts +41 -0
  2. package/dist/factcheck/ClaimParser.d.ts.map +1 -0
  3. package/dist/factcheck/ClaimParser.js +149 -0
  4. package/dist/factcheck/ClaimParser.js.map +1 -0
  5. package/dist/factcheck/ConsistencyChecker.d.ts +56 -0
  6. package/dist/factcheck/ConsistencyChecker.d.ts.map +1 -0
  7. package/dist/factcheck/ConsistencyChecker.js +184 -0
  8. package/dist/factcheck/ConsistencyChecker.js.map +1 -0
  9. package/dist/factcheck/EvidenceCollector.d.ts +89 -0
  10. package/dist/factcheck/EvidenceCollector.d.ts.map +1 -0
  11. package/dist/factcheck/EvidenceCollector.js +222 -0
  12. package/dist/factcheck/EvidenceCollector.js.map +1 -0
  13. package/dist/factcheck/FactChecker.d.ts +81 -0
  14. package/dist/factcheck/FactChecker.d.ts.map +1 -0
  15. package/dist/factcheck/FactChecker.js +302 -0
  16. package/dist/factcheck/FactChecker.js.map +1 -0
  17. package/dist/factcheck/TrustedSourceRegistry.d.ts +47 -0
  18. package/dist/factcheck/TrustedSourceRegistry.d.ts.map +1 -0
  19. package/dist/factcheck/TrustedSourceRegistry.js +208 -0
  20. package/dist/factcheck/TrustedSourceRegistry.js.map +1 -0
  21. package/dist/factcheck/VerdictGenerator.d.ts +36 -0
  22. package/dist/factcheck/VerdictGenerator.d.ts.map +1 -0
  23. package/dist/factcheck/VerdictGenerator.js +154 -0
  24. package/dist/factcheck/VerdictGenerator.js.map +1 -0
  25. package/dist/factcheck/index.d.ts +15 -0
  26. package/dist/factcheck/index.d.ts.map +1 -0
  27. package/dist/factcheck/index.js +14 -0
  28. package/dist/factcheck/index.js.map +1 -0
  29. package/dist/factcheck/types.d.ts +265 -0
  30. package/dist/factcheck/types.d.ts.map +1 -0
  31. package/dist/factcheck/types.js +18 -0
  32. package/dist/factcheck/types.js.map +1 -0
  33. package/dist/index.d.ts +5 -0
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +10 -0
  36. package/dist/index.js.map +1 -1
  37. package/dist/interpreter/CodeInterpreter.d.ts +119 -0
  38. package/dist/interpreter/CodeInterpreter.d.ts.map +1 -0
  39. package/dist/interpreter/CodeInterpreter.js +241 -0
  40. package/dist/interpreter/CodeInterpreter.js.map +1 -0
  41. package/dist/interpreter/CodeValidator.d.ts +57 -0
  42. package/dist/interpreter/CodeValidator.d.ts.map +1 -0
  43. package/dist/interpreter/CodeValidator.js +283 -0
  44. package/dist/interpreter/CodeValidator.js.map +1 -0
  45. package/dist/interpreter/ExecutionEngine.d.ts +73 -0
  46. package/dist/interpreter/ExecutionEngine.d.ts.map +1 -0
  47. package/dist/interpreter/ExecutionEngine.js +273 -0
  48. package/dist/interpreter/ExecutionEngine.js.map +1 -0
  49. package/dist/interpreter/ResultFormatter.d.ts +72 -0
  50. package/dist/interpreter/ResultFormatter.d.ts.map +1 -0
  51. package/dist/interpreter/ResultFormatter.js +187 -0
  52. package/dist/interpreter/ResultFormatter.js.map +1 -0
  53. package/dist/interpreter/SandboxManager.d.ts +111 -0
  54. package/dist/interpreter/SandboxManager.d.ts.map +1 -0
  55. package/dist/interpreter/SandboxManager.js +215 -0
  56. package/dist/interpreter/SandboxManager.js.map +1 -0
  57. package/dist/interpreter/SessionManager.d.ts +101 -0
  58. package/dist/interpreter/SessionManager.d.ts.map +1 -0
  59. package/dist/interpreter/SessionManager.js +184 -0
  60. package/dist/interpreter/SessionManager.js.map +1 -0
  61. package/dist/interpreter/index.d.ts +13 -0
  62. package/dist/interpreter/index.d.ts.map +1 -0
  63. package/dist/interpreter/index.js +13 -0
  64. package/dist/interpreter/index.js.map +1 -0
  65. package/dist/interpreter/types.d.ts +311 -0
  66. package/dist/interpreter/types.d.ts.map +1 -0
  67. package/dist/interpreter/types.js +91 -0
  68. package/dist/interpreter/types.js.map +1 -0
  69. package/dist/moa/AgentOrchestrator.d.ts +53 -0
  70. package/dist/moa/AgentOrchestrator.d.ts.map +1 -0
  71. package/dist/moa/AgentOrchestrator.js +164 -0
  72. package/dist/moa/AgentOrchestrator.js.map +1 -0
  73. package/dist/moa/ConsensusCalculator.d.ts +76 -0
  74. package/dist/moa/ConsensusCalculator.d.ts.map +1 -0
  75. package/dist/moa/ConsensusCalculator.js +221 -0
  76. package/dist/moa/ConsensusCalculator.js.map +1 -0
  77. package/dist/moa/MoAEngine.d.ts +97 -0
  78. package/dist/moa/MoAEngine.d.ts.map +1 -0
  79. package/dist/moa/MoAEngine.js +303 -0
  80. package/dist/moa/MoAEngine.js.map +1 -0
  81. package/dist/moa/ResponseAggregator.d.ts +65 -0
  82. package/dist/moa/ResponseAggregator.d.ts.map +1 -0
  83. package/dist/moa/ResponseAggregator.js +274 -0
  84. package/dist/moa/ResponseAggregator.js.map +1 -0
  85. package/dist/moa/TaskAnalyzer.d.ts +30 -0
  86. package/dist/moa/TaskAnalyzer.d.ts.map +1 -0
  87. package/dist/moa/TaskAnalyzer.js +116 -0
  88. package/dist/moa/TaskAnalyzer.js.map +1 -0
  89. package/dist/moa/index.d.ts +19 -0
  90. package/dist/moa/index.d.ts.map +1 -0
  91. package/dist/moa/index.js +18 -0
  92. package/dist/moa/index.js.map +1 -0
  93. package/dist/moa/types.d.ts +261 -0
  94. package/dist/moa/types.d.ts.map +1 -0
  95. package/dist/moa/types.js +70 -0
  96. package/dist/moa/types.js.map +1 -0
  97. package/dist/research/ConvergenceDetector.d.ts +37 -0
  98. package/dist/research/ConvergenceDetector.d.ts.map +1 -0
  99. package/dist/research/ConvergenceDetector.js +62 -0
  100. package/dist/research/ConvergenceDetector.js.map +1 -0
  101. package/dist/research/DeepResearchOrchestrator.d.ts +63 -0
  102. package/dist/research/DeepResearchOrchestrator.d.ts.map +1 -0
  103. package/dist/research/DeepResearchOrchestrator.js +283 -0
  104. package/dist/research/DeepResearchOrchestrator.js.map +1 -0
  105. package/dist/research/FindingIntegrator.d.ts +42 -0
  106. package/dist/research/FindingIntegrator.d.ts.map +1 -0
  107. package/dist/research/FindingIntegrator.js +239 -0
  108. package/dist/research/FindingIntegrator.js.map +1 -0
  109. package/dist/research/GapAnalyzer.d.ts +41 -0
  110. package/dist/research/GapAnalyzer.d.ts.map +1 -0
  111. package/dist/research/GapAnalyzer.js +145 -0
  112. package/dist/research/GapAnalyzer.js.map +1 -0
  113. package/dist/research/QueryGenerator.d.ts +38 -0
  114. package/dist/research/QueryGenerator.d.ts.map +1 -0
  115. package/dist/research/QueryGenerator.js +79 -0
  116. package/dist/research/QueryGenerator.js.map +1 -0
  117. package/dist/research/index.d.ts +14 -0
  118. package/dist/research/index.d.ts.map +1 -0
  119. package/dist/research/index.js +13 -0
  120. package/dist/research/index.js.map +1 -0
  121. package/dist/research/types.d.ts +215 -0
  122. package/dist/research/types.d.ts.map +1 -0
  123. package/dist/research/types.js +18 -0
  124. package/dist/research/types.js.map +1 -0
  125. package/dist/trend/ForecastEngine.d.ts +65 -0
  126. package/dist/trend/ForecastEngine.d.ts.map +1 -0
  127. package/dist/trend/ForecastEngine.js +260 -0
  128. package/dist/trend/ForecastEngine.js.map +1 -0
  129. package/dist/trend/TimeSeriesCollector.d.ts +42 -0
  130. package/dist/trend/TimeSeriesCollector.d.ts.map +1 -0
  131. package/dist/trend/TimeSeriesCollector.js +172 -0
  132. package/dist/trend/TimeSeriesCollector.js.map +1 -0
  133. package/dist/trend/TrendAnalyzer.d.ts +72 -0
  134. package/dist/trend/TrendAnalyzer.d.ts.map +1 -0
  135. package/dist/trend/TrendAnalyzer.js +291 -0
  136. package/dist/trend/TrendAnalyzer.js.map +1 -0
  137. package/dist/trend/TrendDetector.d.ts +67 -0
  138. package/dist/trend/TrendDetector.d.ts.map +1 -0
  139. package/dist/trend/TrendDetector.js +325 -0
  140. package/dist/trend/TrendDetector.js.map +1 -0
  141. package/dist/trend/VisualizationGenerator.d.ts +75 -0
  142. package/dist/trend/VisualizationGenerator.d.ts.map +1 -0
  143. package/dist/trend/VisualizationGenerator.js +294 -0
  144. package/dist/trend/VisualizationGenerator.js.map +1 -0
  145. package/dist/trend/index.d.ts +16 -0
  146. package/dist/trend/index.d.ts.map +1 -0
  147. package/dist/trend/index.js +18 -0
  148. package/dist/trend/index.js.map +1 -0
  149. package/dist/trend/types.d.ts +279 -0
  150. package/dist/trend/types.d.ts.map +1 -0
  151. package/dist/trend/types.js +17 -0
  152. package/dist/trend/types.js.map +1 -0
  153. package/package.json +4 -2
@@ -0,0 +1,65 @@
1
+ /**
2
+ * ForecastEngine - 予測エンジン
3
+ *
4
+ * @requirement REQ-ANALYZE-004
5
+ * @design DES-ANALYZE-004
6
+ * @task TASK-004
7
+ */
8
+ import type { TimeSeriesData, ForecastData, ForecastConfig } from './types.js';
9
+ /**
10
+ * 時系列データから将来の値を予測するクラス
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * const forecaster = new ForecastEngine();
15
+ *
16
+ * const forecast = forecaster.forecast(timeSeriesData, {
17
+ * periods: 7,
18
+ * method: 'linear',
19
+ * confidenceLevel: 0.95,
20
+ * });
21
+ * ```
22
+ */
23
+ export declare class ForecastEngine {
24
+ /**
25
+ * 時系列データから将来の値を予測
26
+ */
27
+ forecast(data: TimeSeriesData[], config?: Partial<ForecastConfig>): ForecastData;
28
+ /**
29
+ * 線形回帰による予測
30
+ */
31
+ private linearForecast;
32
+ /**
33
+ * 指数平滑法による予測
34
+ */
35
+ private exponentialForecast;
36
+ /**
37
+ * 移動平均による予測
38
+ */
39
+ private movingAverageForecast;
40
+ /**
41
+ * 線形回帰パラメータを計算
42
+ */
43
+ private calculateLinearParams;
44
+ /**
45
+ * モデルの精度を計算
46
+ */
47
+ private calculateModelAccuracy;
48
+ /**
49
+ * 信頼水準からZスコアを取得
50
+ */
51
+ private getZScore;
52
+ /**
53
+ * 平均値を計算
54
+ */
55
+ private average;
56
+ /**
57
+ * 二乗和を計算
58
+ */
59
+ private sumOfSquares;
60
+ /**
61
+ * 空の予測を作成
62
+ */
63
+ private createEmptyForecast;
64
+ }
65
+ //# sourceMappingURL=ForecastEngine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ForecastEngine.d.ts","sourceRoot":"","sources":["../../src/trend/ForecastEngine.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE/E;;;;;;;;;;;;;GAaG;AACH,qBAAa,cAAc;IACzB;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,cAAc,EAAE,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,YAAY;IAuBhF;;OAEG;IACH,OAAO,CAAC,cAAc;IAgDtB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA8D3B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAoD7B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAwB7B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAkB9B;;OAEG;IACH,OAAO,CAAC,SAAS;IASjB;;OAEG;IACH,OAAO,CAAC,OAAO;IAIf;;OAEG;IACH,OAAO,CAAC,YAAY;IASpB;;OAEG;IACH,OAAO,CAAC,mBAAmB;CAc5B"}
@@ -0,0 +1,260 @@
1
+ /**
2
+ * ForecastEngine - 予測エンジン
3
+ *
4
+ * @requirement REQ-ANALYZE-004
5
+ * @design DES-ANALYZE-004
6
+ * @task TASK-004
7
+ */
8
+ /**
9
+ * 時系列データから将来の値を予測するクラス
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * const forecaster = new ForecastEngine();
14
+ *
15
+ * const forecast = forecaster.forecast(timeSeriesData, {
16
+ * periods: 7,
17
+ * method: 'linear',
18
+ * confidenceLevel: 0.95,
19
+ * });
20
+ * ```
21
+ */
22
+ export class ForecastEngine {
23
+ /**
24
+ * 時系列データから将来の値を予測
25
+ */
26
+ forecast(data, config) {
27
+ const periods = config?.periods ?? 7;
28
+ const method = config?.method ?? 'linear';
29
+ const confidenceLevel = config?.confidenceLevel ?? 0.95;
30
+ if (data.length < 2) {
31
+ return this.createEmptyForecast(periods);
32
+ }
33
+ const volumes = data.map((d) => d.volume);
34
+ switch (method) {
35
+ case 'linear':
36
+ return this.linearForecast(data, volumes, periods, confidenceLevel);
37
+ case 'exponential':
38
+ return this.exponentialForecast(data, volumes, periods, confidenceLevel);
39
+ case 'movingAverage':
40
+ return this.movingAverageForecast(data, volumes, periods, confidenceLevel);
41
+ default:
42
+ return this.linearForecast(data, volumes, periods, confidenceLevel);
43
+ }
44
+ }
45
+ /**
46
+ * 線形回帰による予測
47
+ */
48
+ linearForecast(data, volumes, periods, confidenceLevel) {
49
+ const n = volumes.length;
50
+ // 線形回帰パラメータを計算
51
+ const { slope, intercept, stdError } = this.calculateLinearParams(volumes);
52
+ // 時間間隔を推定(最後の2点から)
53
+ const lastItem = data[data.length - 1];
54
+ const prevItem = data.length > 1 ? data[data.length - 2] : lastItem;
55
+ const lastDate = lastItem?.timestamp ?? new Date();
56
+ const prevDate = prevItem?.timestamp ?? lastDate;
57
+ const intervalMs = lastDate.getTime() - prevDate.getTime();
58
+ // 予測値を計算
59
+ const predictions = [];
60
+ const upperBound = [];
61
+ const lowerBound = [];
62
+ const zScore = this.getZScore(confidenceLevel);
63
+ for (let i = 1; i <= periods; i++) {
64
+ const x = n + i - 1;
65
+ const predictedValue = slope * x + intercept;
66
+ const marginOfError = zScore * stdError * Math.sqrt(1 + 1 / n + Math.pow(x - (n - 1) / 2, 2) / this.sumOfSquares(n));
67
+ predictions.push({
68
+ date: new Date(lastDate.getTime() + intervalMs * i),
69
+ value: Math.max(0, predictedValue),
70
+ });
71
+ upperBound.push(Math.max(0, predictedValue + marginOfError));
72
+ lowerBound.push(Math.max(0, predictedValue - marginOfError));
73
+ }
74
+ return {
75
+ method: 'linear',
76
+ predictions,
77
+ upperBound,
78
+ lowerBound,
79
+ confidenceLevel,
80
+ accuracy: this.calculateModelAccuracy(volumes, slope, intercept),
81
+ };
82
+ }
83
+ /**
84
+ * 指数平滑法による予測
85
+ */
86
+ exponentialForecast(data, volumes, periods, confidenceLevel) {
87
+ const alpha = 0.3; // 平滑化係数
88
+ const n = volumes.length;
89
+ // 指数平滑化された値を計算
90
+ let smoothed = volumes[0] ?? 0;
91
+ for (let i = 1; i < n; i++) {
92
+ const vol = volumes[i] ?? 0;
93
+ smoothed = alpha * vol + (1 - alpha) * smoothed;
94
+ }
95
+ // 標準誤差を計算
96
+ let sse = 0;
97
+ let prevSmoothed = volumes[0] ?? 0;
98
+ for (let i = 1; i < n; i++) {
99
+ const vol = volumes[i] ?? 0;
100
+ const error = vol - prevSmoothed;
101
+ sse += error * error;
102
+ prevSmoothed = alpha * vol + (1 - alpha) * prevSmoothed;
103
+ }
104
+ const stdError = Math.sqrt(sse / (n - 1));
105
+ // 時間間隔を推定
106
+ const lastItem = data[data.length - 1];
107
+ const prevItem = data.length > 1 ? data[data.length - 2] : lastItem;
108
+ const lastDate = lastItem?.timestamp ?? new Date();
109
+ const prevDate = prevItem?.timestamp ?? lastDate;
110
+ const intervalMs = lastDate.getTime() - prevDate.getTime();
111
+ // 予測値を計算(指数平滑法では全期間同じ値)
112
+ const predictions = [];
113
+ const upperBound = [];
114
+ const lowerBound = [];
115
+ const zScore = this.getZScore(confidenceLevel);
116
+ for (let i = 1; i <= periods; i++) {
117
+ const marginOfError = zScore * stdError * Math.sqrt(i);
118
+ predictions.push({
119
+ date: new Date(lastDate.getTime() + intervalMs * i),
120
+ value: Math.max(0, smoothed),
121
+ });
122
+ upperBound.push(Math.max(0, smoothed + marginOfError));
123
+ lowerBound.push(Math.max(0, smoothed - marginOfError));
124
+ }
125
+ return {
126
+ method: 'exponential',
127
+ predictions,
128
+ upperBound,
129
+ lowerBound,
130
+ confidenceLevel,
131
+ accuracy: 1 - stdError / (this.average(volumes) || 1),
132
+ };
133
+ }
134
+ /**
135
+ * 移動平均による予測
136
+ */
137
+ movingAverageForecast(data, volumes, periods, confidenceLevel) {
138
+ const windowSize = Math.min(5, Math.floor(volumes.length / 2));
139
+ // 移動平均を計算
140
+ const recentValues = volumes.slice(-windowSize);
141
+ const movingAvg = this.average(recentValues);
142
+ // 標準偏差を計算
143
+ const stdDev = Math.sqrt(recentValues.reduce((sum, v) => sum + Math.pow(v - movingAvg, 2), 0) / windowSize);
144
+ // 時間間隔を推定
145
+ const lastItem = data[data.length - 1];
146
+ const prevItem = data.length > 1 ? data[data.length - 2] : lastItem;
147
+ const lastDate = lastItem?.timestamp ?? new Date();
148
+ const prevDate = prevItem?.timestamp ?? lastDate;
149
+ const intervalMs = lastDate.getTime() - prevDate.getTime();
150
+ // 予測値を計算
151
+ const predictions = [];
152
+ const upperBound = [];
153
+ const lowerBound = [];
154
+ const zScore = this.getZScore(confidenceLevel);
155
+ for (let i = 1; i <= periods; i++) {
156
+ const marginOfError = zScore * stdDev;
157
+ predictions.push({
158
+ date: new Date(lastDate.getTime() + intervalMs * i),
159
+ value: Math.max(0, movingAvg),
160
+ });
161
+ upperBound.push(Math.max(0, movingAvg + marginOfError));
162
+ lowerBound.push(Math.max(0, movingAvg - marginOfError));
163
+ }
164
+ return {
165
+ method: 'movingAverage',
166
+ predictions,
167
+ upperBound,
168
+ lowerBound,
169
+ confidenceLevel,
170
+ accuracy: 1 - stdDev / (movingAvg || 1),
171
+ };
172
+ }
173
+ /**
174
+ * 線形回帰パラメータを計算
175
+ */
176
+ calculateLinearParams(values) {
177
+ const n = values.length;
178
+ if (n === 0)
179
+ return { slope: 0, intercept: 0, stdError: 0 };
180
+ const xSum = (n * (n - 1)) / 2;
181
+ const ySum = values.reduce((a, b) => a + b, 0);
182
+ const xySum = values.reduce((sum, y, x) => sum + x * y, 0);
183
+ const x2Sum = (n * (n - 1) * (2 * n - 1)) / 6;
184
+ const slope = (n * xySum - xSum * ySum) / (n * x2Sum - xSum * xSum || 1);
185
+ const intercept = (ySum - slope * xSum) / n;
186
+ // 残差の標準誤差を計算
187
+ let sse = 0;
188
+ for (let i = 0; i < n; i++) {
189
+ const predicted = slope * i + intercept;
190
+ const val = values[i] ?? 0;
191
+ sse += Math.pow(val - predicted, 2);
192
+ }
193
+ const stdError = Math.sqrt(sse / (n - 2 || 1));
194
+ return { slope, intercept, stdError };
195
+ }
196
+ /**
197
+ * モデルの精度を計算
198
+ */
199
+ calculateModelAccuracy(values, slope, intercept) {
200
+ const n = values.length;
201
+ if (n === 0)
202
+ return 0;
203
+ const yMean = this.average(values);
204
+ let ssTotal = 0;
205
+ let ssRes = 0;
206
+ for (let i = 0; i < n; i++) {
207
+ const predicted = slope * i + intercept;
208
+ const val = values[i] ?? 0;
209
+ ssTotal += Math.pow(val - yMean, 2);
210
+ ssRes += Math.pow(val - predicted, 2);
211
+ }
212
+ return ssTotal === 0 ? 0 : Math.max(0, 1 - ssRes / ssTotal);
213
+ }
214
+ /**
215
+ * 信頼水準からZスコアを取得
216
+ */
217
+ getZScore(confidenceLevel) {
218
+ const zScores = {
219
+ 0.9: 1.645,
220
+ 0.95: 1.96,
221
+ 0.99: 2.576,
222
+ };
223
+ return zScores[confidenceLevel] ?? 1.96;
224
+ }
225
+ /**
226
+ * 平均値を計算
227
+ */
228
+ average(values) {
229
+ return values.length === 0 ? 0 : values.reduce((a, b) => a + b, 0) / values.length;
230
+ }
231
+ /**
232
+ * 二乗和を計算
233
+ */
234
+ sumOfSquares(n) {
235
+ let sum = 0;
236
+ const mean = (n - 1) / 2;
237
+ for (let i = 0; i < n; i++) {
238
+ sum += Math.pow(i - mean, 2);
239
+ }
240
+ return sum || 1;
241
+ }
242
+ /**
243
+ * 空の予測を作成
244
+ */
245
+ createEmptyForecast(periods) {
246
+ const now = new Date();
247
+ return {
248
+ method: 'linear',
249
+ predictions: Array.from({ length: periods }, (_, i) => ({
250
+ date: new Date(now.getTime() + (i + 1) * 24 * 60 * 60 * 1000),
251
+ value: 0,
252
+ })),
253
+ upperBound: Array(periods).fill(0),
254
+ lowerBound: Array(periods).fill(0),
255
+ confidenceLevel: 0.95,
256
+ accuracy: 0,
257
+ };
258
+ }
259
+ }
260
+ //# sourceMappingURL=ForecastEngine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ForecastEngine.js","sourceRoot":"","sources":["../../src/trend/ForecastEngine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * TimeSeriesCollector - 時系列データの収集
3
+ *
4
+ * @requirement REQ-ANALYZE-004
5
+ * @design DES-ANALYZE-004
6
+ * @task TASK-004
7
+ */
8
+ import { type Result } from '@nahisaho/katashiro-core';
9
+ import type { CollectionQuery, TimeSeriesData, TrendAnalysisError } from './types.js';
10
+ /**
11
+ * 時系列データを収集するクラス
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * const collector = new TimeSeriesCollector();
16
+ *
17
+ * const result = await collector.collect({
18
+ * topic: 'AI',
19
+ * startDate: new Date('2025-01-01'),
20
+ * endDate: new Date('2025-12-31'),
21
+ * granularity: 'weekly',
22
+ * sources: ['news', 'web'],
23
+ * });
24
+ * ```
25
+ */
26
+ export declare class TimeSeriesCollector {
27
+ private searchClient;
28
+ constructor();
29
+ /**
30
+ * 時系列データを収集
31
+ */
32
+ collect(query: CollectionQuery): Promise<Result<TimeSeriesData[], TrendAnalysisError>>;
33
+ /**
34
+ * 単一ソースからデータを収集
35
+ */
36
+ private collectFromSource;
37
+ /**
38
+ * 時間バケットを作成
39
+ */
40
+ private createTimeBuckets;
41
+ }
42
+ //# sourceMappingURL=TimeSeriesCollector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TimeSeriesCollector.d.ts","sourceRoot":"","sources":["../../src/trend/TimeSeriesCollector.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAEhE,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EAId,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAEpB;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,YAAY,CAAkB;;IAMtC;;OAEG;IACG,OAAO,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,EAAE,kBAAkB,CAAC,CAAC;IAkE5F;;OAEG;YACW,iBAAiB;IAwD/B;;OAEG;IACH,OAAO,CAAC,iBAAiB;CA6C1B"}
@@ -0,0 +1,172 @@
1
+ /**
2
+ * TimeSeriesCollector - 時系列データの収集
3
+ *
4
+ * @requirement REQ-ANALYZE-004
5
+ * @design DES-ANALYZE-004
6
+ * @task TASK-004
7
+ */
8
+ import { ok, err } from '@nahisaho/katashiro-core';
9
+ import { WebSearchClient } from '@nahisaho/katashiro-collector';
10
+ /**
11
+ * 時系列データを収集するクラス
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * const collector = new TimeSeriesCollector();
16
+ *
17
+ * const result = await collector.collect({
18
+ * topic: 'AI',
19
+ * startDate: new Date('2025-01-01'),
20
+ * endDate: new Date('2025-12-31'),
21
+ * granularity: 'weekly',
22
+ * sources: ['news', 'web'],
23
+ * });
24
+ * ```
25
+ */
26
+ export class TimeSeriesCollector {
27
+ searchClient;
28
+ constructor() {
29
+ this.searchClient = new WebSearchClient();
30
+ }
31
+ /**
32
+ * 時系列データを収集
33
+ */
34
+ async collect(query) {
35
+ try {
36
+ const buckets = this.createTimeBuckets(query.startDate, query.endDate, query.granularity);
37
+ // 各ソースからデータを収集
38
+ const sourceResults = await Promise.allSettled(query.sources.map((source) => this.collectFromSource(query.topic, source, query.startDate, query.endDate)));
39
+ // 結果を時間バケットに振り分け
40
+ const allDocs = [];
41
+ for (const result of sourceResults) {
42
+ if (result.status === 'fulfilled') {
43
+ allDocs.push(...result.value);
44
+ }
45
+ }
46
+ if (allDocs.length === 0) {
47
+ // データがない場合は空のシリーズを返す
48
+ return ok(buckets.map((bucket) => ({
49
+ timestamp: bucket.start,
50
+ volume: 0,
51
+ normalizedScore: 0,
52
+ sourceBreakdown: {},
53
+ sampleDocs: [],
54
+ })));
55
+ }
56
+ // バケットごとに集計
57
+ const timeSeries = buckets.map((bucket) => {
58
+ const docsInBucket = allDocs.filter((doc) => doc.publishedAt >= bucket.start && doc.publishedAt < bucket.end);
59
+ const sourceBreakdown = {};
60
+ for (const doc of docsInBucket) {
61
+ sourceBreakdown[doc.source] = (sourceBreakdown[doc.source] || 0) + 1;
62
+ }
63
+ return {
64
+ timestamp: bucket.start,
65
+ volume: docsInBucket.length,
66
+ normalizedScore: 0, // 後で正規化
67
+ sourceBreakdown,
68
+ sampleDocs: docsInBucket.slice(0, 5), // 最大5件のサンプル
69
+ };
70
+ });
71
+ // 正規化
72
+ const maxVolume = Math.max(...timeSeries.map((ts) => ts.volume), 1);
73
+ for (const ts of timeSeries) {
74
+ ts.normalizedScore = (ts.volume / maxVolume) * 100;
75
+ }
76
+ return ok(timeSeries);
77
+ }
78
+ catch (error) {
79
+ return err({
80
+ code: 'COLLECTION_FAILED',
81
+ message: error instanceof Error ? error.message : 'Unknown error during collection',
82
+ details: error,
83
+ });
84
+ }
85
+ }
86
+ /**
87
+ * 単一ソースからデータを収集
88
+ */
89
+ async collectFromSource(topic, source, startDate, endDate) {
90
+ const docs = [];
91
+ switch (source) {
92
+ case 'news':
93
+ case 'web': {
94
+ const searchResult = await this.searchClient.search({
95
+ query: topic,
96
+ maxResults: 50,
97
+ });
98
+ if (searchResult && Array.isArray(searchResult)) {
99
+ for (const result of searchResult) {
100
+ // 日付情報がない場合は現在日付を使用
101
+ const publishedAt = new Date();
102
+ if (publishedAt >= startDate && publishedAt <= endDate) {
103
+ docs.push({
104
+ title: result.title,
105
+ url: result.url,
106
+ publishedAt,
107
+ source,
108
+ relevanceScore: 0.8,
109
+ });
110
+ }
111
+ }
112
+ }
113
+ break;
114
+ }
115
+ case 'rss': {
116
+ // RSSフィードからの収集(フィードURLがある場合)
117
+ // 基本的にはトピック検索では使用しない
118
+ break;
119
+ }
120
+ case 'academic': {
121
+ // 学術検索(arXiv等)- WideResearchEngineのAcademicSearchAgentを利用可能
122
+ // 基本実装では省略
123
+ break;
124
+ }
125
+ case 'social': {
126
+ // ソーシャルメディア - API制限があるため基本実装では省略
127
+ break;
128
+ }
129
+ }
130
+ return docs;
131
+ }
132
+ /**
133
+ * 時間バケットを作成
134
+ */
135
+ createTimeBuckets(startDate, endDate, granularity) {
136
+ const buckets = [];
137
+ let current = new Date(startDate);
138
+ while (current < endDate) {
139
+ const bucketStart = new Date(current);
140
+ let bucketEnd;
141
+ switch (granularity) {
142
+ case 'hourly':
143
+ bucketEnd = new Date(current);
144
+ bucketEnd.setHours(bucketEnd.getHours() + 1);
145
+ break;
146
+ case 'daily':
147
+ bucketEnd = new Date(current);
148
+ bucketEnd.setDate(bucketEnd.getDate() + 1);
149
+ break;
150
+ case 'weekly':
151
+ bucketEnd = new Date(current);
152
+ bucketEnd.setDate(bucketEnd.getDate() + 7);
153
+ break;
154
+ case 'monthly':
155
+ bucketEnd = new Date(current);
156
+ bucketEnd.setMonth(bucketEnd.getMonth() + 1);
157
+ break;
158
+ case 'yearly':
159
+ bucketEnd = new Date(current);
160
+ bucketEnd.setFullYear(bucketEnd.getFullYear() + 1);
161
+ break;
162
+ }
163
+ if (bucketEnd > endDate) {
164
+ bucketEnd = new Date(endDate);
165
+ }
166
+ buckets.push({ start: bucketStart, end: bucketEnd });
167
+ current = bucketEnd;
168
+ }
169
+ return buckets;
170
+ }
171
+ }
172
+ //# sourceMappingURL=TimeSeriesCollector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TimeSeriesCollector.js","sourceRoot":"","sources":["../../src/trend/TimeSeriesCollector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * TrendAnalyzer - トレンド分析オーケストレータ
3
+ *
4
+ * 時系列データの収集、トレンド検出、予測、可視化を統合的に実行する
5
+ *
6
+ * @requirement REQ-ANALYZE-004
7
+ * @design DES-ANALYZE-004
8
+ * @task TASK-004
9
+ */
10
+ import { type Result } from '@nahisaho/katashiro-core';
11
+ import type { TrendAnalysisQuery, TrendAnalysisResult, TrendAnalyzerConfig, TrendAnalysisError, TopicComparison } from './types.js';
12
+ /**
13
+ * トレンド分析を統合的に実行するメインクラス
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * const analyzer = new TrendAnalyzer();
18
+ *
19
+ * const result = await analyzer.analyze({
20
+ * topic: 'AI',
21
+ * dateRange: {
22
+ * start: new Date('2025-01-01'),
23
+ * end: new Date('2025-12-31'),
24
+ * },
25
+ * options: {
26
+ * granularity: 'weekly',
27
+ * sources: ['news', 'web'],
28
+ * includeForecast: true,
29
+ * },
30
+ * });
31
+ *
32
+ * if (isOk(result)) {
33
+ * console.log(result.value.summary);
34
+ * }
35
+ * ```
36
+ */
37
+ export declare class TrendAnalyzer {
38
+ private collector;
39
+ private detector;
40
+ private forecaster;
41
+ private visualizer;
42
+ private config;
43
+ constructor(config?: Partial<TrendAnalyzerConfig>);
44
+ /**
45
+ * トレンド分析を実行
46
+ */
47
+ analyze(query: TrendAnalysisQuery): Promise<Result<TrendAnalysisResult, TrendAnalysisError>>;
48
+ /**
49
+ * 複数トピックを比較分析
50
+ */
51
+ compare(topics: string[], dateRange: {
52
+ start: Date;
53
+ end: Date;
54
+ }, options?: TrendAnalysisQuery['options']): Promise<Result<TopicComparison, TrendAnalysisError>>;
55
+ /**
56
+ * クエリの検証
57
+ */
58
+ private validateQuery;
59
+ /**
60
+ * トピック間の相関を計算
61
+ */
62
+ private calculateTopicCorrelations;
63
+ /**
64
+ * 相関係数を計算
65
+ */
66
+ private calculateCorrelation;
67
+ /**
68
+ * 比較サマリーを生成
69
+ */
70
+ private generateComparisonSummary;
71
+ }
72
+ //# sourceMappingURL=TrendAnalyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TrendAnalyzer.d.ts","sourceRoot":"","sources":["../../src/trend/TrendAnalyzer.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAiB,KAAK,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAKtE,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAElB,eAAe,EAChB,MAAM,YAAY,CAAC;AAEpB;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,SAAS,CAAsB;IACvC,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,UAAU,CAAiB;IACnC,OAAO,CAAC,UAAU,CAAyB;IAC3C,OAAO,CAAC,MAAM,CAAsB;gBAExB,MAAM,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC;IAkBjD;;OAEG;IACG,OAAO,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,mBAAmB,EAAE,kBAAkB,CAAC,CAAC;IAiFlG;;OAEG;IACG,OAAO,CACX,MAAM,EAAE,MAAM,EAAE,EAChB,SAAS,EAAE;QAAE,KAAK,EAAE,IAAI,CAAC;QAAC,GAAG,EAAE,IAAI,CAAA;KAAE,EACrC,OAAO,CAAC,EAAE,kBAAkB,CAAC,SAAS,CAAC,GACtC,OAAO,CAAC,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,CAAC;IA4DvD;;OAEG;IACH,OAAO,CAAC,aAAa;IAkCrB;;OAEG;IACH,OAAO,CAAC,0BAA0B;IA2BlC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA4B5B;;OAEG;IACH,OAAO,CAAC,yBAAyB;CA2BlC"}