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,6 @@
1
+ import { EventEmitter } from 'events';
2
+ export declare class LearningEngine extends EventEmitter {
3
+ constructor();
4
+ }
5
+ export declare function createLearningEngine(): LearningEngine;
6
+ //# sourceMappingURL=learning-engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"learning-engine.d.ts","sourceRoot":"","sources":["../../src/learning/learning-engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAKtC,qBAAa,cAAe,SAAQ,YAAY;;CAI/C;AAED,wBAAgB,oBAAoB,IAAI,cAAc,CAErD"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LearningEngine = void 0;
4
+ exports.createLearningEngine = createLearningEngine;
5
+ const events_1 = require("events");
6
+ const logger_1 = require("../utils/logger");
7
+ const logger = new logger_1.Logger('LearningEngine');
8
+ class LearningEngine extends events_1.EventEmitter {
9
+ constructor() {
10
+ super();
11
+ }
12
+ }
13
+ exports.LearningEngine = LearningEngine;
14
+ function createLearningEngine() {
15
+ return new LearningEngine();
16
+ }
17
+ //# sourceMappingURL=learning-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"learning-engine.js","sourceRoot":"","sources":["../../src/learning/learning-engine.ts"],"names":[],"mappings":";;;AAWA,oDAEC;AAbD,mCAAsC;AACtC,4CAAyC;AAEzC,MAAM,MAAM,GAAG,IAAI,eAAM,CAAC,gBAAgB,CAAC,CAAC;AAE5C,MAAa,cAAe,SAAQ,qBAAY;IAC9C;QACE,KAAK,EAAE,CAAC;IACV,CAAC;CACF;AAJD,wCAIC;AAED,SAAgB,oBAAoB;IAClC,OAAO,IAAI,cAAc,EAAE,CAAC;AAC9B,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * LLM Module Exports
3
+ *
4
+ * @module llm
5
+ */
6
+ export * from './sanitization';
7
+ export * from './providers/base';
8
+ export * from './providers/gemini';
9
+ export * from './llm-service';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/llm/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ /**
3
+ * LLM Module Exports
4
+ *
5
+ * @module llm
6
+ */
7
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
+ if (k2 === undefined) k2 = k;
9
+ var desc = Object.getOwnPropertyDescriptor(m, k);
10
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
+ desc = { enumerable: true, get: function() { return m[k]; } };
12
+ }
13
+ Object.defineProperty(o, k2, desc);
14
+ }) : (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ o[k2] = m[k];
17
+ }));
18
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
19
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
20
+ };
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ __exportStar(require("./sanitization"), exports);
23
+ __exportStar(require("./providers/base"), exports);
24
+ __exportStar(require("./providers/gemini"), exports);
25
+ __exportStar(require("./llm-service"), exports);
26
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/llm/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;AAEH,iDAA+B;AAC/B,mDAAiC;AACjC,qDAAmC;AACnC,gDAA8B"}
@@ -0,0 +1,109 @@
1
+ /**
2
+ * LLM Service for GThinking v2.0.0
3
+ *
4
+ * Secure LLM service that uses HTTP APIs instead of command-line
5
+ * to prevent command injection vulnerabilities.
6
+ *
7
+ * @module llm/llm-service
8
+ */
9
+ import type { LLMMessage, LLMRequestOptions, LLMResponse } from './providers/base';
10
+ import type { EngineConfig } from '../types/core';
11
+ /**
12
+ * LLM service configuration
13
+ */
14
+ export interface LLMServiceConfig {
15
+ provider: 'gemini' | 'claude' | 'openai' | 'cli';
16
+ apiKey?: string;
17
+ model?: string;
18
+ cliCommand?: string;
19
+ cliArgs?: string[];
20
+ cliPromptPassingMethod?: 'stdin' | 'arg';
21
+ cliPromptFlag?: string;
22
+ timeoutMs?: number;
23
+ maxRetries?: number;
24
+ }
25
+ /**
26
+ * LLM Service
27
+ *
28
+ * Provides a unified interface for interacting with various LLM providers
29
+ * with built-in security measures including input sanitization.
30
+ */
31
+ export declare class LLMService {
32
+ private provider;
33
+ private readonly logger;
34
+ /**
35
+ * Create a new LLM service
36
+ *
37
+ * @param config - LLM service configuration
38
+ */
39
+ constructor(config: LLMServiceConfig);
40
+ /**
41
+ * Create LLM service from engine configuration
42
+ *
43
+ * @param config - Engine configuration
44
+ * @returns LLM service instance
45
+ */
46
+ static fromConfig(config: EngineConfig): LLMService;
47
+ /**
48
+ * Complete a prompt with the LLM
49
+ *
50
+ * @param prompt - User prompt
51
+ * @param systemPrompt - Optional system prompt
52
+ * @param options - Request options
53
+ * @returns LLM response
54
+ */
55
+ complete(prompt: string, systemPrompt?: string, options?: LLMRequestOptions): Promise<string>;
56
+ /**
57
+ * Stream a prompt completion from the LLM
58
+ *
59
+ * @param prompt - User prompt
60
+ * @param systemPrompt - Optional system prompt
61
+ * @param options - Request options
62
+ * @returns Async generator of stream chunks
63
+ */
64
+ stream(prompt: string, systemPrompt?: string, options?: LLMRequestOptions): AsyncGenerator<string>;
65
+ /**
66
+ * Complete with structured messages
67
+ *
68
+ * @param messages - Array of messages
69
+ * @param options - Request options
70
+ * @returns LLM response
71
+ */
72
+ completeMessages(messages: LLMMessage[], options?: LLMRequestOptions): Promise<LLMResponse>;
73
+ /**
74
+ * Check if the service is properly configured
75
+ *
76
+ * @returns True if configured correctly
77
+ */
78
+ isConfigured(): boolean;
79
+ /**
80
+ * Get the current provider name
81
+ *
82
+ * @returns Provider name or null
83
+ */
84
+ getProviderName(): string | null;
85
+ /**
86
+ * Get available models for the current provider
87
+ *
88
+ * @returns Array of model names
89
+ */
90
+ getAvailableModels(): string[];
91
+ /**
92
+ * Initialize the LLM provider
93
+ *
94
+ * @param config - Service configuration
95
+ */
96
+ private initializeProvider;
97
+ /**
98
+ * Ensure provider is initialized
99
+ */
100
+ private ensureProvider;
101
+ }
102
+ /**
103
+ * Create an LLM service from configuration
104
+ *
105
+ * @param config - Engine configuration
106
+ * @returns LLM service instance
107
+ */
108
+ export declare function createLLMService(config: EngineConfig): LLMService;
109
+ //# sourceMappingURL=llm-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-service.d.ts","sourceRoot":"","sources":["../../src/llm/llm-service.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAgB,UAAU,EAAE,iBAAiB,EAAE,WAAW,EAAkB,MAAM,kBAAkB,CAAC;AAMjH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,KAAK,CAAC;IACjD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,sBAAsB,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IACzC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;GAKG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAA6B;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuC;IAE9D;;;;OAIG;gBACS,MAAM,EAAE,gBAAgB;IAIpC;;;;;OAKG;IACH,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,UAAU;IAqBnD;;;;;;;OAOG;IACG,QAAQ,CACZ,MAAM,EAAE,MAAM,EACd,YAAY,CAAC,EAAE,MAAM,EACrB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,MAAM,CAAC;IA+BlB;;;;;;;OAOG;IACI,MAAM,CACX,MAAM,EAAE,MAAM,EACd,YAAY,CAAC,EAAE,MAAM,EACrB,OAAO,GAAE,iBAAsB,GAC9B,cAAc,CAAC,MAAM,CAAC;IA2BzB;;;;;;OAMG;IACG,gBAAgB,CACpB,QAAQ,EAAE,UAAU,EAAE,EACtB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,WAAW,CAAC;IAiBvB;;;;OAIG;IACH,YAAY,IAAI,OAAO;IAIvB;;;;OAIG;IACH,eAAe,IAAI,MAAM,GAAG,IAAI;IAIhC;;;;OAIG;IACH,kBAAkB,IAAI,MAAM,EAAE;IAI9B;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IA+C1B;;OAEG;IACH,OAAO,CAAC,cAAc;CAKvB;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,UAAU,CAEjE"}
@@ -0,0 +1,224 @@
1
+ "use strict";
2
+ /**
3
+ * LLM Service for GThinking v2.0.0
4
+ *
5
+ * Secure LLM service that uses HTTP APIs instead of command-line
6
+ * to prevent command injection vulnerabilities.
7
+ *
8
+ * @module llm/llm-service
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.LLMService = void 0;
12
+ exports.createLLMService = createLLMService;
13
+ const gemini_1 = require("./providers/gemini");
14
+ const cli_1 = require("./providers/cli");
15
+ const sanitization_1 = require("./sanitization");
16
+ const errors_1 = require("../core/errors");
17
+ const logger_1 = require("../utils/logger");
18
+ /**
19
+ * LLM Service
20
+ *
21
+ * Provides a unified interface for interacting with various LLM providers
22
+ * with built-in security measures including input sanitization.
23
+ */
24
+ class LLMService {
25
+ provider = null;
26
+ logger = (0, logger_1.createComponentLogger)('LLMService');
27
+ /**
28
+ * Create a new LLM service
29
+ *
30
+ * @param config - LLM service configuration
31
+ */
32
+ constructor(config) {
33
+ this.initializeProvider(config);
34
+ }
35
+ /**
36
+ * Create LLM service from engine configuration
37
+ *
38
+ * @param config - Engine configuration
39
+ * @returns LLM service instance
40
+ */
41
+ static fromConfig(config) {
42
+ const apiKey = config.llmApiKey;
43
+ // Only require API key if NOT using CLI provider
44
+ if (config.llmProvider !== 'cli' && (apiKey === undefined || apiKey === '')) {
45
+ throw new errors_1.LLMError('LLM API key not configured', config.llmProvider);
46
+ }
47
+ return new LLMService({
48
+ provider: config.llmProvider,
49
+ apiKey,
50
+ model: config.llmModel,
51
+ cliCommand: config.llmCliCommand || 'gemini', // Pass the command from config
52
+ cliArgs: config.llmCliArgs,
53
+ cliPromptPassingMethod: config.llmCliPromptPassingMethod,
54
+ cliPromptFlag: config.llmCliPromptFlag,
55
+ timeoutMs: config.llmTimeoutMs,
56
+ maxRetries: config.llmMaxRetries,
57
+ });
58
+ }
59
+ /**
60
+ * Complete a prompt with the LLM
61
+ *
62
+ * @param prompt - User prompt
63
+ * @param systemPrompt - Optional system prompt
64
+ * @param options - Request options
65
+ * @returns LLM response
66
+ */
67
+ async complete(prompt, systemPrompt, options = {}) {
68
+ this.ensureProvider();
69
+ // Sanitize inputs
70
+ const sanitizedPrompt = (0, sanitization_1.sanitizePrompt)(prompt);
71
+ const sanitizedSystemPrompt = systemPrompt ? (0, sanitization_1.sanitizePrompt)(systemPrompt) : undefined;
72
+ // Validate inputs
73
+ const validation = (0, sanitization_1.validatePrompt)(sanitizedPrompt);
74
+ if (!validation.safe) {
75
+ this.logger.warn('Prompt validation warnings', { issues: validation.issues });
76
+ }
77
+ const messages = [];
78
+ if (sanitizedSystemPrompt !== undefined) {
79
+ messages.push({ role: 'system', content: sanitizedSystemPrompt });
80
+ }
81
+ messages.push({ role: 'user', content: sanitizedPrompt });
82
+ this.logger.debug('Sending completion request', {
83
+ provider: this.provider.name,
84
+ model: options.model,
85
+ });
86
+ const response = await this.provider.complete(messages, options);
87
+ return response.content;
88
+ }
89
+ /**
90
+ * Stream a prompt completion from the LLM
91
+ *
92
+ * @param prompt - User prompt
93
+ * @param systemPrompt - Optional system prompt
94
+ * @param options - Request options
95
+ * @returns Async generator of stream chunks
96
+ */
97
+ async *stream(prompt, systemPrompt, options = {}) {
98
+ this.ensureProvider();
99
+ // Sanitize inputs
100
+ const sanitizedPrompt = (0, sanitization_1.sanitizePrompt)(prompt);
101
+ const sanitizedSystemPrompt = systemPrompt ? (0, sanitization_1.sanitizePrompt)(systemPrompt) : undefined;
102
+ const messages = [];
103
+ if (sanitizedSystemPrompt !== undefined) {
104
+ messages.push({ role: 'system', content: sanitizedSystemPrompt });
105
+ }
106
+ messages.push({ role: 'user', content: sanitizedPrompt });
107
+ this.logger.debug('Starting stream request', {
108
+ provider: this.provider.name,
109
+ model: options.model,
110
+ });
111
+ for await (const chunk of this.provider.stream(messages, options)) {
112
+ if (chunk.content) {
113
+ yield chunk.content;
114
+ }
115
+ }
116
+ }
117
+ /**
118
+ * Complete with structured messages
119
+ *
120
+ * @param messages - Array of messages
121
+ * @param options - Request options
122
+ * @returns LLM response
123
+ */
124
+ async completeMessages(messages, options = {}) {
125
+ this.ensureProvider();
126
+ // Sanitize all messages
127
+ const sanitizedMessages = messages.map(msg => ({
128
+ ...msg,
129
+ content: (0, sanitization_1.sanitizePrompt)(msg.content),
130
+ }));
131
+ this.logger.debug('Sending messages completion request', {
132
+ provider: this.provider.name,
133
+ messageCount: sanitizedMessages.length,
134
+ });
135
+ return this.provider.complete(sanitizedMessages, options);
136
+ }
137
+ /**
138
+ * Check if the service is properly configured
139
+ *
140
+ * @returns True if configured correctly
141
+ */
142
+ isConfigured() {
143
+ return this.provider !== null && this.provider.validateConfig();
144
+ }
145
+ /**
146
+ * Get the current provider name
147
+ *
148
+ * @returns Provider name or null
149
+ */
150
+ getProviderName() {
151
+ return this.provider?.name ?? null;
152
+ }
153
+ /**
154
+ * Get available models for the current provider
155
+ *
156
+ * @returns Array of model names
157
+ */
158
+ getAvailableModels() {
159
+ return this.provider?.availableModels ?? [];
160
+ }
161
+ /**
162
+ * Initialize the LLM provider
163
+ *
164
+ * @param config - Service configuration
165
+ */
166
+ initializeProvider(config) {
167
+ switch (config.provider) {
168
+ case 'gemini':
169
+ this.provider = new gemini_1.GeminiProvider({
170
+ apiKey: config.apiKey,
171
+ model: config.model,
172
+ timeoutMs: config.timeoutMs,
173
+ maxRetries: config.maxRetries,
174
+ });
175
+ break;
176
+ case 'claude':
177
+ // Claude provider would be implemented here
178
+ throw new errors_1.LLMError('Claude provider not yet implemented', 'claude');
179
+ case 'openai':
180
+ // OpenAI provider would be implemented here
181
+ throw new errors_1.LLMError('OpenAI provider not yet implemented', 'openai');
182
+ case 'cli':
183
+ // Auto-configure defaults for known tools if not specified
184
+ let promptMethod = config.cliPromptPassingMethod || 'stdin';
185
+ let promptFlag = config.cliPromptFlag;
186
+ // Smart defaults for Gemini if using cli command 'gemini'
187
+ if (config.cliCommand === 'gemini' && !config.cliPromptPassingMethod) {
188
+ promptMethod = 'arg';
189
+ promptFlag = '-p';
190
+ }
191
+ this.provider = new cli_1.CLIProvider({
192
+ command: config.cliCommand || 'gemini',
193
+ args: config.cliArgs,
194
+ promptPassingMethod: promptMethod,
195
+ promptFlag: promptFlag,
196
+ timeoutMs: config.timeoutMs,
197
+ maxRetries: config.maxRetries
198
+ });
199
+ break;
200
+ default:
201
+ throw new errors_1.LLMError(`Unknown provider: ${config.provider}`, String(config.provider));
202
+ }
203
+ this.logger.info('LLM provider initialized', { provider: config.provider });
204
+ }
205
+ /**
206
+ * Ensure provider is initialized
207
+ */
208
+ ensureProvider() {
209
+ if (this.provider === null) {
210
+ throw new errors_1.LLMError('LLM provider not initialized', 'unknown');
211
+ }
212
+ }
213
+ }
214
+ exports.LLMService = LLMService;
215
+ /**
216
+ * Create an LLM service from configuration
217
+ *
218
+ * @param config - Engine configuration
219
+ * @returns LLM service instance
220
+ */
221
+ function createLLMService(config) {
222
+ return LLMService.fromConfig(config);
223
+ }
224
+ //# sourceMappingURL=llm-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-service.js","sourceRoot":"","sources":["../../src/llm/llm-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Base LLM Provider Interface
3
+ *
4
+ * @module llm/providers/base
5
+ */
6
+ /**
7
+ * LLM message role
8
+ */
9
+ export type MessageRole = 'system' | 'user' | 'assistant';
10
+ /**
11
+ * LLM message
12
+ */
13
+ export interface LLMMessage {
14
+ role: MessageRole;
15
+ content: string;
16
+ }
17
+ /**
18
+ * LLM request options
19
+ */
20
+ export interface LLMRequestOptions {
21
+ model?: string;
22
+ temperature?: number;
23
+ maxTokens?: number;
24
+ topP?: number;
25
+ frequencyPenalty?: number;
26
+ presencePenalty?: number;
27
+ stopSequences?: string[];
28
+ timeoutMs?: number;
29
+ }
30
+ /**
31
+ * LLM response
32
+ */
33
+ export interface LLMResponse {
34
+ content: string;
35
+ model: string;
36
+ usage: {
37
+ promptTokens: number;
38
+ completionTokens: number;
39
+ totalTokens: number;
40
+ };
41
+ finishReason: string;
42
+ }
43
+ /**
44
+ * LLM stream chunk
45
+ */
46
+ export interface LLMStreamChunk {
47
+ content: string;
48
+ isComplete: boolean;
49
+ }
50
+ /**
51
+ * Base LLM provider interface
52
+ */
53
+ export interface ILLMProvider {
54
+ readonly name: string;
55
+ readonly availableModels: string[];
56
+ complete(messages: LLMMessage[], options?: LLMRequestOptions): Promise<LLMResponse>;
57
+ stream(messages: LLMMessage[], options?: LLMRequestOptions): AsyncGenerator<LLMStreamChunk>;
58
+ validateConfig(): boolean;
59
+ }
60
+ /**
61
+ * Base LLM provider class
62
+ */
63
+ export declare abstract class BaseLLMProvider implements ILLMProvider {
64
+ abstract readonly name: string;
65
+ abstract readonly availableModels: string[];
66
+ protected apiKey: string;
67
+ protected baseUrl: string;
68
+ protected defaultModel: string;
69
+ protected timeoutMs: number;
70
+ protected maxRetries: number;
71
+ constructor(config: {
72
+ apiKey: string;
73
+ baseUrl: string;
74
+ defaultModel: string;
75
+ timeoutMs?: number;
76
+ maxRetries?: number;
77
+ });
78
+ abstract complete(messages: LLMMessage[], options?: LLMRequestOptions): Promise<LLMResponse>;
79
+ abstract stream(messages: LLMMessage[], options?: LLMRequestOptions): AsyncGenerator<LLMStreamChunk>;
80
+ validateConfig(): boolean;
81
+ protected getModel(options?: LLMRequestOptions): string;
82
+ protected withRetry<T>(operation: () => Promise<T>, retries?: number): Promise<T>;
83
+ protected isNonRetryableError(error: unknown): boolean;
84
+ }
85
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/llm/providers/base.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ /**
3
+ * Base LLM Provider Interface
4
+ *
5
+ * @module llm/providers/base
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.BaseLLMProvider = void 0;
9
+ /**
10
+ * Base LLM provider class
11
+ */
12
+ class BaseLLMProvider {
13
+ apiKey;
14
+ baseUrl;
15
+ defaultModel;
16
+ timeoutMs;
17
+ maxRetries;
18
+ constructor(config) {
19
+ this.apiKey = config.apiKey;
20
+ this.baseUrl = config.baseUrl;
21
+ this.defaultModel = config.defaultModel;
22
+ this.timeoutMs = config.timeoutMs ?? 30000;
23
+ this.maxRetries = config.maxRetries ?? 3;
24
+ }
25
+ validateConfig() {
26
+ return this.apiKey.length > 0 && this.baseUrl.length > 0;
27
+ }
28
+ getModel(options) {
29
+ return options?.model ?? this.defaultModel;
30
+ }
31
+ async withRetry(operation, retries = this.maxRetries) {
32
+ let lastError;
33
+ for (let i = 0; i <= retries; i++) {
34
+ try {
35
+ return await operation();
36
+ }
37
+ catch (error) {
38
+ lastError = error;
39
+ // Don't retry on certain errors
40
+ if (this.isNonRetryableError(error)) {
41
+ throw error;
42
+ }
43
+ if (i < retries) {
44
+ const delay = Math.pow(2, i) * 1000; // Exponential backoff
45
+ await new Promise(resolve => setTimeout(resolve, delay));
46
+ }
47
+ }
48
+ }
49
+ throw lastError;
50
+ }
51
+ isNonRetryableError(error) {
52
+ // Override in subclasses for provider-specific logic
53
+ return false;
54
+ }
55
+ }
56
+ exports.BaseLLMProvider = BaseLLMProvider;
57
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/llm/providers/base.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAiEH;;GAEG;AACH,MAAsB,eAAe;IAIzB,MAAM,CAAS;IACf,OAAO,CAAS;IAChB,YAAY,CAAS;IACrB,SAAS,CAAS;IAClB,UAAU,CAAS;IAE7B,YAAY,MAMX;QACC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC9B,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;QACxC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,KAAK,CAAC;QAC3C,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;IAC3C,CAAC;IAYD,cAAc;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;IAC3D,CAAC;IAES,QAAQ,CAAC,OAA2B;QAC5C,OAAO,OAAO,EAAE,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC;IAC7C,CAAC;IAES,KAAK,CAAC,SAAS,CACvB,SAA2B,EAC3B,OAAO,GAAG,IAAI,CAAC,UAAU;QAEzB,IAAI,SAA4B,CAAC;QAEjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;YAClC,IAAI,CAAC;gBACH,OAAO,MAAM,SAAS,EAAE,CAAC;YAC3B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,SAAS,GAAG,KAAc,CAAC;gBAE3B,gCAAgC;gBAChC,IAAI,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;oBACpC,MAAM,KAAK,CAAC;gBACd,CAAC;gBAED,IAAI,CAAC,GAAG,OAAO,EAAE,CAAC;oBAChB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,sBAAsB;oBAC3D,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;gBAC3D,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,SAAS,CAAC;IAClB,CAAC;IAES,mBAAmB,CAAC,KAAc;QAC1C,qDAAqD;QACrD,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AAzED,0CAyEC"}
@@ -0,0 +1,23 @@
1
+ import { BaseLLMProvider, type LLMMessage, type LLMRequestOptions, type LLMResponse, type LLMStreamChunk } from './base';
2
+ export interface CLIConfig {
3
+ command: string;
4
+ args?: string[];
5
+ promptPassingMethod?: 'stdin' | 'arg';
6
+ promptFlag?: string;
7
+ timeoutMs?: number;
8
+ maxRetries?: number;
9
+ }
10
+ export declare class CLIProvider extends BaseLLMProvider {
11
+ readonly name = "cli";
12
+ readonly availableModels: string[];
13
+ private command;
14
+ private defaultArgs;
15
+ private promptPassingMethod;
16
+ private promptFlag?;
17
+ constructor(config: CLIConfig);
18
+ private getPromptText;
19
+ private getLatestPrompt;
20
+ complete(messages: LLMMessage[], options?: LLMRequestOptions): Promise<LLMResponse>;
21
+ stream(messages: LLMMessage[], options?: LLMRequestOptions): AsyncGenerator<LLMStreamChunk>;
22
+ }
23
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../../src/llm/providers/cli.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,KAAK,UAAU,EAAE,KAAK,iBAAiB,EAAE,KAAK,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,QAAQ,CAAC;AAIzH,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,mBAAmB,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,WAAY,SAAQ,eAAe;IAC9C,QAAQ,CAAC,IAAI,SAAS;IACtB,QAAQ,CAAC,eAAe,WAAqB;IAC7C,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,WAAW,CAAW;IAC9B,OAAO,CAAC,mBAAmB,CAAkB;IAC7C,OAAO,CAAC,UAAU,CAAC,CAAS;gBAEhB,MAAM,EAAE,SAAS;IAgB7B,OAAO,CAAC,aAAa;IAWrB,OAAO,CAAC,eAAe;IAKjB,QAAQ,CACZ,QAAQ,EAAE,UAAU,EAAE,EACtB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,WAAW,CAAC;IAoEhB,MAAM,CACX,QAAQ,EAAE,UAAU,EAAE,EACtB,OAAO,GAAE,iBAAsB,GAC9B,cAAc,CAAC,cAAc,CAAC;CAwDlC"}