gthinking 1.2.1 → 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 -245
  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 -37
  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 -677
  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 -58
  231. package/dist/planning.d.ts.map +0 -1
  232. package/dist/planning.js +0 -824
  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 -947
  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 -1028
  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 -42
  270. package/types.ts +0 -6
  271. /package/dist/{server.d.ts → mcp/server.d.ts} +0 -0
@@ -1,72 +0,0 @@
1
- /**
2
- * Learning Module
3
- * Context memory, pattern recognition, feedback integration, and knowledge base management
4
- */
5
- import { LearningContext, Interaction, Feedback, Pattern, KnowledgeNode, UserPreferences } from './types';
6
- import { EventEmitter } from 'events';
7
- export declare class LearningEngine extends EventEmitter {
8
- private patternEngine;
9
- private knowledgeGraph;
10
- private preferenceEngine;
11
- private contextManager;
12
- private contexts;
13
- constructor();
14
- /**
15
- * Create or get learning context for a session
16
- */
17
- getOrCreateContext(sessionId: string, userId?: string): LearningContext;
18
- /**
19
- * Record an interaction and learn from it
20
- */
21
- recordInteraction(sessionId: string, query: string, response: string, feedback?: Feedback): Interaction;
22
- /**
23
- * Get relevant context for a query
24
- */
25
- getRelevantContext(sessionId: string, query: string): {
26
- interactions: Interaction[];
27
- patterns: Pattern[];
28
- knowledge: KnowledgeNode[];
29
- summary: string;
30
- };
31
- /**
32
- * Add knowledge to the knowledge graph
33
- */
34
- addKnowledge(label: string, type: KnowledgeNode['type'], properties: Record<string, unknown>, sources: string[]): KnowledgeNode;
35
- /**
36
- * Connect knowledge nodes
37
- */
38
- connectKnowledge(fromId: string, toId: string, relation: string, strength: number, evidence: string[]): void;
39
- /**
40
- * Query knowledge graph
41
- */
42
- queryKnowledge(query: string): KnowledgeNode[];
43
- /**
44
- * Infer new knowledge
45
- */
46
- inferKnowledge(fromNodeId: string, relationType?: string): KnowledgeNode[];
47
- /**
48
- * Update user preferences
49
- */
50
- updatePreferences(userId: string, updates: Partial<UserPreferences>): void;
51
- /**
52
- * Get user preferences
53
- */
54
- getPreferences(userId?: string): UserPreferences;
55
- /**
56
- * Get top patterns
57
- */
58
- getTopPatterns(limit?: number): Pattern[];
59
- /**
60
- * Export knowledge graph
61
- */
62
- exportKnowledgeGraph(): string;
63
- /**
64
- * Import knowledge graph
65
- */
66
- importKnowledgeGraph(json: string): void;
67
- private extractAndAddKnowledge;
68
- private extractEntities;
69
- private extractConcepts;
70
- }
71
- export declare const learningEngine: LearningEngine;
72
- //# sourceMappingURL=learning.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"learning.d.ts","sourceRoot":"","sources":["../learning.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,eAAe,EACf,WAAW,EACX,QAAQ,EACR,OAAO,EAEP,aAAa,EAEb,eAAe,EAKhB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAuctC,qBAAa,cAAe,SAAQ,YAAY;IAC9C,OAAO,CAAC,aAAa,CAA2B;IAChD,OAAO,CAAC,cAAc,CAAwB;IAC9C,OAAO,CAAC,gBAAgB,CAA2B;IACnD,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,QAAQ,CAA2C;;IAU3D;;OAEG;IACH,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,eAAe;IAoBvE;;OAEG;IACH,iBAAiB,CACf,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,QAAQ,GAClB,WAAW;IAuCd;;OAEG;IACH,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG;QACpD,YAAY,EAAE,WAAW,EAAE,CAAC;QAC5B,QAAQ,EAAE,OAAO,EAAE,CAAC;QACpB,SAAS,EAAE,aAAa,EAAE,CAAC;QAC3B,OAAO,EAAE,MAAM,CAAC;KACjB;IAkBD;;OAEG;IACH,YAAY,CACV,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,EAC3B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,OAAO,EAAE,MAAM,EAAE,GAChB,aAAa;IAmBhB;;OAEG;IACH,gBAAgB,CACd,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAAE,GACjB,IAAI;IAIP;;OAEG;IACH,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,EAAE;IAI9C;;OAEG;IACH,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,aAAa,EAAE;IAI1E;;OAEG;IACH,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,IAAI;IAI1E;;OAEG;IACH,cAAc,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,eAAe;IAIhD;;OAEG;IACH,cAAc,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,EAAE;IAIzC;;OAEG;IACH,oBAAoB,IAAI,MAAM;IAI9B;;OAEG;IACH,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIxC,OAAO,CAAC,sBAAsB;IA8B9B,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,eAAe;CAOxB;AAMD,eAAO,MAAM,cAAc,gBAAuB,CAAC"}
package/dist/learning.js DELETED
@@ -1,615 +0,0 @@
1
- "use strict";
2
- /**
3
- * Learning Module
4
- * Context memory, pattern recognition, feedback integration, and knowledge base management
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.learningEngine = exports.LearningEngine = void 0;
8
- const types_1 = require("./types");
9
- const events_1 = require("events");
10
- // ============================================================================
11
- // PATTERN RECOGNITION ENGINE
12
- // ============================================================================
13
- class PatternRecognitionEngine {
14
- constructor() {
15
- this.patterns = new Map();
16
- }
17
- recognize(input, context) {
18
- const matchedPatterns = [];
19
- this.patterns.forEach(pattern => {
20
- const matchScore = this.calculateMatchScore(input, pattern.pattern);
21
- if (matchScore > 0.7) {
22
- matchedPatterns.push({
23
- ...pattern,
24
- frequency: pattern.frequency + 1,
25
- lastObserved: new Date()
26
- });
27
- }
28
- });
29
- // Also extract new patterns from input
30
- const newPatterns = this.extractPatterns(input, context);
31
- newPatterns.forEach(p => {
32
- if (!this.patterns.has(p.id)) {
33
- this.patterns.set(p.id, p);
34
- matchedPatterns.push(p);
35
- }
36
- });
37
- return matchedPatterns.sort((a, b) => b.successRate - a.successRate);
38
- }
39
- updatePatternSuccess(patternId, success) {
40
- const pattern = this.patterns.get(patternId);
41
- if (pattern) {
42
- // Update success rate using exponential moving average
43
- const alpha = 0.3;
44
- pattern.successRate = alpha * (success ? 1 : 0) + (1 - alpha) * pattern.successRate;
45
- pattern.lastObserved = new Date();
46
- }
47
- }
48
- calculateMatchScore(input, pattern) {
49
- const inputWords = input.toLowerCase().split(/\s+/);
50
- const patternWords = pattern.toLowerCase().split(/\s+/);
51
- const matches = patternWords.filter(pw => inputWords.some(iw => iw.includes(pw) || pw.includes(iw))).length;
52
- return matches / Math.max(patternWords.length, 1);
53
- }
54
- extractPatterns(input, context) {
55
- const patterns = [];
56
- // Extract query patterns
57
- const queryPattern = this.extractQueryPattern(input);
58
- if (queryPattern) {
59
- patterns.push(queryPattern);
60
- }
61
- // Extract context patterns
62
- const contextPattern = this.extractContextPattern(context);
63
- if (contextPattern) {
64
- patterns.push(contextPattern);
65
- }
66
- return patterns;
67
- }
68
- extractQueryPattern(input) {
69
- // Extract key terms that form a pattern
70
- const keyTerms = input
71
- .toLowerCase()
72
- .split(/\s+/)
73
- .filter(w => w.length > 4 && !this.isStopWord(w));
74
- if (keyTerms.length < 2)
75
- return null;
76
- return {
77
- id: `pattern_query_${keyTerms.join('_')}`,
78
- type: 'query_pattern',
79
- pattern: keyTerms.join(' '),
80
- frequency: 1,
81
- successRate: 0.5,
82
- lastObserved: new Date()
83
- };
84
- }
85
- extractContextPattern(context) {
86
- const topics = this.extractTopics(context);
87
- if (topics.length < 2)
88
- return null;
89
- return {
90
- id: `pattern_context_${topics.join('_')}`,
91
- type: 'response_pattern',
92
- pattern: topics.join(' '),
93
- frequency: 1,
94
- successRate: 0.5,
95
- lastObserved: new Date()
96
- };
97
- }
98
- isStopWord(word) {
99
- const stopWords = new Set(['what', 'how', 'when', 'where', 'why', 'who', 'which', 'this', 'that', 'these', 'those']);
100
- return stopWords.has(word.toLowerCase());
101
- }
102
- extractTopics(text) {
103
- return text
104
- .toLowerCase()
105
- .match(/\b\w{5,}\b/g)
106
- ?.filter((w, i, arr) => arr.indexOf(w) === i)
107
- ?.slice(0, 5) || [];
108
- }
109
- getPatternsByType(type) {
110
- return Array.from(this.patterns.values()).filter(p => p.type === type);
111
- }
112
- getTopPatterns(limit = 10) {
113
- return Array.from(this.patterns.values())
114
- .sort((a, b) => b.successRate * b.frequency - a.successRate * a.frequency)
115
- .slice(0, limit);
116
- }
117
- }
118
- // ============================================================================
119
- // KNOWLEDGE GRAPH MANAGER
120
- // ============================================================================
121
- class KnowledgeGraphManager {
122
- constructor() {
123
- this.graph = {
124
- nodes: [],
125
- edges: [],
126
- version: 1,
127
- lastUpdated: new Date()
128
- };
129
- }
130
- addNode(node) {
131
- const newNode = {
132
- ...node,
133
- id: `node_${Date.now()}_${Math.random().toString(36).substr(2, 5)}`
134
- };
135
- // Check for similar existing nodes
136
- const existingNode = this.findSimilarNode(newNode);
137
- if (existingNode) {
138
- // Merge with existing node
139
- this.mergeNodes(existingNode, newNode);
140
- return existingNode;
141
- }
142
- this.graph.nodes.push(newNode);
143
- this.updateGraph();
144
- return newNode;
145
- }
146
- addEdge(from, to, relation, strength, evidence) {
147
- // Check if edge already exists
148
- const existingEdge = this.graph.edges.find(e => e.from === from && e.to === to && e.relation === relation);
149
- if (existingEdge) {
150
- // Update existing edge strength
151
- existingEdge.strength = Math.min(1, existingEdge.strength + strength * 0.1);
152
- existingEdge.evidence = [...new Set([...existingEdge.evidence, ...evidence])];
153
- }
154
- else {
155
- this.graph.edges.push({
156
- from,
157
- to,
158
- relation,
159
- strength,
160
- evidence
161
- });
162
- }
163
- this.updateGraph();
164
- }
165
- findRelated(nodeId, maxDepth = 2) {
166
- const related = new Set();
167
- const visited = new Set();
168
- const traverse = (currentId, depth) => {
169
- if (depth > maxDepth || visited.has(currentId))
170
- return;
171
- visited.add(currentId);
172
- this.graph.edges
173
- .filter(e => e.from === currentId || e.to === currentId)
174
- .forEach(e => {
175
- const relatedId = e.from === currentId ? e.to : e.from;
176
- related.add(relatedId);
177
- traverse(relatedId, depth + 1);
178
- });
179
- };
180
- traverse(nodeId, 0);
181
- return this.graph.nodes.filter(n => related.has(n.id));
182
- }
183
- query(query) {
184
- const queryWords = query.toLowerCase().split(/\s+/);
185
- return this.graph.nodes
186
- .map(node => ({
187
- node,
188
- score: this.calculateRelevance(node, queryWords)
189
- }))
190
- .filter(({ score }) => score > 0.3)
191
- .sort((a, b) => b.score - a.score)
192
- .map(({ node }) => node);
193
- }
194
- infer(fromNodeId, relationType) {
195
- const edges = this.graph.edges.filter(e => e.from === fromNodeId &&
196
- (relationType ? e.relation === relationType : true) &&
197
- e.strength > 0.5);
198
- return edges.map(e => this.graph.nodes.find(n => n.id === e.to)).filter(Boolean);
199
- }
200
- findSimilarNode(node) {
201
- return this.graph.nodes.find(n => {
202
- const labelSimilarity = this.calculateSimilarity(n.label, node.label);
203
- return labelSimilarity > 0.8;
204
- });
205
- }
206
- mergeNodes(existing, newNode) {
207
- // Merge properties
208
- existing.properties = { ...existing.properties, ...newNode.properties };
209
- // Update confidence
210
- existing.confidence = Math.max(existing.confidence, newNode.confidence);
211
- // Merge sources
212
- existing.sources = [...new Set([...existing.sources, ...newNode.sources])];
213
- }
214
- calculateRelevance(node, queryWords) {
215
- const nodeText = `${node.label} ${JSON.stringify(node.properties)}`.toLowerCase();
216
- const matches = queryWords.filter(qw => nodeText.includes(qw)).length;
217
- return matches / queryWords.length * node.confidence;
218
- }
219
- calculateSimilarity(str1, str2) {
220
- const words1 = str1.toLowerCase().split(/\s+/);
221
- const words2 = str2.toLowerCase().split(/\s+/);
222
- const intersection = words1.filter(w => words2.includes(w));
223
- const union = [...new Set([...words1, ...words2])];
224
- return intersection.length / union.length;
225
- }
226
- updateGraph() {
227
- this.graph.version++;
228
- this.graph.lastUpdated = new Date();
229
- }
230
- getGraph() {
231
- return { ...this.graph };
232
- }
233
- exportGraph() {
234
- return JSON.stringify(this.graph, null, 2);
235
- }
236
- importGraph(json) {
237
- this.graph = JSON.parse(json);
238
- }
239
- }
240
- // ============================================================================
241
- // PREFERENCE LEARNING ENGINE
242
- // ============================================================================
243
- class PreferenceLearningEngine {
244
- constructor() {
245
- this.preferences = new Map();
246
- this.defaultPreferences = {
247
- responseStyle: 'detailed',
248
- preferredSources: [],
249
- topicInterests: [],
250
- excludedTopics: [],
251
- language: 'en'
252
- };
253
- }
254
- getPreferences(userId) {
255
- if (userId && this.preferences.has(userId)) {
256
- return this.preferences.get(userId);
257
- }
258
- return { ...this.defaultPreferences };
259
- }
260
- updatePreferences(userId, updates) {
261
- const current = this.getPreferences(userId);
262
- this.preferences.set(userId, { ...current, ...updates });
263
- }
264
- learnFromInteraction(userId, interaction) {
265
- const prefs = this.getPreferences(userId);
266
- // Learn from query patterns
267
- const queryTopics = this.extractTopics(interaction.query);
268
- prefs.topicInterests = [...new Set([...prefs.topicInterests, ...queryTopics])];
269
- // Learn from feedback
270
- if (interaction.feedback) {
271
- this.learnFromFeedback(userId, interaction.feedback);
272
- }
273
- // Infer response style preference
274
- if (interaction.response.length < 100) {
275
- prefs.responseStyle = 'concise';
276
- }
277
- else if (interaction.response.length > 500) {
278
- prefs.responseStyle = 'detailed';
279
- }
280
- this.preferences.set(userId, prefs);
281
- }
282
- learnFromFeedback(userId, feedback) {
283
- const prefs = this.getPreferences(userId);
284
- if (feedback.rating >= 4) {
285
- // User liked the response - reinforce current style
286
- }
287
- else if (feedback.rating <= 2) {
288
- // User didn't like it - try different approach
289
- prefs.responseStyle = prefs.responseStyle === 'detailed' ? 'concise' : 'detailed';
290
- }
291
- // Process corrections
292
- if (feedback.corrections && feedback.corrections.length > 0) {
293
- // Learn from corrections
294
- }
295
- this.preferences.set(userId, prefs);
296
- }
297
- extractTopics(text) {
298
- return text
299
- .toLowerCase()
300
- .match(/\b\w{5,}\b/g)
301
- ?.filter((w, i, arr) => arr.indexOf(w) === i)
302
- ?.slice(0, 3) || [];
303
- }
304
- recommendPreferences(userId) {
305
- const prefs = this.getPreferences(userId);
306
- const recommendations = {};
307
- // Recommend based on interaction history
308
- if (prefs.topicInterests.length > 5) {
309
- recommendations.topicInterests = prefs.topicInterests.slice(0, 10);
310
- }
311
- return recommendations;
312
- }
313
- }
314
- // ============================================================================
315
- // CONTEXT MEMORY MANAGER
316
- // ============================================================================
317
- class ContextMemoryManager {
318
- constructor() {
319
- this.interactions = new Map();
320
- this.maxContextSize = 10;
321
- }
322
- addInteraction(sessionId, interaction) {
323
- if (!this.interactions.has(sessionId)) {
324
- this.interactions.set(sessionId, []);
325
- }
326
- const sessionInteractions = this.interactions.get(sessionId);
327
- sessionInteractions.push(interaction);
328
- // Keep only recent interactions
329
- if (sessionInteractions.length > this.maxContextSize) {
330
- sessionInteractions.shift();
331
- }
332
- }
333
- getContext(sessionId) {
334
- return this.interactions.get(sessionId) || [];
335
- }
336
- getRelevantContext(sessionId, query) {
337
- const allContext = this.getContext(sessionId);
338
- const queryWords = query.toLowerCase().split(/\s+/);
339
- return allContext
340
- .map(interaction => ({
341
- interaction,
342
- relevance: this.calculateRelevance(interaction, queryWords)
343
- }))
344
- .filter(({ relevance }) => relevance > 0.3)
345
- .sort((a, b) => b.relevance - a.relevance)
346
- .map(({ interaction }) => interaction);
347
- }
348
- summarizeContext(sessionId) {
349
- const context = this.getContext(sessionId);
350
- if (context.length === 0)
351
- return '';
352
- const topics = new Set();
353
- const keyPoints = [];
354
- context.forEach(interaction => {
355
- const queryTopics = this.extractTopics(interaction.query);
356
- queryTopics.forEach(t => topics.add(t));
357
- if (interaction.feedback?.helpful) {
358
- keyPoints.push(interaction.response.substring(0, 100));
359
- }
360
- });
361
- return `Previous topics: ${Array.from(topics).join(', ')}. ` +
362
- `Key points: ${keyPoints.join('; ')}`;
363
- }
364
- clearContext(sessionId) {
365
- this.interactions.delete(sessionId);
366
- }
367
- calculateRelevance(interaction, queryWords) {
368
- const text = `${interaction.query} ${interaction.response}`.toLowerCase();
369
- const matches = queryWords.filter(qw => text.includes(qw)).length;
370
- return matches / queryWords.length;
371
- }
372
- extractTopics(text) {
373
- return text
374
- .toLowerCase()
375
- .match(/\b\w{5,}\b/g)
376
- ?.filter((w, i, arr) => arr.indexOf(w) === i)
377
- ?.slice(0, 5) || [];
378
- }
379
- }
380
- // ============================================================================
381
- // MAIN LEARNING ENGINE
382
- // ============================================================================
383
- class LearningEngine extends events_1.EventEmitter {
384
- constructor() {
385
- super();
386
- this.contexts = new Map();
387
- this.patternEngine = new PatternRecognitionEngine();
388
- this.knowledgeGraph = new KnowledgeGraphManager();
389
- this.preferenceEngine = new PreferenceLearningEngine();
390
- this.contextManager = new ContextMemoryManager();
391
- }
392
- /**
393
- * Create or get learning context for a session
394
- */
395
- getOrCreateContext(sessionId, userId) {
396
- if (this.contexts.has(sessionId)) {
397
- return this.contexts.get(sessionId);
398
- }
399
- const context = {
400
- id: `ctx_${Date.now()}`,
401
- sessionId,
402
- userId,
403
- topic: '',
404
- previousInteractions: [],
405
- learnedPatterns: [],
406
- knowledgeGraph: this.knowledgeGraph.getGraph(),
407
- preferences: this.preferenceEngine.getPreferences(userId)
408
- };
409
- this.contexts.set(sessionId, context);
410
- return context;
411
- }
412
- /**
413
- * Record an interaction and learn from it
414
- */
415
- recordInteraction(sessionId, query, response, feedback) {
416
- const context = this.getOrCreateContext(sessionId);
417
- const interaction = {
418
- id: `int_${Date.now()}`,
419
- timestamp: new Date(),
420
- query,
421
- response,
422
- feedback,
423
- contextSnapshot: { ...context }
424
- };
425
- // Add to context memory
426
- this.contextManager.addInteraction(sessionId, interaction);
427
- context.previousInteractions.push(interaction);
428
- // Learn patterns
429
- const patterns = this.patternEngine.recognize(query, response);
430
- context.learnedPatterns.push(...patterns);
431
- // Update preferences if userId exists
432
- if (context.userId) {
433
- this.preferenceEngine.learnFromInteraction(context.userId, interaction);
434
- context.preferences = this.preferenceEngine.getPreferences(context.userId);
435
- }
436
- // Extract and add knowledge
437
- this.extractAndAddKnowledge(query, response);
438
- this.emit('interaction_recorded', {
439
- id: interaction.id,
440
- stage: types_1.ThinkingStage.LEARNING,
441
- timestamp: new Date(),
442
- data: { sessionId, patternsFound: patterns.length }
443
- });
444
- return interaction;
445
- }
446
- /**
447
- * Get relevant context for a query
448
- */
449
- getRelevantContext(sessionId, query) {
450
- const context = this.getOrCreateContext(sessionId);
451
- // Get relevant interactions
452
- const interactions = this.contextManager.getRelevantContext(sessionId, query);
453
- // Get relevant patterns
454
- const patterns = this.patternEngine.recognize(query, '');
455
- // Get relevant knowledge
456
- const knowledge = this.knowledgeGraph.query(query);
457
- // Get context summary
458
- const summary = this.contextManager.summarizeContext(sessionId);
459
- return { interactions, patterns, knowledge, summary };
460
- }
461
- /**
462
- * Add knowledge to the knowledge graph
463
- */
464
- addKnowledge(label, type, properties, sources) {
465
- const node = this.knowledgeGraph.addNode({
466
- label,
467
- type,
468
- properties,
469
- confidence: 0.8,
470
- sources
471
- });
472
- this.emit('knowledge_added', {
473
- id: node.id,
474
- stage: types_1.ThinkingStage.LEARNING,
475
- timestamp: new Date(),
476
- data: { label, type }
477
- });
478
- return node;
479
- }
480
- /**
481
- * Connect knowledge nodes
482
- */
483
- connectKnowledge(fromId, toId, relation, strength, evidence) {
484
- this.knowledgeGraph.addEdge(fromId, toId, relation, strength, evidence);
485
- }
486
- /**
487
- * Query knowledge graph
488
- */
489
- queryKnowledge(query) {
490
- return this.knowledgeGraph.query(query);
491
- }
492
- /**
493
- * Infer new knowledge
494
- */
495
- inferKnowledge(fromNodeId, relationType) {
496
- return this.knowledgeGraph.infer(fromNodeId, relationType);
497
- }
498
- /**
499
- * Update user preferences
500
- */
501
- updatePreferences(userId, updates) {
502
- this.preferenceEngine.updatePreferences(userId, updates);
503
- }
504
- /**
505
- * Get user preferences
506
- */
507
- getPreferences(userId) {
508
- return this.preferenceEngine.getPreferences(userId);
509
- }
510
- /**
511
- * Get top patterns
512
- */
513
- getTopPatterns(limit) {
514
- return this.patternEngine.getTopPatterns(limit);
515
- }
516
- /**
517
- * Export knowledge graph
518
- */
519
- exportKnowledgeGraph() {
520
- return this.knowledgeGraph.exportGraph();
521
- }
522
- /**
523
- * Import knowledge graph
524
- */
525
- importKnowledgeGraph(json) {
526
- this.knowledgeGraph.importGraph(json);
527
- }
528
- extractAndAddKnowledge(query, response) {
529
- // Extract entities from query and response
530
- const entities = this.extractEntities(`${query} ${response}`);
531
- entities.forEach(entity => {
532
- // Check if entity already exists
533
- const existing = this.knowledgeGraph.query(entity);
534
- if (existing.length === 0) {
535
- this.addKnowledge(entity, 'entity', { firstSeen: new Date().toISOString() }, ['interaction']);
536
- }
537
- });
538
- // Extract concepts
539
- const concepts = this.extractConcepts(response);
540
- concepts.forEach(concept => {
541
- this.addKnowledge(concept, 'concept', { extractedFrom: 'response' }, ['learning_engine']);
542
- });
543
- }
544
- extractEntities(text) {
545
- const capitalizedWords = text.match(/\b[A-Z][a-z]+(?:\s+[A-Z][a-z]+)*\b/g) || [];
546
- return [...new Set(capitalizedWords)];
547
- }
548
- extractConcepts(text) {
549
- return text
550
- .toLowerCase()
551
- .match(/\b\w{6,}\b/g)
552
- ?.filter((w, i, arr) => arr.indexOf(w) === i)
553
- ?.slice(0, 5) || [];
554
- }
555
- }
556
- exports.LearningEngine = LearningEngine;
557
- // ============================================================================
558
- // EXPORT SINGLETON INSTANCE
559
- // ============================================================================
560
- exports.learningEngine = new LearningEngine();
561
- // ============================================================================
562
- // EXAMPLE USAGE
563
- // ============================================================================
564
- /*
565
- // Create learning context
566
- const context = learningEngine.getOrCreateContext('session_123', 'user_456');
567
-
568
- // Record interactions
569
- const interaction1 = learningEngine.recordInteraction(
570
- 'session_123',
571
- 'What are the benefits of TypeScript?',
572
- 'TypeScript offers type safety, better IDE support, and easier refactoring...'
573
- );
574
-
575
- // Add feedback
576
- learningEngine.recordInteraction(
577
- 'session_123',
578
- 'How do I set up TypeScript?',
579
- 'To set up TypeScript, first install it with npm...',
580
- { rating: 5, helpful: true, comments: 'Very helpful!' }
581
- );
582
-
583
- // Get relevant context
584
- const relevant = learningEngine.getRelevantContext(
585
- 'session_123',
586
- 'TypeScript configuration'
587
- );
588
-
589
- // Add knowledge
590
- const node = learningEngine.addKnowledge(
591
- 'TypeScript',
592
- 'concept',
593
- { category: 'programming_language', creator: 'Microsoft' },
594
- ['official_documentation']
595
- );
596
-
597
- // Connect knowledge
598
- learningEngine.connectKnowledge(
599
- node.id,
600
- 'node_javascript',
601
- 'superset_of',
602
- 0.95,
603
- ['TypeScript extends JavaScript']
604
- );
605
-
606
- // Query knowledge
607
- const results = learningEngine.queryKnowledge('programming');
608
-
609
- // Get patterns
610
- const patterns = learningEngine.getTopPatterns(5);
611
-
612
- // Export knowledge graph
613
- const graphJson = learningEngine.exportKnowledgeGraph();
614
- */
615
- //# sourceMappingURL=learning.js.map