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,349 @@
1
+ /**
2
+ * Core Error Classes for gthinking v2.0.0
3
+ * Comprehensive error handling
4
+ */
5
+
6
+ import { ThinkingStage } from '../types';
7
+
8
+ /**
9
+ * Base error class for all gthinking errors
10
+ */
11
+ export class GThinkingError extends Error {
12
+ public readonly code: string;
13
+ public readonly timestamp: Date;
14
+ public readonly details: Record<string, unknown>;
15
+
16
+ constructor(
17
+ message: string,
18
+ code: string,
19
+ details: Record<string, unknown> = {}
20
+ ) {
21
+ super(message);
22
+ this.name = 'GThinkingError';
23
+ this.code = code;
24
+ this.timestamp = new Date();
25
+ this.details = details;
26
+ Error.captureStackTrace(this, this.constructor);
27
+ }
28
+
29
+ toJSON(): Record<string, unknown> {
30
+ return {
31
+ name: this.name,
32
+ message: this.message,
33
+ code: this.code,
34
+ timestamp: this.timestamp,
35
+ details: this.details,
36
+ stack: this.stack,
37
+ };
38
+ }
39
+ }
40
+
41
+ /**
42
+ * Validation error for invalid input
43
+ */
44
+ export class ValidationError extends GThinkingError {
45
+ constructor(message: string, details: Record<string, unknown> = {}) {
46
+ super(message, 'VALIDATION_ERROR', details);
47
+ this.name = 'ValidationError';
48
+ }
49
+ }
50
+
51
+ /**
52
+ * Timeout error for operations that exceed time limit
53
+ */
54
+ export class TimeoutError extends GThinkingError {
55
+ public readonly stage?: ThinkingStage;
56
+
57
+ constructor(message: string, stage?: ThinkingStage) {
58
+ super(message, 'TIMEOUT_ERROR', { stage });
59
+ this.name = 'TimeoutError';
60
+ this.stage = stage;
61
+ }
62
+ }
63
+
64
+ /**
65
+ * Cache error for caching operations
66
+ */
67
+ export class CacheError extends GThinkingError {
68
+ constructor(message: string, details: Record<string, unknown> = {}) {
69
+ super(message, 'CACHE_ERROR', details);
70
+ this.name = 'CacheError';
71
+ }
72
+ }
73
+
74
+ /**
75
+ * Stage error for thinking stage failures
76
+ */
77
+ export class StageError extends GThinkingError {
78
+ public readonly stage: ThinkingStage;
79
+ public readonly retryable: boolean;
80
+
81
+ constructor(
82
+ message: string,
83
+ stage: ThinkingStage,
84
+ retryable = false,
85
+ details: Record<string, unknown> = {}
86
+ ) {
87
+ super(message, 'STAGE_ERROR', { stage, retryable, ...details });
88
+ this.name = 'StageError';
89
+ this.stage = stage;
90
+ this.retryable = retryable;
91
+ }
92
+ }
93
+
94
+ /**
95
+ * LLM error for LLM service failures
96
+ */
97
+ export class LLMError extends GThinkingError {
98
+ public readonly provider: string;
99
+ public readonly statusCode?: number;
100
+
101
+ constructor(
102
+ message: string,
103
+ provider: string,
104
+ statusCode?: number,
105
+ details: Record<string, unknown> = {}
106
+ ) {
107
+ super(message, 'LLM_ERROR', { provider, statusCode, ...details });
108
+ this.name = 'LLMError';
109
+ this.provider = provider;
110
+ this.statusCode = statusCode;
111
+ }
112
+ }
113
+
114
+ /**
115
+ * Search error for search operation failures
116
+ */
117
+ export class SearchError extends GThinkingError {
118
+ public readonly provider: string;
119
+
120
+ constructor(
121
+ message: string,
122
+ provider: string,
123
+ details: Record<string, unknown> = {}
124
+ ) {
125
+ super(message, 'SEARCH_ERROR', { provider, ...details });
126
+ this.name = 'SearchError';
127
+ this.provider = provider;
128
+ }
129
+ }
130
+
131
+ /**
132
+ * Configuration error for invalid configuration
133
+ */
134
+ export class ConfigurationError extends GThinkingError {
135
+ constructor(message: string, details: Record<string, unknown> = {}) {
136
+ super(message, 'CONFIGURATION_ERROR', details);
137
+ this.name = 'ConfigurationError';
138
+ }
139
+ }
140
+
141
+ /**
142
+ * Security error for security-related issues
143
+ */
144
+ export class SecurityError extends GThinkingError {
145
+ constructor(message: string, details: Record<string, unknown> = {}) {
146
+ super(message, 'SECURITY_ERROR', details);
147
+ this.name = 'SecurityError';
148
+ }
149
+ }
150
+
151
+ /**
152
+ * Rate limit error for rate limiting
153
+ */
154
+ export class RateLimitError extends GThinkingError {
155
+ public readonly retryAfter: number;
156
+
157
+ constructor(message: string, retryAfter: number) {
158
+ super(message, 'RATE_LIMIT_ERROR', { retryAfter });
159
+ this.name = 'RateLimitError';
160
+ this.retryAfter = retryAfter;
161
+ }
162
+ }
163
+
164
+ /**
165
+ * Error codes enum
166
+ */
167
+ export enum ErrorCode {
168
+ VALIDATION_ERROR = 'VALIDATION_ERROR',
169
+ TIMEOUT_ERROR = 'TIMEOUT_ERROR',
170
+ CACHE_ERROR = 'CACHE_ERROR',
171
+ STAGE_ERROR = 'STAGE_ERROR',
172
+ LLM_ERROR = 'LLM_ERROR',
173
+ SEARCH_ERROR = 'SEARCH_ERROR',
174
+ CONFIGURATION_ERROR = 'CONFIGURATION_ERROR',
175
+ SECURITY_ERROR = 'SECURITY_ERROR',
176
+ RATE_LIMIT_ERROR = 'RATE_LIMIT_ERROR',
177
+ UNKNOWN_ERROR = 'UNKNOWN_ERROR',
178
+ }
179
+
180
+ /**
181
+ * Error handler function type
182
+ */
183
+ export type ErrorHandler = (error: Error) => void | Promise<void>;
184
+
185
+ /**
186
+ * Global error handler registry
187
+ */
188
+ class ErrorHandlerRegistry {
189
+ private handlers: Map<string, ErrorHandler[]> = new Map();
190
+
191
+ /**
192
+ * Register an error handler
193
+ * @param errorCode - The error code to handle
194
+ * @param handler - The error handler function
195
+ */
196
+ public register(errorCode: string, handler: ErrorHandler): void {
197
+ if (!this.handlers.has(errorCode)) {
198
+ this.handlers.set(errorCode, []);
199
+ }
200
+ this.handlers.get(errorCode)!.push(handler);
201
+ }
202
+
203
+ /**
204
+ * Unregister an error handler
205
+ * @param errorCode - The error code
206
+ * @param handler - The handler to remove
207
+ */
208
+ public unregister(errorCode: string, handler: ErrorHandler): void {
209
+ const handlers = this.handlers.get(errorCode);
210
+ if (handlers) {
211
+ const index = handlers.indexOf(handler);
212
+ if (index > -1) {
213
+ handlers.splice(index, 1);
214
+ }
215
+ }
216
+ }
217
+
218
+ /**
219
+ * Handle an error
220
+ * @param error - The error to handle
221
+ */
222
+ public async handle(error: Error): Promise<void> {
223
+ const gError = error as GThinkingError;
224
+ const errorCode = gError.code || ErrorCode.UNKNOWN_ERROR;
225
+
226
+ const handlers = this.handlers.get(errorCode) || [];
227
+
228
+ for (const handler of handlers) {
229
+ try {
230
+ await handler(error);
231
+ } catch (handlerError) {
232
+ console.error('Error handler failed:', handlerError);
233
+ }
234
+ }
235
+ }
236
+
237
+ /**
238
+ * Clear all handlers
239
+ */
240
+ public clear(): void {
241
+ this.handlers.clear();
242
+ }
243
+ }
244
+
245
+ // Export singleton instance
246
+ export const errorHandlerRegistry = new ErrorHandlerRegistry();
247
+
248
+ /**
249
+ * Retry configuration interface
250
+ */
251
+ export interface RetryConfig {
252
+ maxRetries: number;
253
+ retryDelay: number;
254
+ backoffMultiplier: number;
255
+ maxDelay: number;
256
+ retryableErrors: string[];
257
+ }
258
+
259
+ /**
260
+ * Default retry configuration
261
+ */
262
+ export const defaultRetryConfig: RetryConfig = {
263
+ maxRetries: 3,
264
+ retryDelay: 1000,
265
+ backoffMultiplier: 2,
266
+ maxDelay: 30000,
267
+ retryableErrors: [
268
+ ErrorCode.TIMEOUT_ERROR,
269
+ ErrorCode.LLM_ERROR,
270
+ ErrorCode.SEARCH_ERROR,
271
+ ErrorCode.CACHE_ERROR,
272
+ ],
273
+ };
274
+
275
+ /**
276
+ * Retry a function with exponential backoff
277
+ * @param fn - The function to retry
278
+ * @param config - Retry configuration
279
+ * @returns Function result
280
+ */
281
+ export async function withRetry<T>(
282
+ fn: () => Promise<T>,
283
+ config: Partial<RetryConfig> = {}
284
+ ): Promise<T> {
285
+ const mergedConfig = { ...defaultRetryConfig, ...config };
286
+ let lastError: Error | undefined;
287
+
288
+ for (let attempt = 0; attempt <= mergedConfig.maxRetries; attempt++) {
289
+ try {
290
+ return await fn();
291
+ } catch (error) {
292
+ lastError = error as Error;
293
+ const gError = error as GThinkingError;
294
+
295
+ // Check if error is retryable
296
+ if (!mergedConfig.retryableErrors.includes(gError.code)) {
297
+ throw error;
298
+ }
299
+
300
+ // Don't retry on last attempt
301
+ if (attempt === mergedConfig.maxRetries) {
302
+ break;
303
+ }
304
+
305
+ // Calculate delay with exponential backoff
306
+ const delay = Math.min(
307
+ mergedConfig.retryDelay * Math.pow(mergedConfig.backoffMultiplier, attempt),
308
+ mergedConfig.maxDelay
309
+ );
310
+
311
+ await new Promise(resolve => setTimeout(resolve, delay));
312
+ }
313
+ }
314
+
315
+ throw lastError;
316
+ }
317
+
318
+ /**
319
+ * Wrap a function with error handling
320
+ * @param fn - The function to wrap
321
+ * @param errorHandler - Custom error handler
322
+ * @returns Wrapped function
323
+ */
324
+ export function withErrorHandling<T extends (...args: unknown[]) => unknown>(
325
+ fn: T,
326
+ errorHandler?: (error: Error) => void
327
+ ): T {
328
+ return function (...args: Parameters<T>): ReturnType<T> {
329
+ try {
330
+ const result = fn(...args);
331
+
332
+ if (result instanceof Promise) {
333
+ return result.catch(error => {
334
+ if (errorHandler) {
335
+ errorHandler(error as Error);
336
+ }
337
+ throw error;
338
+ }) as ReturnType<T>;
339
+ }
340
+
341
+ return result as ReturnType<T>;
342
+ } catch (error) {
343
+ if (errorHandler) {
344
+ errorHandler(error as Error);
345
+ }
346
+ throw error;
347
+ }
348
+ } as T;
349
+ }
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Core Module Index for gthinking v2.0.0
3
+ */
4
+
5
+ // Errors
6
+ export * from './errors';
7
+
8
+ // Configuration
9
+ export * from './config';
10
+
11
+ // Engine
12
+ export * from './engine';