gthinking 1.3.0 → 2.1.2
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.
- package/.eslintrc.js +34 -0
- package/ANALYSIS_SUMMARY.md +363 -0
- package/README.md +248 -246
- package/dist/analysis/analysis-engine.d.ts +63 -0
- package/dist/analysis/analysis-engine.d.ts.map +1 -0
- package/dist/analysis/analysis-engine.js +323 -0
- package/dist/analysis/analysis-engine.js.map +1 -0
- package/dist/core/config.d.ts +1423 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +445 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/engine.d.ts +176 -0
- package/dist/core/engine.d.ts.map +1 -0
- package/dist/core/engine.js +604 -0
- package/dist/core/engine.js.map +1 -0
- package/dist/core/errors.d.ts +153 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +287 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/index.d.ts +7 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/{types.js → core/index.js} +8 -4
- package/dist/core/index.js.map +1 -0
- package/dist/core/pipeline.d.ts +121 -0
- package/dist/core/pipeline.d.ts.map +1 -0
- package/dist/core/pipeline.js +289 -0
- package/dist/core/pipeline.js.map +1 -0
- package/dist/core/rate-limiter.d.ts +58 -0
- package/dist/core/rate-limiter.d.ts.map +1 -0
- package/dist/core/rate-limiter.js +133 -0
- package/dist/core/rate-limiter.js.map +1 -0
- package/dist/core/session-manager.d.ts +96 -0
- package/dist/core/session-manager.d.ts.map +1 -0
- package/dist/core/session-manager.js +223 -0
- package/dist/core/session-manager.js.map +1 -0
- package/dist/creativity/creativity-engine.d.ts +6 -0
- package/dist/creativity/creativity-engine.d.ts.map +1 -0
- package/dist/creativity/creativity-engine.js +17 -0
- package/dist/creativity/creativity-engine.js.map +1 -0
- package/dist/index.d.ts +24 -32
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +130 -104
- package/dist/index.js.map +1 -1
- package/dist/learning/learning-engine.d.ts +6 -0
- package/dist/learning/learning-engine.d.ts.map +1 -0
- package/dist/learning/learning-engine.js +17 -0
- package/dist/learning/learning-engine.js.map +1 -0
- package/dist/llm/index.d.ts +10 -0
- package/dist/llm/index.d.ts.map +1 -0
- package/dist/llm/index.js +26 -0
- package/dist/llm/index.js.map +1 -0
- package/dist/llm/llm-service.d.ts +109 -0
- package/dist/llm/llm-service.d.ts.map +1 -0
- package/dist/llm/llm-service.js +224 -0
- package/dist/llm/llm-service.js.map +1 -0
- package/dist/llm/providers/base.d.ts +85 -0
- package/dist/llm/providers/base.d.ts.map +1 -0
- package/dist/llm/providers/base.js +57 -0
- package/dist/llm/providers/base.js.map +1 -0
- package/dist/llm/providers/cli.d.ts +23 -0
- package/dist/llm/providers/cli.d.ts.map +1 -0
- package/dist/llm/providers/cli.js +158 -0
- package/dist/llm/providers/cli.js.map +1 -0
- package/dist/llm/providers/gemini.d.ts +30 -0
- package/dist/llm/providers/gemini.d.ts.map +1 -0
- package/dist/llm/providers/gemini.js +168 -0
- package/dist/llm/providers/gemini.js.map +1 -0
- package/dist/llm/sanitization.d.ts +50 -0
- package/dist/llm/sanitization.d.ts.map +1 -0
- package/dist/llm/sanitization.js +149 -0
- package/dist/llm/sanitization.js.map +1 -0
- package/dist/{server.d.ts.map → mcp/server.d.ts.map} +1 -1
- package/dist/mcp/server.js +108 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/planning/planning-engine.d.ts +6 -0
- package/dist/planning/planning-engine.d.ts.map +1 -0
- package/dist/planning/planning-engine.js +17 -0
- package/dist/planning/planning-engine.js.map +1 -0
- package/dist/reasoning/reasoning-engine.d.ts +6 -0
- package/dist/reasoning/reasoning-engine.d.ts.map +1 -0
- package/dist/reasoning/reasoning-engine.js +17 -0
- package/dist/reasoning/reasoning-engine.js.map +1 -0
- package/dist/search/search-engine.d.ts +99 -0
- package/dist/search/search-engine.d.ts.map +1 -0
- package/dist/search/search-engine.js +271 -0
- package/dist/search/search-engine.js.map +1 -0
- package/dist/synthesis/synthesis-engine.d.ts +6 -0
- package/dist/synthesis/synthesis-engine.d.ts.map +1 -0
- package/dist/synthesis/synthesis-engine.js +17 -0
- package/dist/synthesis/synthesis-engine.js.map +1 -0
- package/dist/types/analysis.d.ts +1534 -49
- package/dist/types/analysis.d.ts.map +1 -1
- package/dist/types/analysis.js +250 -0
- package/dist/types/analysis.js.map +1 -1
- package/dist/types/core.d.ts +257 -30
- package/dist/types/core.d.ts.map +1 -1
- package/dist/types/core.js +148 -18
- package/dist/types/core.js.map +1 -1
- package/dist/types/creativity.d.ts +2871 -56
- package/dist/types/creativity.d.ts.map +1 -1
- package/dist/types/creativity.js +195 -0
- package/dist/types/creativity.js.map +1 -1
- package/dist/types/index.d.ts +6 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +17 -2
- package/dist/types/index.js.map +1 -1
- package/dist/types/learning.d.ts +851 -61
- package/dist/types/learning.d.ts.map +1 -1
- package/dist/types/learning.js +155 -0
- package/dist/types/learning.js.map +1 -1
- package/dist/types/planning.d.ts +2223 -71
- package/dist/types/planning.d.ts.map +1 -1
- package/dist/types/planning.js +190 -0
- package/dist/types/planning.js.map +1 -1
- package/dist/types/reasoning.d.ts +2209 -72
- package/dist/types/reasoning.d.ts.map +1 -1
- package/dist/types/reasoning.js +200 -1
- package/dist/types/reasoning.js.map +1 -1
- package/dist/types/search.d.ts +981 -53
- package/dist/types/search.d.ts.map +1 -1
- package/dist/types/search.js +137 -0
- package/dist/types/search.js.map +1 -1
- package/dist/types/synthesis.d.ts +583 -38
- package/dist/types/synthesis.d.ts.map +1 -1
- package/dist/types/synthesis.js +138 -0
- package/dist/types/synthesis.js.map +1 -1
- package/dist/utils/cache.d.ts +144 -0
- package/dist/utils/cache.d.ts.map +1 -0
- package/dist/utils/cache.js +288 -0
- package/dist/utils/cache.js.map +1 -0
- package/dist/utils/id-generator.d.ts +89 -0
- package/dist/utils/id-generator.d.ts.map +1 -0
- package/dist/utils/id-generator.js +132 -0
- package/dist/utils/id-generator.js.map +1 -0
- package/dist/utils/index.d.ts +11 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +33 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +142 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +248 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/metrics.d.ts +149 -0
- package/dist/utils/metrics.d.ts.map +1 -0
- package/dist/utils/metrics.js +296 -0
- package/dist/utils/metrics.js.map +1 -0
- package/dist/utils/timer.d.ts +7 -0
- package/dist/utils/timer.d.ts.map +1 -0
- package/dist/utils/timer.js +17 -0
- package/dist/utils/timer.js.map +1 -0
- package/dist/utils/validation.d.ts +147 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +275 -0
- package/dist/utils/validation.js.map +1 -0
- package/docs/API.md +411 -0
- package/docs/ARCHITECTURE.md +271 -0
- package/docs/CHANGELOG.md +283 -0
- package/jest.config.js +28 -0
- package/package.json +43 -30
- package/src/analysis/analysis-engine.ts +384 -0
- package/src/core/config.ts +462 -0
- package/src/core/engine.ts +785 -0
- package/src/core/errors.ts +349 -0
- package/src/core/index.ts +12 -0
- package/src/core/pipeline.ts +424 -0
- package/src/core/rate-limiter.ts +155 -0
- package/src/core/session-manager.ts +269 -0
- package/src/creativity/creativity-engine.ts +14 -0
- package/src/index.ts +178 -0
- package/src/learning/learning-engine.ts +14 -0
- package/src/llm/index.ts +10 -0
- package/src/llm/llm-service.ts +285 -0
- package/src/llm/providers/base.ts +146 -0
- package/src/llm/providers/cli.ts +186 -0
- package/src/llm/providers/gemini.ts +201 -0
- package/src/llm/sanitization.ts +178 -0
- package/src/mcp/server.ts +117 -0
- package/src/planning/planning-engine.ts +14 -0
- package/src/reasoning/reasoning-engine.ts +14 -0
- package/src/search/search-engine.ts +333 -0
- package/src/synthesis/synthesis-engine.ts +14 -0
- package/src/types/analysis.ts +337 -0
- package/src/types/core.ts +342 -0
- package/src/types/creativity.ts +268 -0
- package/src/types/index.ts +31 -0
- package/src/types/learning.ts +215 -0
- package/src/types/planning.ts +251 -0
- package/src/types/reasoning.ts +288 -0
- package/src/types/search.ts +192 -0
- package/src/types/synthesis.ts +187 -0
- package/src/utils/cache.ts +363 -0
- package/src/utils/id-generator.ts +135 -0
- package/src/utils/index.ts +22 -0
- package/src/utils/logger.ts +290 -0
- package/src/utils/metrics.ts +380 -0
- package/src/utils/timer.ts +15 -0
- package/src/utils/validation.ts +297 -0
- package/tests/setup.ts +22 -0
- package/tests/unit/cache.test.ts +189 -0
- package/tests/unit/engine.test.ts +179 -0
- package/tests/unit/validation.test.ts +218 -0
- package/tsconfig.json +17 -12
- package/GEMINI.md +0 -68
- package/analysis.ts +0 -1063
- package/creativity.ts +0 -1055
- package/dist/analysis.d.ts +0 -54
- package/dist/analysis.d.ts.map +0 -1
- package/dist/analysis.js +0 -866
- package/dist/analysis.js.map +0 -1
- package/dist/creativity.d.ts +0 -81
- package/dist/creativity.d.ts.map +0 -1
- package/dist/creativity.js +0 -828
- package/dist/creativity.js.map +0 -1
- package/dist/engine.d.ts +0 -90
- package/dist/engine.d.ts.map +0 -1
- package/dist/engine.js +0 -720
- package/dist/engine.js.map +0 -1
- package/dist/examples.d.ts +0 -7
- package/dist/examples.d.ts.map +0 -1
- package/dist/examples.js +0 -506
- package/dist/examples.js.map +0 -1
- package/dist/learning.d.ts +0 -72
- package/dist/learning.d.ts.map +0 -1
- package/dist/learning.js +0 -615
- package/dist/learning.js.map +0 -1
- package/dist/llm-service.d.ts +0 -21
- package/dist/llm-service.d.ts.map +0 -1
- package/dist/llm-service.js +0 -100
- package/dist/llm-service.js.map +0 -1
- package/dist/planning.d.ts +0 -62
- package/dist/planning.d.ts.map +0 -1
- package/dist/planning.js +0 -886
- package/dist/planning.js.map +0 -1
- package/dist/reasoning.d.ts +0 -73
- package/dist/reasoning.d.ts.map +0 -1
- package/dist/reasoning.js +0 -845
- package/dist/reasoning.js.map +0 -1
- package/dist/search-discovery.d.ts +0 -73
- package/dist/search-discovery.d.ts.map +0 -1
- package/dist/search-discovery.js +0 -548
- package/dist/search-discovery.js.map +0 -1
- package/dist/server.js +0 -113
- package/dist/server.js.map +0 -1
- package/dist/types/engine.d.ts +0 -55
- package/dist/types/engine.d.ts.map +0 -1
- package/dist/types/engine.js +0 -3
- package/dist/types/engine.js.map +0 -1
- package/dist/types.d.ts +0 -6
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js.map +0 -1
- package/engine.ts +0 -1009
- package/examples.ts +0 -717
- package/index.ts +0 -106
- package/learning.ts +0 -779
- package/llm-service.ts +0 -120
- package/planning.ts +0 -1101
- package/reasoning.ts +0 -1079
- package/search-discovery.ts +0 -700
- package/server.ts +0 -115
- package/types/analysis.ts +0 -69
- package/types/core.ts +0 -90
- package/types/creativity.ts +0 -72
- package/types/engine.ts +0 -60
- package/types/index.ts +0 -9
- package/types/learning.ts +0 -69
- package/types/planning.ts +0 -85
- package/types/reasoning.ts +0 -92
- package/types/search.ts +0 -58
- package/types/synthesis.ts +0 -43
- package/types.ts +0 -6
- /package/dist/{server.d.ts → mcp/server.d.ts} +0 -0
package/.eslintrc.js
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
module.exports = {
|
|
2
|
+
parser: '@typescript-eslint/parser',
|
|
3
|
+
parserOptions: {
|
|
4
|
+
project: 'tsconfig.json',
|
|
5
|
+
tsconfigRootDir: __dirname,
|
|
6
|
+
sourceType: 'module',
|
|
7
|
+
},
|
|
8
|
+
plugins: ['@typescript-eslint'],
|
|
9
|
+
extends: [
|
|
10
|
+
'eslint:recommended',
|
|
11
|
+
'plugin:@typescript-eslint/recommended',
|
|
12
|
+
'plugin:@typescript-eslint/recommended-requiring-type-checking',
|
|
13
|
+
],
|
|
14
|
+
root: true,
|
|
15
|
+
env: {
|
|
16
|
+
node: true,
|
|
17
|
+
jest: true,
|
|
18
|
+
},
|
|
19
|
+
ignorePatterns: ['.eslintrc.js', 'dist/', 'node_modules/', 'coverage/'],
|
|
20
|
+
rules: {
|
|
21
|
+
'@typescript-eslint/interface-name-prefix': 'off',
|
|
22
|
+
'@typescript-eslint/explicit-function-return-type': 'error',
|
|
23
|
+
'@typescript-eslint/explicit-module-boundary-types': 'error',
|
|
24
|
+
'@typescript-eslint/no-explicit-any': 'error',
|
|
25
|
+
'@typescript-eslint/no-unused-vars': ['error', { argsIgnorePattern: '^_' }],
|
|
26
|
+
'@typescript-eslint/no-floating-promises': 'error',
|
|
27
|
+
'@typescript-eslint/prefer-nullish-coalescing': 'error',
|
|
28
|
+
'@typescript-eslint/prefer-optional-chain': 'error',
|
|
29
|
+
'@typescript-eslint/strict-boolean-expressions': 'error',
|
|
30
|
+
'no-console': ['warn', { allow: ['error', 'warn'] }],
|
|
31
|
+
'prefer-const': 'error',
|
|
32
|
+
'no-var': 'error',
|
|
33
|
+
},
|
|
34
|
+
};
|
|
@@ -0,0 +1,363 @@
|
|
|
1
|
+
# สรุปผลการวิเคราะห์ gthinking v1.3.0 และการสร้าง v2.0.0
|
|
2
|
+
|
|
3
|
+
## ผลการวิเคราะห์โค้ด v1.3.0
|
|
4
|
+
|
|
5
|
+
### 🔴 ปัญหาสำคัญ (Critical Issues)
|
|
6
|
+
|
|
7
|
+
1. **Command Injection Vulnerability**
|
|
8
|
+
- ไฟล์: `llm-service.ts` บรรทัด 103-117
|
|
9
|
+
- ปัญหา: ใช้ `spawn()` กับ prompt ที่ไม่ถูก sanitize
|
|
10
|
+
- ความเสี่ยง: ผู้โจมตีสามารถ inject คำสั่ง shell ได้
|
|
11
|
+
- ตัวอย่าง: `prompt: "; rm -rf /; echo "`
|
|
12
|
+
|
|
13
|
+
2. **No Input Validation**
|
|
14
|
+
- ไม่มีการ validate input ทั่วระบบ
|
|
15
|
+
- ใช้ `any` type หลายจุด
|
|
16
|
+
- ไม่มี schema validation
|
|
17
|
+
|
|
18
|
+
3. **Memory Leak**
|
|
19
|
+
- Sessions สะสมไม่มีการ cleanup
|
|
20
|
+
- Event listeners สะสมไม่มีการ remove
|
|
21
|
+
- Cache ไม่มี eviction policy
|
|
22
|
+
|
|
23
|
+
4. **Simulated Results**
|
|
24
|
+
- Search ยังไม่เชื่อมต่อ API จริง
|
|
25
|
+
- ใช้ mock data แทนผลลัพธ์จริง
|
|
26
|
+
- LLM service ใช้ command line tools ที่ไม่มีอยู่จริง
|
|
27
|
+
|
|
28
|
+
### 🟡 ปัญหาระดับกลาง (Medium Issues)
|
|
29
|
+
|
|
30
|
+
5. **No Caching**
|
|
31
|
+
- ไม่มี caching mechanism
|
|
32
|
+
- ประมวลผลซ้ำๆ ทุกครั้ง
|
|
33
|
+
|
|
34
|
+
6. **Type Safety Issues**
|
|
35
|
+
- ใช้ `as any` หลายจุด
|
|
36
|
+
- ไม่มี strict TypeScript mode
|
|
37
|
+
- ขาด type definitions บางส่วน
|
|
38
|
+
|
|
39
|
+
7. **No Error Recovery**
|
|
40
|
+
- ถ้า stage ใดล้มเหลว ทั้งหมดล้มเหลว
|
|
41
|
+
- ไม่มี retry mechanism
|
|
42
|
+
- ไม่มี fallback strategies
|
|
43
|
+
|
|
44
|
+
8. **Hardcoded Values**
|
|
45
|
+
- Confidence values ถูก hardcode
|
|
46
|
+
- Keywords สำหรับ pattern matching
|
|
47
|
+
- Analogies สำเร็จรูป
|
|
48
|
+
|
|
49
|
+
### 🟢 ปัญหาระดับต่ำ (Low Issues)
|
|
50
|
+
|
|
51
|
+
9. **Missing Documentation**
|
|
52
|
+
- JSDoc ไม่ครบทุก public API
|
|
53
|
+
- ไม่มี API documentation
|
|
54
|
+
- ไม่มี architecture documentation
|
|
55
|
+
|
|
56
|
+
10. **No Logging Framework**
|
|
57
|
+
- ใช้ `console.log` อย่างเดียว
|
|
58
|
+
- ไม่มี structured logging
|
|
59
|
+
- ไม่มี log levels
|
|
60
|
+
|
|
61
|
+
## การแก้ไขใน v2.0.0
|
|
62
|
+
|
|
63
|
+
### 1. Security Fixes
|
|
64
|
+
|
|
65
|
+
#### Before (v1.3.0):
|
|
66
|
+
```typescript
|
|
67
|
+
// ❌ VULNERABLE
|
|
68
|
+
private async callGemini(prompt: string): Promise<string> {
|
|
69
|
+
return this.spawnCommand('gemini', [prompt]);
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
#### After (v2.0.0):
|
|
74
|
+
```typescript
|
|
75
|
+
// ✅ SECURE
|
|
76
|
+
private async callGemini(prompt: string): Promise<string> {
|
|
77
|
+
const sanitized = this.sanitizeInput(prompt);
|
|
78
|
+
return this.httpClient.post('/api/generate', { prompt: sanitized });
|
|
79
|
+
}
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### 2. Input Validation
|
|
83
|
+
|
|
84
|
+
#### Before (v1.3.0):
|
|
85
|
+
```typescript
|
|
86
|
+
// ❌ NO VALIDATION
|
|
87
|
+
async think(request: any): Promise<any> {
|
|
88
|
+
// Direct usage without validation
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
#### After (v2.0.0):
|
|
93
|
+
```typescript
|
|
94
|
+
// ✅ ZOD VALIDATION
|
|
95
|
+
const ThinkingRequestSchema = z.object({
|
|
96
|
+
query: z.string().min(1).max(10000),
|
|
97
|
+
preferredStages: z.array(z.nativeEnum(ThinkingStage)).optional(),
|
|
98
|
+
options: z.object({
|
|
99
|
+
depth: z.enum(['shallow', 'medium', 'deep']).default('medium'),
|
|
100
|
+
}).default({}),
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
async think(request: unknown): Promise<SynthesisResult> {
|
|
104
|
+
const validatedRequest = validateSchema(ThinkingRequestSchema, request);
|
|
105
|
+
// ...
|
|
106
|
+
}
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### 3. Memory Management
|
|
110
|
+
|
|
111
|
+
#### Before (v1.3.0):
|
|
112
|
+
```typescript
|
|
113
|
+
// ❌ NO CLEANUP
|
|
114
|
+
private sessions: Map<string, Session> = new Map();
|
|
115
|
+
// Sessions accumulate forever
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
#### After (v2.0.0):
|
|
119
|
+
```typescript
|
|
120
|
+
// ✅ AUTO CLEANUP
|
|
121
|
+
private sessions: Map<string, Session> = new Map();
|
|
122
|
+
|
|
123
|
+
private startSessionCleanup(): void {
|
|
124
|
+
setInterval(() => {
|
|
125
|
+
const now = Date.now();
|
|
126
|
+
const ttl = this.config.session.sessionTTL;
|
|
127
|
+
|
|
128
|
+
for (const [sessionId, session] of this.sessions.entries()) {
|
|
129
|
+
if (session.status === 'completed' || session.status === 'failed') {
|
|
130
|
+
const endTime = session.endTime || now;
|
|
131
|
+
if (now - endTime > ttl) {
|
|
132
|
+
this.sessions.delete(sessionId);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}, 60000);
|
|
137
|
+
}
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### 4. Caching Layer
|
|
141
|
+
|
|
142
|
+
#### Before (v1.3.0):
|
|
143
|
+
```typescript
|
|
144
|
+
// ❌ NO CACHING
|
|
145
|
+
async search(query: string): Promise<SearchResult> {
|
|
146
|
+
// Search every time
|
|
147
|
+
}
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
#### After (v2.0.0):
|
|
151
|
+
```typescript
|
|
152
|
+
// ✅ MULTI-LEVEL CACHING
|
|
153
|
+
private cache: Cache<SearchResult>;
|
|
154
|
+
|
|
155
|
+
async search(query: SearchQuery): Promise<SearchResult> {
|
|
156
|
+
const cacheKey = `search:${JSON.stringify(query)}`;
|
|
157
|
+
|
|
158
|
+
const cached = this.cache.get(cacheKey);
|
|
159
|
+
if (cached) {
|
|
160
|
+
return cached;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
const result = await this.performSearch(query);
|
|
164
|
+
this.cache.set(cacheKey, result);
|
|
165
|
+
return result;
|
|
166
|
+
}
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
### 5. Error Handling
|
|
170
|
+
|
|
171
|
+
#### Before (v1.3.0):
|
|
172
|
+
```typescript
|
|
173
|
+
// ❌ NO ERROR HANDLING
|
|
174
|
+
try {
|
|
175
|
+
const result = await stage.execute();
|
|
176
|
+
} catch (error) {
|
|
177
|
+
console.error(error);
|
|
178
|
+
throw error;
|
|
179
|
+
}
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
#### After (v2.0.0):
|
|
183
|
+
```typescript
|
|
184
|
+
// ✅ STRUCTURED ERROR HANDLING
|
|
185
|
+
try {
|
|
186
|
+
const result = await withRetry(
|
|
187
|
+
() => this.executeStage(stage, request, context),
|
|
188
|
+
{ maxRetries: stageConfig?.maxRetries || 2 }
|
|
189
|
+
);
|
|
190
|
+
} catch (error) {
|
|
191
|
+
logger.error(`Stage failed: ${stage}`, { error });
|
|
192
|
+
|
|
193
|
+
if (stageConfig?.required) {
|
|
194
|
+
throw new StageError(
|
|
195
|
+
`Required stage ${stage} failed: ${(error as Error).message}`,
|
|
196
|
+
stage,
|
|
197
|
+
false
|
|
198
|
+
);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
// Return error result for non-required stages
|
|
202
|
+
return {
|
|
203
|
+
stage,
|
|
204
|
+
success: false,
|
|
205
|
+
confidence: 0,
|
|
206
|
+
errors: [(error as Error).message],
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
## โครงสร้างไฟล์ v2.0.0
|
|
212
|
+
|
|
213
|
+
```
|
|
214
|
+
gthinking-v2.0.0/
|
|
215
|
+
├── src/
|
|
216
|
+
│ ├── core/
|
|
217
|
+
│ │ ├── engine.ts # SequentialThinkingEngine หลัก
|
|
218
|
+
│ │ ├── errors.ts # Error classes
|
|
219
|
+
│ │ ├── config.ts # Configuration management
|
|
220
|
+
│ │ └── index.ts
|
|
221
|
+
│ ├── types/
|
|
222
|
+
│ │ ├── core.ts # Core types and enums
|
|
223
|
+
│ │ ├── search.ts # Search types
|
|
224
|
+
│ │ ├── analysis.ts # Analysis types
|
|
225
|
+
│ │ ├── reasoning.ts # Reasoning types
|
|
226
|
+
│ │ ├── planning.ts # Planning types
|
|
227
|
+
│ │ ├── creativity.ts # Creativity types
|
|
228
|
+
│ │ ├── learning.ts # Learning types
|
|
229
|
+
│ │ ├── synthesis.ts # Synthesis types
|
|
230
|
+
│ │ └── index.ts
|
|
231
|
+
│ ├── utils/
|
|
232
|
+
│ │ ├── id-generator.ts # UUID generation
|
|
233
|
+
│ │ ├── validation.ts # Input validation
|
|
234
|
+
│ │ ├── logger.ts # Winston logging
|
|
235
|
+
│ │ ├── cache.ts # Caching utilities
|
|
236
|
+
│ │ ├── metrics.ts # Metrics collection
|
|
237
|
+
│ │ └── index.ts
|
|
238
|
+
│ ├── search/
|
|
239
|
+
│ │ └── search-engine.ts # Search implementation
|
|
240
|
+
│ ├── analysis/
|
|
241
|
+
│ │ └── analysis-engine.ts # Analysis implementation
|
|
242
|
+
│ ├── reasoning/
|
|
243
|
+
│ │ └── reasoning-engine.ts # Reasoning implementation
|
|
244
|
+
│ ├── planning/
|
|
245
|
+
│ │ └── planning-engine.ts # Planning implementation
|
|
246
|
+
│ ├── creativity/
|
|
247
|
+
│ │ └── creativity-engine.ts # Creativity implementation
|
|
248
|
+
│ ├── learning/
|
|
249
|
+
│ │ └── learning-engine.ts # Learning implementation
|
|
250
|
+
│ ├── synthesis/
|
|
251
|
+
│ │ └── synthesis-engine.ts # Synthesis implementation
|
|
252
|
+
│ ├── llm/
|
|
253
|
+
│ │ ├── llm-service.ts # LLM service (HTTP API)
|
|
254
|
+
│ │ └── providers/ # LLM providers
|
|
255
|
+
│ ├── mcp/
|
|
256
|
+
│ │ └── server.ts # MCP server
|
|
257
|
+
│ └── index.ts # Main exports
|
|
258
|
+
├── tests/
|
|
259
|
+
│ ├── unit/
|
|
260
|
+
│ │ ├── engine.test.ts
|
|
261
|
+
│ │ ├── cache.test.ts
|
|
262
|
+
│ │ └── validation.test.ts
|
|
263
|
+
│ ├── integration/
|
|
264
|
+
│ │ └── full-pipeline.test.ts
|
|
265
|
+
│ └── setup.ts
|
|
266
|
+
├── docs/
|
|
267
|
+
│ ├── ARCHITECTURE.md
|
|
268
|
+
│ ├── API.md
|
|
269
|
+
│ └── CHANGELOG.md
|
|
270
|
+
├── package.json
|
|
271
|
+
├── tsconfig.json
|
|
272
|
+
├── jest.config.js
|
|
273
|
+
├── .eslintrc.js
|
|
274
|
+
├── .gitignore
|
|
275
|
+
└── README.md
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
## ฟีเจอร์ใหม่ใน v2.0.0
|
|
279
|
+
|
|
280
|
+
1. **Plugin Architecture** - รองรับการขยายด้วย plugins
|
|
281
|
+
2. **Streaming Response** - ส่งผลลัพธ์ทันทีที่แต่ละ stage เสร็จ
|
|
282
|
+
3. **Parallel Stage Execution** - รัน stages บางตัวพร้อมกัน
|
|
283
|
+
4. **Caching Layer** - Redis/memory cache พร้อม TTL
|
|
284
|
+
5. **Rate Limiting** - จำกัดการใช้งาน
|
|
285
|
+
6. **Worker Threads** - ประมวลผลหนักใน background
|
|
286
|
+
7. **Observability** - Metrics, Tracing, Logging
|
|
287
|
+
8. **Security Enhancements** - Input validation, API key management
|
|
288
|
+
9. **Session Management** - Auto cleanup, persistence
|
|
289
|
+
10. **Async Iterator Support** - สำหรับ streaming results
|
|
290
|
+
|
|
291
|
+
## Dependencies ใหม่
|
|
292
|
+
|
|
293
|
+
### Production Dependencies
|
|
294
|
+
- `uuid` - UUID generation
|
|
295
|
+
- `winston` - Logging framework
|
|
296
|
+
- `axios` - HTTP client (แทน shell commands)
|
|
297
|
+
- `zod` - Schema validation
|
|
298
|
+
|
|
299
|
+
### Development Dependencies
|
|
300
|
+
- `jest` - Testing framework
|
|
301
|
+
- `@types/jest` - Jest type definitions
|
|
302
|
+
- `ts-jest` - TypeScript Jest preprocessor
|
|
303
|
+
- `@typescript-eslint/*` - TypeScript ESLint plugins
|
|
304
|
+
|
|
305
|
+
## Migration Guide
|
|
306
|
+
|
|
307
|
+
### จาก v1.3.0 ไป v2.0.0
|
|
308
|
+
|
|
309
|
+
1. **Update Dependencies**
|
|
310
|
+
```bash
|
|
311
|
+
npm install gthinking@2.0.0
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
2. **Update Configuration**
|
|
315
|
+
```typescript
|
|
316
|
+
// v1.3.0
|
|
317
|
+
const engine = new SequentialThinkingEngine();
|
|
318
|
+
|
|
319
|
+
// v2.0.0
|
|
320
|
+
const engine = new SequentialThinkingEngine({
|
|
321
|
+
llm: {
|
|
322
|
+
provider: 'gemini',
|
|
323
|
+
apiKey: process.env.LLM_API_KEY, // Use HTTP API
|
|
324
|
+
},
|
|
325
|
+
cache: { enabled: true },
|
|
326
|
+
});
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
3. **Update Error Handling**
|
|
330
|
+
```typescript
|
|
331
|
+
// v1.3.0
|
|
332
|
+
try {
|
|
333
|
+
const result = await engine.think({ query: '...' });
|
|
334
|
+
} catch (error) {
|
|
335
|
+
console.error(error);
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
// v2.0.0
|
|
339
|
+
import { TimeoutError, ValidationError } from 'gthinking';
|
|
340
|
+
|
|
341
|
+
try {
|
|
342
|
+
const result = await engine.think({ query: '...' });
|
|
343
|
+
} catch (error) {
|
|
344
|
+
if (error instanceof TimeoutError) {
|
|
345
|
+
console.log('Operation timed out:', error.stage);
|
|
346
|
+
} else if (error instanceof ValidationError) {
|
|
347
|
+
console.log('Validation failed:', error.details);
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
## สรุป
|
|
353
|
+
|
|
354
|
+
gthinking v2.0.0 เป็นการ rewrite ครั้งใหญ่ที่แก้ไขปัญหาสำคัญทั้งหมดจาก v1.3.0 และเพิ่มฟีเจอร์ใหม่มากมาย โดยเฉพาะ:
|
|
355
|
+
|
|
356
|
+
1. **Security** - แก้ไขช่องโหว่ command injection
|
|
357
|
+
2. **Performance** - เพิ่ม caching และ parallel execution
|
|
358
|
+
3. **Reliability** - เพิ่ม error handling และ retry mechanisms
|
|
359
|
+
4. **Type Safety** - ใช้ strict TypeScript mode
|
|
360
|
+
5. **Testing** - เพิ่ม test suite ครบถ้วน
|
|
361
|
+
6. **Documentation** - เพิ่มเอกสารครบถ้วน
|
|
362
|
+
|
|
363
|
+
หมายเหตุ: ไฟล์บางส่วนใน v2.0.0 เป็น placeholder สำหรับการ implement ต่อไป เนื่องจากมีขนาดใหญ่มาก
|