gthinking 1.3.0 → 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 (271) hide show
  1. package/.eslintrc.js +34 -0
  2. package/ANALYSIS_SUMMARY.md +363 -0
  3. package/README.md +230 -250
  4. package/dist/analysis/analysis-engine.d.ts +63 -0
  5. package/dist/analysis/analysis-engine.d.ts.map +1 -0
  6. package/dist/analysis/analysis-engine.js +322 -0
  7. package/dist/analysis/analysis-engine.js.map +1 -0
  8. package/dist/core/config.d.ts +1419 -0
  9. package/dist/core/config.d.ts.map +1 -0
  10. package/dist/core/config.js +361 -0
  11. package/dist/core/config.js.map +1 -0
  12. package/dist/core/engine.d.ts +176 -0
  13. package/dist/core/engine.d.ts.map +1 -0
  14. package/dist/core/engine.js +604 -0
  15. package/dist/core/engine.js.map +1 -0
  16. package/dist/core/errors.d.ts +153 -0
  17. package/dist/core/errors.d.ts.map +1 -0
  18. package/dist/core/errors.js +287 -0
  19. package/dist/core/errors.js.map +1 -0
  20. package/dist/core/index.d.ts +7 -0
  21. package/dist/core/index.d.ts.map +1 -0
  22. package/dist/{types.js → core/index.js} +8 -4
  23. package/dist/core/index.js.map +1 -0
  24. package/dist/core/pipeline.d.ts +121 -0
  25. package/dist/core/pipeline.d.ts.map +1 -0
  26. package/dist/core/pipeline.js +289 -0
  27. package/dist/core/pipeline.js.map +1 -0
  28. package/dist/core/rate-limiter.d.ts +58 -0
  29. package/dist/core/rate-limiter.d.ts.map +1 -0
  30. package/dist/core/rate-limiter.js +133 -0
  31. package/dist/core/rate-limiter.js.map +1 -0
  32. package/dist/core/session-manager.d.ts +96 -0
  33. package/dist/core/session-manager.d.ts.map +1 -0
  34. package/dist/core/session-manager.js +223 -0
  35. package/dist/core/session-manager.js.map +1 -0
  36. package/dist/creativity/creativity-engine.d.ts +6 -0
  37. package/dist/creativity/creativity-engine.d.ts.map +1 -0
  38. package/dist/creativity/creativity-engine.js +17 -0
  39. package/dist/creativity/creativity-engine.js.map +1 -0
  40. package/dist/index.d.ts +24 -32
  41. package/dist/index.d.ts.map +1 -1
  42. package/dist/index.js +130 -104
  43. package/dist/index.js.map +1 -1
  44. package/dist/learning/learning-engine.d.ts +6 -0
  45. package/dist/learning/learning-engine.d.ts.map +1 -0
  46. package/dist/learning/learning-engine.js +17 -0
  47. package/dist/learning/learning-engine.js.map +1 -0
  48. package/dist/llm/index.d.ts +10 -0
  49. package/dist/llm/index.d.ts.map +1 -0
  50. package/dist/llm/index.js +26 -0
  51. package/dist/llm/index.js.map +1 -0
  52. package/dist/llm/llm-service.d.ts +109 -0
  53. package/dist/llm/llm-service.d.ts.map +1 -0
  54. package/dist/llm/llm-service.js +224 -0
  55. package/dist/llm/llm-service.js.map +1 -0
  56. package/dist/llm/providers/base.d.ts +85 -0
  57. package/dist/llm/providers/base.d.ts.map +1 -0
  58. package/dist/llm/providers/base.js +57 -0
  59. package/dist/llm/providers/base.js.map +1 -0
  60. package/dist/llm/providers/cli.d.ts +23 -0
  61. package/dist/llm/providers/cli.d.ts.map +1 -0
  62. package/dist/llm/providers/cli.js +158 -0
  63. package/dist/llm/providers/cli.js.map +1 -0
  64. package/dist/llm/providers/gemini.d.ts +30 -0
  65. package/dist/llm/providers/gemini.d.ts.map +1 -0
  66. package/dist/llm/providers/gemini.js +168 -0
  67. package/dist/llm/providers/gemini.js.map +1 -0
  68. package/dist/llm/sanitization.d.ts +50 -0
  69. package/dist/llm/sanitization.d.ts.map +1 -0
  70. package/dist/llm/sanitization.js +149 -0
  71. package/dist/llm/sanitization.js.map +1 -0
  72. package/dist/{server.d.ts.map → mcp/server.d.ts.map} +1 -1
  73. package/dist/mcp/server.js +108 -0
  74. package/dist/mcp/server.js.map +1 -0
  75. package/dist/planning/planning-engine.d.ts +6 -0
  76. package/dist/planning/planning-engine.d.ts.map +1 -0
  77. package/dist/planning/planning-engine.js +17 -0
  78. package/dist/planning/planning-engine.js.map +1 -0
  79. package/dist/reasoning/reasoning-engine.d.ts +6 -0
  80. package/dist/reasoning/reasoning-engine.d.ts.map +1 -0
  81. package/dist/reasoning/reasoning-engine.js +17 -0
  82. package/dist/reasoning/reasoning-engine.js.map +1 -0
  83. package/dist/search/search-engine.d.ts +99 -0
  84. package/dist/search/search-engine.d.ts.map +1 -0
  85. package/dist/search/search-engine.js +271 -0
  86. package/dist/search/search-engine.js.map +1 -0
  87. package/dist/synthesis/synthesis-engine.d.ts +6 -0
  88. package/dist/synthesis/synthesis-engine.d.ts.map +1 -0
  89. package/dist/synthesis/synthesis-engine.js +17 -0
  90. package/dist/synthesis/synthesis-engine.js.map +1 -0
  91. package/dist/types/analysis.d.ts +1534 -49
  92. package/dist/types/analysis.d.ts.map +1 -1
  93. package/dist/types/analysis.js +250 -0
  94. package/dist/types/analysis.js.map +1 -1
  95. package/dist/types/core.d.ts +257 -30
  96. package/dist/types/core.d.ts.map +1 -1
  97. package/dist/types/core.js +148 -18
  98. package/dist/types/core.js.map +1 -1
  99. package/dist/types/creativity.d.ts +2871 -56
  100. package/dist/types/creativity.d.ts.map +1 -1
  101. package/dist/types/creativity.js +195 -0
  102. package/dist/types/creativity.js.map +1 -1
  103. package/dist/types/index.d.ts +6 -2
  104. package/dist/types/index.d.ts.map +1 -1
  105. package/dist/types/index.js +17 -2
  106. package/dist/types/index.js.map +1 -1
  107. package/dist/types/learning.d.ts +851 -61
  108. package/dist/types/learning.d.ts.map +1 -1
  109. package/dist/types/learning.js +155 -0
  110. package/dist/types/learning.js.map +1 -1
  111. package/dist/types/planning.d.ts +2223 -71
  112. package/dist/types/planning.d.ts.map +1 -1
  113. package/dist/types/planning.js +190 -0
  114. package/dist/types/planning.js.map +1 -1
  115. package/dist/types/reasoning.d.ts +2209 -72
  116. package/dist/types/reasoning.d.ts.map +1 -1
  117. package/dist/types/reasoning.js +200 -1
  118. package/dist/types/reasoning.js.map +1 -1
  119. package/dist/types/search.d.ts +981 -53
  120. package/dist/types/search.d.ts.map +1 -1
  121. package/dist/types/search.js +137 -0
  122. package/dist/types/search.js.map +1 -1
  123. package/dist/types/synthesis.d.ts +583 -38
  124. package/dist/types/synthesis.d.ts.map +1 -1
  125. package/dist/types/synthesis.js +138 -0
  126. package/dist/types/synthesis.js.map +1 -1
  127. package/dist/utils/cache.d.ts +144 -0
  128. package/dist/utils/cache.d.ts.map +1 -0
  129. package/dist/utils/cache.js +288 -0
  130. package/dist/utils/cache.js.map +1 -0
  131. package/dist/utils/id-generator.d.ts +89 -0
  132. package/dist/utils/id-generator.d.ts.map +1 -0
  133. package/dist/utils/id-generator.js +132 -0
  134. package/dist/utils/id-generator.js.map +1 -0
  135. package/dist/utils/index.d.ts +11 -0
  136. package/dist/utils/index.d.ts.map +1 -0
  137. package/dist/utils/index.js +33 -0
  138. package/dist/utils/index.js.map +1 -0
  139. package/dist/utils/logger.d.ts +142 -0
  140. package/dist/utils/logger.d.ts.map +1 -0
  141. package/dist/utils/logger.js +248 -0
  142. package/dist/utils/logger.js.map +1 -0
  143. package/dist/utils/metrics.d.ts +149 -0
  144. package/dist/utils/metrics.d.ts.map +1 -0
  145. package/dist/utils/metrics.js +296 -0
  146. package/dist/utils/metrics.js.map +1 -0
  147. package/dist/utils/timer.d.ts +7 -0
  148. package/dist/utils/timer.d.ts.map +1 -0
  149. package/dist/utils/timer.js +17 -0
  150. package/dist/utils/timer.js.map +1 -0
  151. package/dist/utils/validation.d.ts +147 -0
  152. package/dist/utils/validation.d.ts.map +1 -0
  153. package/dist/utils/validation.js +275 -0
  154. package/dist/utils/validation.js.map +1 -0
  155. package/docs/API.md +411 -0
  156. package/docs/ARCHITECTURE.md +271 -0
  157. package/docs/CHANGELOG.md +283 -0
  158. package/jest.config.js +28 -0
  159. package/package.json +43 -30
  160. package/src/analysis/analysis-engine.ts +383 -0
  161. package/src/core/config.ts +406 -0
  162. package/src/core/engine.ts +785 -0
  163. package/src/core/errors.ts +349 -0
  164. package/src/core/index.ts +12 -0
  165. package/src/core/pipeline.ts +424 -0
  166. package/src/core/rate-limiter.ts +155 -0
  167. package/src/core/session-manager.ts +269 -0
  168. package/src/creativity/creativity-engine.ts +14 -0
  169. package/src/index.ts +178 -0
  170. package/src/learning/learning-engine.ts +14 -0
  171. package/src/llm/index.ts +10 -0
  172. package/src/llm/llm-service.ts +285 -0
  173. package/src/llm/providers/base.ts +146 -0
  174. package/src/llm/providers/cli.ts +186 -0
  175. package/src/llm/providers/gemini.ts +201 -0
  176. package/src/llm/sanitization.ts +178 -0
  177. package/src/mcp/server.ts +117 -0
  178. package/src/planning/planning-engine.ts +14 -0
  179. package/src/reasoning/reasoning-engine.ts +14 -0
  180. package/src/search/search-engine.ts +333 -0
  181. package/src/synthesis/synthesis-engine.ts +14 -0
  182. package/src/types/analysis.ts +337 -0
  183. package/src/types/core.ts +342 -0
  184. package/src/types/creativity.ts +268 -0
  185. package/src/types/index.ts +31 -0
  186. package/src/types/learning.ts +215 -0
  187. package/src/types/planning.ts +251 -0
  188. package/src/types/reasoning.ts +288 -0
  189. package/src/types/search.ts +192 -0
  190. package/src/types/synthesis.ts +187 -0
  191. package/src/utils/cache.ts +363 -0
  192. package/src/utils/id-generator.ts +135 -0
  193. package/src/utils/index.ts +22 -0
  194. package/src/utils/logger.ts +290 -0
  195. package/src/utils/metrics.ts +380 -0
  196. package/src/utils/timer.ts +15 -0
  197. package/src/utils/validation.ts +297 -0
  198. package/tests/setup.ts +22 -0
  199. package/tests/unit/cache.test.ts +189 -0
  200. package/tests/unit/engine.test.ts +179 -0
  201. package/tests/unit/validation.test.ts +218 -0
  202. package/tsconfig.json +17 -12
  203. package/GEMINI.md +0 -68
  204. package/analysis.ts +0 -1063
  205. package/creativity.ts +0 -1055
  206. package/dist/analysis.d.ts +0 -54
  207. package/dist/analysis.d.ts.map +0 -1
  208. package/dist/analysis.js +0 -866
  209. package/dist/analysis.js.map +0 -1
  210. package/dist/creativity.d.ts +0 -81
  211. package/dist/creativity.d.ts.map +0 -1
  212. package/dist/creativity.js +0 -828
  213. package/dist/creativity.js.map +0 -1
  214. package/dist/engine.d.ts +0 -90
  215. package/dist/engine.d.ts.map +0 -1
  216. package/dist/engine.js +0 -720
  217. package/dist/engine.js.map +0 -1
  218. package/dist/examples.d.ts +0 -7
  219. package/dist/examples.d.ts.map +0 -1
  220. package/dist/examples.js +0 -506
  221. package/dist/examples.js.map +0 -1
  222. package/dist/learning.d.ts +0 -72
  223. package/dist/learning.d.ts.map +0 -1
  224. package/dist/learning.js +0 -615
  225. package/dist/learning.js.map +0 -1
  226. package/dist/llm-service.d.ts +0 -21
  227. package/dist/llm-service.d.ts.map +0 -1
  228. package/dist/llm-service.js +0 -100
  229. package/dist/llm-service.js.map +0 -1
  230. package/dist/planning.d.ts +0 -62
  231. package/dist/planning.d.ts.map +0 -1
  232. package/dist/planning.js +0 -886
  233. package/dist/planning.js.map +0 -1
  234. package/dist/reasoning.d.ts +0 -73
  235. package/dist/reasoning.d.ts.map +0 -1
  236. package/dist/reasoning.js +0 -845
  237. package/dist/reasoning.js.map +0 -1
  238. package/dist/search-discovery.d.ts +0 -73
  239. package/dist/search-discovery.d.ts.map +0 -1
  240. package/dist/search-discovery.js +0 -548
  241. package/dist/search-discovery.js.map +0 -1
  242. package/dist/server.js +0 -113
  243. package/dist/server.js.map +0 -1
  244. package/dist/types/engine.d.ts +0 -55
  245. package/dist/types/engine.d.ts.map +0 -1
  246. package/dist/types/engine.js +0 -3
  247. package/dist/types/engine.js.map +0 -1
  248. package/dist/types.d.ts +0 -6
  249. package/dist/types.d.ts.map +0 -1
  250. package/dist/types.js.map +0 -1
  251. package/engine.ts +0 -1009
  252. package/examples.ts +0 -717
  253. package/index.ts +0 -106
  254. package/learning.ts +0 -779
  255. package/llm-service.ts +0 -120
  256. package/planning.ts +0 -1101
  257. package/reasoning.ts +0 -1079
  258. package/search-discovery.ts +0 -700
  259. package/server.ts +0 -115
  260. package/types/analysis.ts +0 -69
  261. package/types/core.ts +0 -90
  262. package/types/creativity.ts +0 -72
  263. package/types/engine.ts +0 -60
  264. package/types/index.ts +0 -9
  265. package/types/learning.ts +0 -69
  266. package/types/planning.ts +0 -85
  267. package/types/reasoning.ts +0 -92
  268. package/types/search.ts +0 -58
  269. package/types/synthesis.ts +0 -43
  270. package/types.ts +0 -6
  271. /package/dist/{server.d.ts → mcp/server.d.ts} +0 -0
