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
@@ -0,0 +1,322 @@
1
+ "use strict";
2
+ /**
3
+ * Analysis Engine for gthinking v2.0.0
4
+ * AI-powered content analysis including sentiment, entities, topics, and more.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.AnalysisEngine = void 0;
8
+ exports.createAnalysisEngine = createAnalysisEngine;
9
+ const events_1 = require("events");
10
+ const logger_1 = require("../utils/logger");
11
+ const types_1 = require("../types");
12
+ const validation_1 = require("../utils/validation");
13
+ const errors_1 = require("../core/errors");
14
+ const logger = new logger_1.Logger('AnalysisEngine');
15
+ /**
16
+ * Analysis Engine
17
+ */
18
+ class AnalysisEngine extends events_1.EventEmitter {
19
+ llmService = null;
20
+ constructor(llmService) {
21
+ super();
22
+ this.llmService = llmService || null;
23
+ }
24
+ /**
25
+ * Set the LLM service
26
+ * @param llmService - The LLM service instance
27
+ */
28
+ setLLMService(llmService) {
29
+ this.llmService = llmService;
30
+ }
31
+ /**
32
+ * Analyze content based on request
33
+ * @param request - The analysis request
34
+ * @returns Complete analysis result
35
+ */
36
+ async analyze(request) {
37
+ const startTime = Date.now();
38
+ // Validate request
39
+ const validatedRequest = (0, validation_1.validateSchema)(types_1.AnalysisRequestSchema, request);
40
+ logger.info('Starting analysis', {
41
+ types: validatedRequest.types,
42
+ contentLength: validatedRequest.content.length
43
+ });
44
+ this.emit('analysis:start', { request: validatedRequest });
45
+ try {
46
+ // Execute requested analysis types in parallel
47
+ const tasks = [];
48
+ const result = {
49
+ success: true,
50
+ timestamp: new Date(),
51
+ request: validatedRequest,
52
+ rawContent: validatedRequest.options.includeRaw ? validatedRequest.content : undefined,
53
+ };
54
+ if (validatedRequest.types.includes(types_1.AnalysisType.SENTIMENT)) {
55
+ tasks.push(this.analyzeSentiment(validatedRequest).then(res => { result.sentiment = res; }));
56
+ }
57
+ if (validatedRequest.types.includes(types_1.AnalysisType.ENTITY)) {
58
+ tasks.push(this.extractEntities(validatedRequest).then(res => { result.entities = res; }));
59
+ }
60
+ if (validatedRequest.types.includes(types_1.AnalysisType.TOPIC)) {
61
+ tasks.push(this.extractTopics(validatedRequest).then(res => { result.topics = res; }));
62
+ }
63
+ if (validatedRequest.types.includes(types_1.AnalysisType.KEYWORD)) {
64
+ tasks.push(this.extractKeywords(validatedRequest).then(res => { result.keywords = res; }));
65
+ }
66
+ if (validatedRequest.types.includes(types_1.AnalysisType.SUMMARY)) {
67
+ tasks.push(this.generateSummary(validatedRequest).then(res => { result.summary = res; }));
68
+ }
69
+ if (validatedRequest.types.includes(types_1.AnalysisType.READABILITY)) {
70
+ // Readability is calculated locally, no LLM needed
71
+ tasks.push(Promise.resolve(this.analyzeReadability(validatedRequest.content)).then(res => { result.readability = res; }));
72
+ }
73
+ // Wait for all tasks to complete
74
+ await Promise.all(tasks);
75
+ const duration = Date.now() - startTime;
76
+ const finalResult = {
77
+ ...result,
78
+ duration,
79
+ confidence: this.calculateOverallConfidence(result),
80
+ errors: [],
81
+ };
82
+ logger.info('Analysis completed', { duration });
83
+ this.emit('analysis:complete', { result: finalResult });
84
+ return finalResult;
85
+ }
86
+ catch (error) {
87
+ logger.error('Analysis failed', { error });
88
+ this.emit('analysis:error', { error });
89
+ throw new errors_1.StageError(`Analysis failed: ${error.message}`, types_1.ThinkingStage.ANALYSIS, false, { originalError: error });
90
+ }
91
+ }
92
+ /**
93
+ * Analyze sentiment
94
+ */
95
+ async analyzeSentiment(request) {
96
+ this.ensureLLM();
97
+ const prompt = `
98
+ Analyze the sentiment of the following text.
99
+ Return a JSON object with:
100
+ - overall: "positive", "negative", "neutral", or "mixed"
101
+ - score: number between -1 (negative) and 1 (positive)
102
+ - confidence: number between 0 and 1
103
+ - emotions: object with scores (0-1) for joy, sadness, anger, fear, surprise, disgust
104
+
105
+ Text: "${request.content.slice(0, 5000)}"
106
+ `;
107
+ return this.executeLLMAnalysis(prompt);
108
+ }
109
+ /**
110
+ * Extract entities
111
+ */
112
+ async extractEntities(request) {
113
+ this.ensureLLM();
114
+ const prompt = `
115
+ Extract entities from the following text.
116
+ Return a JSON object with:
117
+ - entities: array of objects with { text, type, confidence }
118
+ - totalCount: total number of entities
119
+
120
+ Entity types: person, organization, location, product, event, concept, date, money, percent
121
+ Max entities: ${request.options.maxEntities}
122
+
123
+ Text: "${request.content.slice(0, 5000)}"
124
+ `;
125
+ const result = await this.executeLLMAnalysis(prompt);
126
+ // Post-process to ensure correct structure
127
+ const entities = (result.entities || []).map((e) => ({
128
+ id: crypto.randomUUID(),
129
+ text: e.text,
130
+ type: e.type,
131
+ startIndex: 0, // Placeholder
132
+ endIndex: 0, // Placeholder
133
+ confidence: e.confidence || 0.8,
134
+ metadata: {}
135
+ }));
136
+ return {
137
+ entities,
138
+ totalCount: entities.length,
139
+ byType: {} // Needs aggregation logic if needed
140
+ };
141
+ }
142
+ /**
143
+ * Extract topics
144
+ */
145
+ async extractTopics(request) {
146
+ this.ensureLLM();
147
+ const prompt = `
148
+ Extract main topics from the following text.
149
+ Return a JSON object with:
150
+ - topics: array of objects with { name, confidence, relevance, keywords (array of strings) }
151
+ - mainTopic: string
152
+
153
+ Max topics: ${request.options.maxTopics}
154
+
155
+ Text: "${request.content.slice(0, 5000)}"
156
+ `;
157
+ const result = await this.executeLLMAnalysis(prompt);
158
+ const topics = (result.topics || []).map((t) => ({
159
+ id: crypto.randomUUID(),
160
+ name: t.name,
161
+ confidence: t.confidence || 0.8,
162
+ relevance: t.relevance || 0.5,
163
+ keywords: t.keywords || []
164
+ }));
165
+ return {
166
+ topics,
167
+ mainTopic: result.mainTopic,
168
+ topicHierarchy: []
169
+ };
170
+ }
171
+ /**
172
+ * Extract keywords
173
+ */
174
+ async extractKeywords(request) {
175
+ this.ensureLLM();
176
+ const prompt = `
177
+ Extract keywords and key phrases from the following text.
178
+ Return a JSON object with:
179
+ - keywords: array of objects with { text, score, frequency }
180
+ - keyPhrases: array of strings
181
+
182
+ Max keywords: ${request.options.maxKeywords}
183
+
184
+ Text: "${request.content.slice(0, 5000)}"
185
+ `;
186
+ const result = await this.executeLLMAnalysis(prompt);
187
+ const keywords = (result.keywords || []).map((k) => ({
188
+ text: k.text,
189
+ score: k.score || 0.5,
190
+ frequency: k.frequency || 1,
191
+ tfidf: 0,
192
+ isKeyPhrase: false
193
+ }));
194
+ return {
195
+ keywords,
196
+ keyPhrases: result.keyPhrases || [],
197
+ totalWords: request.content.split(/\s+/).length,
198
+ uniqueWords: 0 // Placeholder
199
+ };
200
+ }
201
+ /**
202
+ * Generate summary
203
+ */
204
+ async generateSummary(request) {
205
+ this.ensureLLM();
206
+ const prompt = `
207
+ Summarize the following text.
208
+ Return a JSON object with:
209
+ - summary: string
210
+ - keyPoints: array of strings
211
+
212
+ Length: ${request.options.summaryLength}
213
+
214
+ Text: "${request.content.slice(0, 10000)}"
215
+ `;
216
+ const result = await this.executeLLMAnalysis(prompt);
217
+ return {
218
+ summary: result.summary,
219
+ keyPoints: result.keyPoints || [],
220
+ originalLength: request.content.length,
221
+ summaryLength: result.summary?.length || 0,
222
+ compressionRatio: result.summary ? result.summary.length / request.content.length : 0,
223
+ method: 'abstractive'
224
+ };
225
+ }
226
+ /**
227
+ * Calculate readability metrics (Locally)
228
+ */
229
+ analyzeReadability(text) {
230
+ const words = text.trim().split(/\s+/).length;
231
+ const sentences = text.split(/[.!?]+/).length - 1 || 1;
232
+ const syllables = this.countSyllables(text);
233
+ const complexWords = this.countComplexWords(text);
234
+ // Flesch-Kincaid Grade Level
235
+ const fkGrade = 0.39 * (words / sentences) + 11.8 * (syllables / words) - 15.59;
236
+ // Flesch Reading Ease
237
+ const fReadingEase = 206.835 - 1.015 * (words / sentences) - 84.6 * (syllables / words);
238
+ return {
239
+ score: Math.max(0, Math.min(100, fReadingEase)),
240
+ grade: this.getGradeLevel(fkGrade),
241
+ metrics: {
242
+ fleschKincaid: fkGrade,
243
+ fleschReadingEase: fReadingEase,
244
+ gunningFog: 0, // Placeholder
245
+ smogIndex: 0, // Placeholder
246
+ colemanLiau: 0, // Placeholder
247
+ automatedReadability: 0 // Placeholder
248
+ },
249
+ statistics: {
250
+ wordCount: words,
251
+ sentenceCount: sentences,
252
+ syllableCount: syllables,
253
+ avgWordsPerSentence: words / sentences,
254
+ avgSyllablesPerWord: syllables / words,
255
+ complexWordCount: complexWords,
256
+ complexWordPercentage: (complexWords / words) * 100
257
+ }
258
+ };
259
+ }
260
+ countSyllables(text) {
261
+ // Very basic syllable counter
262
+ return text.length / 3;
263
+ }
264
+ countComplexWords(text) {
265
+ // Placeholder
266
+ return text.split(/\s+/).filter(w => w.length > 6).length;
267
+ }
268
+ getGradeLevel(score) {
269
+ if (score < 5)
270
+ return 'elementary';
271
+ if (score < 8)
272
+ return 'middle_school';
273
+ if (score < 12)
274
+ return 'high_school';
275
+ if (score < 16)
276
+ return 'college';
277
+ return 'graduate';
278
+ }
279
+ /**
280
+ * Execute LLM analysis with retries and parsing
281
+ */
282
+ async executeLLMAnalysis(prompt) {
283
+ if (!this.llmService)
284
+ throw new Error('LLM Service not initialized');
285
+ const response = await (0, errors_1.withRetry)(async () => {
286
+ return this.llmService.complete(prompt, 'You are a precise text analysis engine. Output valid JSON only.');
287
+ });
288
+ // Clean up potential markdown code blocks
289
+ const cleanResponse = response.replace(/```json/g, '').replace(/```/g, '').trim();
290
+ const parsed = (0, validation_1.safeJsonParse)(cleanResponse);
291
+ if (!parsed) {
292
+ throw new Error('Failed to parse LLM response as JSON');
293
+ }
294
+ return parsed;
295
+ }
296
+ ensureLLM() {
297
+ if (!this.llmService) {
298
+ throw new Error('LLM Service is required for this analysis type');
299
+ }
300
+ }
301
+ calculateOverallConfidence(result) {
302
+ // Simple average of available confidences
303
+ const confidences = [];
304
+ if (result.sentiment)
305
+ confidences.push(result.sentiment.confidence);
306
+ if (result.entities)
307
+ confidences.push(0.8); // Entities usually high
308
+ if (result.topics)
309
+ confidences.push(0.8);
310
+ if (confidences.length === 0)
311
+ return 0.8;
312
+ return confidences.reduce((a, b) => a + b, 0) / confidences.length;
313
+ }
314
+ }
315
+ exports.AnalysisEngine = AnalysisEngine;
316
+ /**
317
+ * Factory function
318
+ */
319
+ function createAnalysisEngine(llmService) {
320
+ return new AnalysisEngine(llmService);
321
+ }
322
+ //# sourceMappingURL=analysis-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analysis-engine.js","sourceRoot":"","sources":["../../src/analysis/analysis-engine.ts"],"names":[],"mappings":"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"}