@@ -1,548 +0,0 @@
1
- "use strict";
2
- /**
3
- * Search & Discovery Module
4
- * Real-time web search with multi-source aggregation and intelligent filtering
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.searchEngine = exports.SearchDiscoveryEngine = void 0;
8
- const types_1 = require("./types");
9
- const events_1 = require("events");
10
- const llm_service_1 = require("./llm-service");
11
- // ============================================================================
12
- // WEB SEARCH PROVIDER IMPLEMENTATION
13
- // ============================================================================
14
- class WebSearchProvider {
15
- constructor() {
16
- this.name = 'web_search';
17
- }
18
- async search(query, filters, maxResults) {
19
- try {
20
- const results = await this.searchWithLLM(query, maxResults);
21
- if (results.length > 0) {
22
- return this.applyFilters(results, filters);
23
- }
24
- }
25
- catch (error) {
26
- console.warn('LLM search failed, falling back to simulation', error);
27
- }
28
- // In real implementation, this would call actual search APIs
29
- // For demonstration, we simulate search results
30
- const simulatedResults = [];
31
- // Generate diverse simulated results based on query
32
- const topics = this.extractTopics(query);
33
- for (let i = 0; i < maxResults; i++) {
34
- const topic = topics[i % topics.length];
35
- const result = {
36
- id: `web_${Date.now()}_${i}`,
37
- title: this.generateTitle(topic, i),
38
- url: `https://example.com/article/${topic.replace(/\s+/g, '-')}-${i}`,
39
- snippet: this.generateSnippet(topic, query),
40
- source: types_1.SourceType.WEB,
41
- credibility: this.calculateCredibility(i),
42
- relevance: this.calculateRelevance(query, topic, i),
43
- timestamp: new Date(),
44
- metadata: this.generateMetadata(topic)
45
- };
46
- simulatedResults.push(result);
47
- }
48
- return this.applyFilters(simulatedResults, filters);
49
- }
50
- async searchWithLLM(query, maxResults) {
51
- const prompt = `
52
- Act as a search engine. Query: "${query}"
53
- Generate ${maxResults} relevant search results based on your knowledge.
54
-
55
- Return strictly JSON with an array of objects:
56
- [
57
- {
58
- "title": "string",
59
- "url": "https://... (invent a plausible URL)",
60
- "snippet": "string (1-2 sentences summarizing the content)",
61
- "credibility": number (0-1)
62
- }
63
- ]
64
- `;
65
- const response = await llm_service_1.llmService.generateText({ prompt });
66
- const jsonMatch = response.match(/\[[\s\S]*\]/); // Match array
67
- if (jsonMatch) {
68
- const data = JSON.parse(jsonMatch[0]);
69
- return data.map((item, i) => ({
70
- id: `web_llm_${Date.now()}_${i}`,
71
- title: item.title,
72
- url: item.url,
73
- snippet: item.snippet,
74
- source: types_1.SourceType.WEB,
75
- credibility: item.credibility || 0.7,
76
- relevance: 0.9, // Assumed relevant
77
- timestamp: new Date(),
78
- metadata: { wordCount: 1000, citations: 10 }
79
- }));
80
- }
81
- return [];
82
- }
83
- getCredibilityScore(url) {
84
- const credibleDomains = [
85
- 'edu', 'gov', 'ac.uk', 'ac.jp', 'arxiv.org',
86
- 'nature.com', 'science.org', 'ieee.org', 'acm.org'
87
- ];
88
- const lowCredibilityDomains = [
89
- 'blogspot', 'wordpress', 'medium', 'wix', 'weebly'
90
- ];
91
- if (credibleDomains.some(d => url.includes(d)))
92
- return 0.9;
93
- if (lowCredibilityDomains.some(d => url.includes(d)))
94
- return 0.4;
95
- return 0.6;
96
- }
97
- extractTopics(query) {
98
- // Simple topic extraction - in real implementation, use NLP
99
- const commonWords = ['what', 'how', 'why', 'when', 'where', 'who', 'is', 'are', 'the', 'a', 'an'];
100
- return query
101
- .toLowerCase()
102
- .split(/\s+/)
103
- .filter(word => !commonWords.includes(word) && word.length > 3);
104
- }
105
- generateTitle(topic, index) {
106
- const templates = [
107
- `Complete Guide to ${topic}`,
108
- `${topic}: Everything You Need to Know`,
109
- `Understanding ${topic} in Depth`,
110
- `The Future of ${topic}`,
111
- `${topic} Best Practices and Strategies`,
112
- `Advanced ${topic} Techniques`,
113
- `${topic} Case Studies and Examples`,
114
- `Breaking Down ${topic}: A Comprehensive Analysis`
115
- ];
116
- return templates[index % templates.length];
117
- }
118
- generateSnippet(topic, query) {
119
- return `This comprehensive resource about ${topic} provides detailed insights related to "${query}". ` +
120
- `It covers key concepts, practical applications, and expert perspectives on the subject matter.`;
121
- }
122
- calculateCredibility(index) {
123
- // Higher ranked results typically have higher credibility
124
- return Math.max(0.3, 0.95 - (index * 0.05));
125
- }
126
- calculateRelevance(query, topic, index) {
127
- const queryWords = query.toLowerCase().split(/\s+/);
128
- const topicWords = topic.toLowerCase().split(/\s+/);
129
- const matchCount = topicWords.filter(w => queryWords.includes(w)).length;
130
- const baseRelevance = matchCount / Math.max(queryWords.length, topicWords.length);
131
- return Math.min(0.95, baseRelevance + (0.9 - index * 0.1));
132
- }
133
- generateMetadata(topic) {
134
- return {
135
- author: `Expert on ${topic}`,
136
- publishDate: new Date(Date.now() - Math.random() * 365 * 24 * 60 * 60 * 1000),
137
- wordCount: Math.floor(1000 + Math.random() * 4000),
138
- readingTime: Math.floor(5 + Math.random() * 20),
139
- relatedTopics: [topic, 'related-concept-1', 'related-concept-2'],
140
- citations: Math.floor(Math.random() * 50)
141
- };
142
- }
143
- applyFilters(results, filters) {
144
- return results.filter(result => {
145
- if (filters.minCredibility && result.credibility < filters.minCredibility) {
146
- return false;
147
- }
148
- if (filters.domains && filters.domains.length > 0) {
149
- const domainMatch = filters.domains.some(d => result.url.includes(d));
150
- if (!domainMatch)
151
- return false;
152
- }
153
- if (filters.excludeDomains) {
154
- const excluded = filters.excludeDomains.some(d => result.url.includes(d));
155
- if (excluded)
156
- return false;
157
- }
158
- return true;
159
- });
160
- }
161
- }
162
- // ============================================================================
163
- // KNOWLEDGE BASE SEARCH PROVIDER
164
- // ============================================================================
165
- class KnowledgeBaseProvider {
166
- constructor() {
167
- this.name = 'knowledge_base';
168
- this.knowledgeStore = new Map();
169
- }
170
- async search(query, filters, maxResults) {
171
- const results = [];
172
- const queryLower = query.toLowerCase();
173
- // Search through stored knowledge
174
- for (const [key, value] of this.knowledgeStore.entries()) {
175
- if (key.toLowerCase().includes(queryLower)) {
176
- results.push({
177
- id: `kb_${key}`,
178
- title: key,
179
- url: `knowledge://${key}`,
180
- snippet: JSON.stringify(value).substring(0, 200),
181
- source: types_1.SourceType.KNOWLEDGE_BASE,
182
- credibility: 0.95,
183
- relevance: 0.9,
184
- timestamp: new Date(),
185
- metadata: { wordCount: JSON.stringify(value).length }
186
- });
187
- }
188
- if (results.length >= maxResults)
189
- break;
190
- }
191
- return results;
192
- }
193
- getCredibilityScore() {
194
- return 0.95; // Knowledge base has high credibility
195
- }
196
- addKnowledge(key, value) {
197
- this.knowledgeStore.set(key, value);
198
- }
199
- getKnowledge(key) {
200
- return this.knowledgeStore.get(key);
201
- }
202
- }
203
- // ============================================================================
204
- // CACHE SEARCH PROVIDER
205
- // ============================================================================
206
- class CacheProvider {
207
- constructor() {
208
- this.name = 'cache';
209
- this.cache = new Map();
210
- this.defaultTTL = 3600000; // 1 hour
211
- }
212
- async search(query, _filters, maxResults) {
213
- const results = [];
214
- const now = Date.now();
215
- for (const [key, cached] of this.cache.entries()) {
216
- if (key.includes(query) && now - cached.timestamp < cached.ttl) {
217
- results.push(cached.result);
218
- }
219
- if (results.length >= maxResults)
220
- break;
221
- }
222
- return results;
223
- }
224
- getCredibilityScore() {
225
- return 0.8;
226
- }
227
- cacheResult(query, result, ttl) {
228
- this.cache.set(query, {
229
- result,
230
- timestamp: Date.now(),
231
- ttl: ttl || this.defaultTTL
232
- });
233
- }
234
- invalidate(query) {
235
- this.cache.delete(query);
236
- }
237
- clear() {
238
- this.cache.clear();
239
- }
240
- }
241
- // ============================================================================
242
- // MAIN SEARCH & DISCOVERY ENGINE
243
- // ============================================================================
244
- class SearchDiscoveryEngine extends events_1.EventEmitter {
245
- constructor() {
246
- super();
247
- this.providers = new Map();
248
- this.sessions = new Map();
249
- this.knowledgeBase = new KnowledgeBaseProvider();
250
- this.cache = new CacheProvider();
251
- this.registerDefaultProviders();
252
- }
253
- registerDefaultProviders() {
254
- this.providers.set(types_1.SourceType.WEB, new WebSearchProvider());
255
- this.providers.set(types_1.SourceType.KNOWLEDGE_BASE, this.knowledgeBase);
256
- this.providers.set(types_1.SourceType.CACHE, this.cache);
257
- }
258
- /**
259
- * Execute a search query across multiple sources
260
- */
261
- async search(query, options = {}) {
262
- const { sources = [types_1.SourceType.WEB, types_1.SourceType.KNOWLEDGE_BASE, types_1.SourceType.CACHE], filters = {}, maxResults = 10, timeout = 30000 } = options;
263
- const searchId = this.generateId();
264
- const startTime = Date.now();
265
- this.emit('search_start', {
266
- id: searchId,
267
- type: 'stage_start',
268
- stage: types_1.ThinkingStage.SEARCH,
269
- timestamp: new Date(),
270
- data: { query, sources },
271
- sessionId: searchId
272
- });
273
- try {
274
- // Check cache first
275
- const cachedResults = await this.searchWithProvider(types_1.SourceType.CACHE, query, filters, maxResults);
276
- if (cachedResults.length > 0) {
277
- this.emit('search_complete', {
278
- id: searchId,
279
- type: 'search_result',
280
- stage: types_1.ThinkingStage.SEARCH,
281
- timestamp: new Date(),
282
- data: { results: cachedResults, fromCache: true },
283
- sessionId: searchId
284
- });
285
- return cachedResults;
286
- }
287
- // Execute searches across all specified sources in parallel
288
- const searchPromises = sources
289
- .filter(s => s !== types_1.SourceType.CACHE) // Already checked cache
290
- .map(source => this.searchWithProvider(source, query, filters, maxResults));
291
- const resultsArrays = await Promise.allSettled(searchPromises);
292
- let allResults = [];
293
- resultsArrays.forEach((result, index) => {
294
- if (result.status === 'fulfilled') {
295
- allResults = allResults.concat(result.value);
296
- }
297
- else {
298
- console.warn(`Search from ${sources[index]} failed:`, result.reason);
299
- }
300
- });
301
- // Rank and filter results
302
- const rankedResults = this.rankResults(allResults, query).slice(0, maxResults);
303
- // Cache top results
304
- rankedResults.forEach(result => {
305
- this.cache.cacheResult(query, result);
306
- });
307
- const processingTime = Date.now() - startTime;
308
- this.emit('search_complete', {
309
- id: searchId,
310
- type: 'search_result',
311
- stage: types_1.ThinkingStage.SEARCH,
312
- timestamp: new Date(),
313
- data: {
314
- results: rankedResults,
315
- fromCache: false,
316
- processingTime,
317
- sourcesQueried: sources.length
318
- },
319
- sessionId: searchId
320
- });
321
- return rankedResults;
322
- }
323
- catch (error) {
324
- this.emit('search_error', {
325
- id: searchId,
326
- type: 'stage_error',
327
- stage: types_1.ThinkingStage.SEARCH,
328
- timestamp: new Date(),
329
- data: { error },
330
- sessionId: searchId
331
- });
332
- throw new types_1.ThinkingError(`Search failed: ${error instanceof Error ? error.message : 'Unknown error'}`, types_1.ThinkingStage.SEARCH, true, error instanceof Error ? error : undefined);
333
- }
334
- }
335
- /**
336
- * Multi-query search for comprehensive coverage
337
- */
338
- async multiSearch(queries, options = {}) {
339
- const { aggregate = true, maxResultsPerQuery = 5 } = options;
340
- const sessionId = this.generateId();
341
- const session = {
342
- id: sessionId,
343
- queries: [],
344
- results: [],
345
- aggregatedResults: [],
346
- startTime: new Date()
347
- };
348
- this.sessions.set(sessionId, session);
349
- // Execute all queries
350
- const searchPromises = queries.map(async (query) => {
351
- const results = await this.search(query, {
352
- ...options,
353
- maxResults: maxResultsPerQuery
354
- });
355
- return { query, results };
356
- });
357
- const searchResults = await Promise.all(searchPromises);
358
- // Collect all results
359
- searchResults.forEach(({ query, results }) => {
360
- session.queries.push({
361
- id: this.generateId(),
362
- query,
363
- sources: options.sources || [types_1.SourceType.WEB],
364
- filters: options.filters || {},
365
- maxResults: maxResultsPerQuery,
366
- timeout: 30000,
367
- timestamp: new Date()
368
- });
369
- session.results.push(...results);
370
- });
371
- if (aggregate) {
372
- session.aggregatedResults = this.aggregateResults(session.results);
373
- return session.aggregatedResults;
374
- }
375
- return session.results;
376
- }
377
- /**
378
- * Aggregate results by topic and identify consensus/conflicts
379
- */
380
- aggregateResults(results) {
381
- const topicMap = new Map();
382
- // Group by topic (simplified - in real implementation use NLP clustering)
383
- results.forEach(result => {
384
- const topic = this.extractMainTopic(result.title);
385
- if (!topicMap.has(topic)) {
386
- topicMap.set(topic, []);
387
- }
388
- topicMap.get(topic).push(result);
389
- });
390
- const aggregated = [];
391
- topicMap.forEach((topicResults, topic) => {
392
- // Calculate consensus score
393
- const avgCredibility = topicResults.reduce((sum, r) => sum + r.credibility, 0) / topicResults.length;
394
- const avgRelevance = topicResults.reduce((sum, r) => sum + r.relevance, 0) / topicResults.length;
395
- const consensusScore = (avgCredibility + avgRelevance) / 2;
396
- // Check for conflicting information
397
- const conflictingInfo = this.detectConflicts(topicResults);
398
- // Extract key insights
399
- const keyInsights = this.extractKeyInsights(topicResults);
400
- aggregated.push({
401
- topic,
402
- results: topicResults,
403
- consensusScore,
404
- conflictingInfo,
405
- keyInsights
406
- });
407
- });
408
- // Sort by consensus score
409
- return aggregated.sort((a, b) => b.consensusScore - a.consensusScore);
410
- }
411
- /**
412
- * Rank results based on multiple factors
413
- */
414
- rankResults(results, query) {
415
- return results
416
- .map(result => ({
417
- ...result,
418
- // Calculate composite score
419
- compositeScore: this.calculateCompositeScore(result, query)
420
- }))
421
- .sort((a, b) => b.compositeScore - a.compositeScore);
422
- }
423
- calculateCompositeScore(result, query) {
424
- const relevanceWeight = 0.4;
425
- const credibilityWeight = 0.3;
426
- const freshnessWeight = 0.15;
427
- const engagementWeight = 0.15;
428
- // Relevance score
429
- const relevanceScore = result.relevance;
430
- // Credibility score
431
- const credibilityScore = result.credibility;
432
- // Freshness score (newer is better)
433
- const ageInDays = (Date.now() - result.timestamp.getTime()) / (1000 * 60 * 60 * 24);
434
- const freshnessScore = Math.max(0, 1 - ageInDays / 365);
435
- // Engagement score (based on citations, reading time)
436
- const engagementScore = Math.min(1, (result.metadata.citations || 0) / 100);
437
- return (relevanceScore * relevanceWeight +
438
- credibilityScore * credibilityWeight +
439
- freshnessScore * freshnessWeight +
440
- engagementScore * engagementWeight);
441
- }
442
- /**
443
- * Search with a specific provider
444
- */
445
- async searchWithProvider(source, query, filters, maxResults) {
446
- const provider = this.providers.get(source);
447
- if (!provider) {
448
- throw new Error(`No provider registered for source: ${source}`);
449
- }
450
- return provider.search(query, filters, maxResults);
451
- }
452
- /**
453
- * Add custom search provider
454
- */
455
- registerProvider(source, provider) {
456
- this.providers.set(source, provider);
457
- }
458
- /**
459
- * Add knowledge to knowledge base
460
- */
461
- addKnowledge(key, value) {
462
- this.knowledgeBase.addKnowledge(key, value);
463
- }
464
- /**
465
- * Get search session by ID
466
- */
467
- getSession(sessionId) {
468
- return this.sessions.get(sessionId);
469
- }
470
- /**
471
- * Clear all sessions
472
- */
473
- clearSessions() {
474
- this.sessions.clear();
475
- }
476
- // Helper methods
477
- generateId() {
478
- return `search_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
479
- }
480
- extractMainTopic(title) {
481
- // Simplified topic extraction
482
- const words = title.toLowerCase().split(/\s+/);
483
- const significantWords = words.filter(w => w.length > 4);
484
- return significantWords.slice(0, 3).join(' ') || 'general';
485
- }
486
- detectConflicts(results) {
487
- // Simplified conflict detection
488
- // In real implementation, use NLP to compare content
489
- const snippets = results.map(r => r.snippet.toLowerCase());
490
- const contradictoryTerms = ['not', 'never', 'false', 'incorrect', 'myth'];
491
- return snippets.some(snippet => contradictoryTerms.some(term => snippet.includes(term)));
492
- }
493
- extractKeyInsights(results) {
494
- // Simplified insight extraction
495
- const insights = [];
496
- const seenTopics = new Set();
497
- results.forEach(result => {
498
- const topic = this.extractMainTopic(result.title);
499
- if (!seenTopics.has(topic)) {
500
- seenTopics.add(topic);
501
- insights.push(`${topic}: ${result.snippet.substring(0, 100)}...`);
502
- }
503
- });
504
- return insights.slice(0, 5);
505
- }
506
- }
507
- exports.SearchDiscoveryEngine = SearchDiscoveryEngine;
508
- // ============================================================================
509
- // EXPORT SINGLETON INSTANCE
510
- // ============================================================================
511
- exports.searchEngine = new SearchDiscoveryEngine();
512
- // ============================================================================
513
- // EXAMPLE USAGE
514
- // ============================================================================
515
- /*
516
- // Basic search
517
- const results = await searchEngine.search('artificial intelligence trends 2024', {
518
- sources: [SourceType.WEB, SourceType.KNOWLEDGE_BASE],
519
- maxResults: 10,
520
- filters: {
521
- minCredibility: 0.7,
522
- language: 'en'
523
- }
524
- });
525
-
526
- // Multi-query search with aggregation
527
- const aggregatedResults = await searchEngine.multiSearch([
528
- 'AI in healthcare',
529
- 'machine learning medical applications',
530
- 'healthcare automation technology'
531
- ], {
532
- aggregate: true,
533
- maxResultsPerQuery: 5
534
- }) as AggregatedResult[];
535
-
536
- // Add custom knowledge
537
- searchEngine.addKnowledge('AI Definition', {
538
- term: 'Artificial Intelligence',
539
- definition: 'The simulation of human intelligence by machines',
540
- categories: ['technology', 'computer science']
541
- });
542
-
543
- // Listen to events
544
- searchEngine.on('search_complete', (event) => {
545
- console.log(`Search completed in ${event.data.processingTime}ms`);
546
- });
547
- */
548
- //# sourceMappingURL=search-discovery.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"search-discovery.js","sourceRoot":"","sources":["../search-discovery.ts"],"names":[],"mappings":"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"}