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.
- package/.eslintrc.js +34 -0
- package/ANALYSIS_SUMMARY.md +363 -0
- package/README.md +230 -250
- 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 +322 -0
- package/dist/analysis/analysis-engine.js.map +1 -0
- package/dist/core/config.d.ts +1419 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +361 -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 +383 -0
- package/src/core/config.ts +406 -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
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Manager for GThinking
|
|
3
|
+
*
|
|
4
|
+
* Manages user sessions with automatic cleanup, persistence,
|
|
5
|
+
* and history tracking.
|
|
6
|
+
*
|
|
7
|
+
* @module core/session-manager
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import type { EngineConfig, Session, ThinkingRequest, ThinkingResponse } from '../types/core';
|
|
11
|
+
import { SessionSchema } from '../types/core';
|
|
12
|
+
import { GThinkingError } from './errors';
|
|
13
|
+
class SessionError extends GThinkingError {
|
|
14
|
+
constructor(message: string, sessionId: string) {
|
|
15
|
+
super(message, 'SESSION_ERROR', { sessionId });
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
import { logger, createComponentLogger } from '../utils/logger';
|
|
19
|
+
import { generateUUID } from '../utils/id-generator';
|
|
20
|
+
import { validateSchema } from '../utils/validation';
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Session manager implementation
|
|
24
|
+
*/
|
|
25
|
+
export class SessionManager {
|
|
26
|
+
private readonly sessions: Map<string, Session> = new Map();
|
|
27
|
+
private readonly config: Pick<EngineConfig, 'sessionMaxAgeMs' | 'sessionCleanupIntervalMs' | 'maxConcurrentSessions'>;
|
|
28
|
+
private readonly logger = createComponentLogger('SessionManager');
|
|
29
|
+
private cleanupIntervalId: NodeJS.Timeout | null = null;
|
|
30
|
+
|
|
31
|
+
constructor(config: Pick<EngineConfig, 'sessionMaxAgeMs' | 'sessionCleanupIntervalMs' | 'maxConcurrentSessions'>) {
|
|
32
|
+
this.config = config;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Initialize the session manager
|
|
37
|
+
*/
|
|
38
|
+
async initialize(): Promise<void> {
|
|
39
|
+
this.startCleanupInterval();
|
|
40
|
+
this.logger.info('Session manager initialized');
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Shutdown the session manager
|
|
45
|
+
*/
|
|
46
|
+
async shutdown(): Promise<void> {
|
|
47
|
+
this.stopCleanupInterval();
|
|
48
|
+
this.sessions.clear();
|
|
49
|
+
this.logger.info('Session manager shut down');
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Get or create a session
|
|
54
|
+
*
|
|
55
|
+
* @param sessionId - Session ID
|
|
56
|
+
* @returns Session
|
|
57
|
+
*/
|
|
58
|
+
async getOrCreateSession(sessionId: string): Promise<Session> {
|
|
59
|
+
// Validate session ID
|
|
60
|
+
if (!this.isValidSessionId(sessionId)) {
|
|
61
|
+
throw new SessionError('Invalid session ID', sessionId);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// Check if session exists
|
|
65
|
+
const existingSession = this.sessions.get(sessionId);
|
|
66
|
+
if (existingSession !== undefined) {
|
|
67
|
+
// Update last accessed
|
|
68
|
+
existingSession.lastAccessedAt = Date.now();
|
|
69
|
+
return existingSession;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Check session limit
|
|
73
|
+
if (this.sessions.size >= this.config.maxConcurrentSessions) {
|
|
74
|
+
// Try to clean up expired sessions first
|
|
75
|
+
this.cleanupExpiredSessions();
|
|
76
|
+
|
|
77
|
+
if (this.sessions.size >= this.config.maxConcurrentSessions) {
|
|
78
|
+
throw new SessionError(
|
|
79
|
+
'Maximum concurrent sessions reached',
|
|
80
|
+
sessionId
|
|
81
|
+
);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// Create new session
|
|
86
|
+
const newSession = this.createSession(sessionId);
|
|
87
|
+
this.sessions.set(sessionId, newSession);
|
|
88
|
+
|
|
89
|
+
this.logger.debug('Session created', { sessionId });
|
|
90
|
+
return newSession;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Get a session by ID
|
|
95
|
+
*
|
|
96
|
+
* @param sessionId - Session ID
|
|
97
|
+
* @returns Session or undefined
|
|
98
|
+
*/
|
|
99
|
+
async getSession(sessionId: string): Promise<Session | undefined> {
|
|
100
|
+
const session = this.sessions.get(sessionId);
|
|
101
|
+
|
|
102
|
+
if (session !== undefined) {
|
|
103
|
+
session.lastAccessedAt = Date.now();
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
return session;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Delete a session
|
|
111
|
+
*
|
|
112
|
+
* @param sessionId - Session ID
|
|
113
|
+
* @returns True if session was deleted
|
|
114
|
+
*/
|
|
115
|
+
async deleteSession(sessionId: string): Promise<boolean> {
|
|
116
|
+
const deleted = this.sessions.delete(sessionId);
|
|
117
|
+
|
|
118
|
+
if (deleted) {
|
|
119
|
+
this.logger.debug('Session deleted', { sessionId });
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
return deleted;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Add request/response to session history
|
|
127
|
+
*
|
|
128
|
+
* @param sessionId - Session ID
|
|
129
|
+
* @param request - Thinking request
|
|
130
|
+
* @param response - Thinking response
|
|
131
|
+
*/
|
|
132
|
+
async addToHistory(
|
|
133
|
+
sessionId: string,
|
|
134
|
+
request: ThinkingRequest,
|
|
135
|
+
response: ThinkingResponse
|
|
136
|
+
): Promise<void> {
|
|
137
|
+
const session = this.sessions.get(sessionId);
|
|
138
|
+
|
|
139
|
+
if (session === undefined) {
|
|
140
|
+
throw new SessionError('Session not found', sessionId);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
const results = session.results as Record<string, any>;
|
|
144
|
+
const history = results.history as Array<any> || [];
|
|
145
|
+
history.push({
|
|
146
|
+
request,
|
|
147
|
+
response,
|
|
148
|
+
timestamp: Date.now(),
|
|
149
|
+
});
|
|
150
|
+
results.history = history;
|
|
151
|
+
|
|
152
|
+
// Update metadata with latest data
|
|
153
|
+
session.metadata.lastQuery = request.query;
|
|
154
|
+
session.metadata.lastResponse = response.finalOutput;
|
|
155
|
+
session.lastAccessedAt = Date.now();
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Update session context
|
|
160
|
+
*
|
|
161
|
+
* @param sessionId - Session ID
|
|
162
|
+
* @param context - Context updates
|
|
163
|
+
*/
|
|
164
|
+
async updateContext(
|
|
165
|
+
sessionId: string,
|
|
166
|
+
context: Record<string, unknown>
|
|
167
|
+
): Promise<void> {
|
|
168
|
+
const session = this.sessions.get(sessionId);
|
|
169
|
+
|
|
170
|
+
if (session === undefined) {
|
|
171
|
+
throw new SessionError('Session not found', sessionId);
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
session.metadata = { ...session.metadata, ...context };
|
|
175
|
+
session.lastAccessedAt = Date.now();
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* Get session count
|
|
180
|
+
*/
|
|
181
|
+
getSessionCount(): number {
|
|
182
|
+
return this.sessions.size;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* Get all active session IDs
|
|
187
|
+
*/
|
|
188
|
+
getActiveSessionIds(): string[] {
|
|
189
|
+
return Array.from(this.sessions.keys());
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* Clear all sessions
|
|
194
|
+
*/
|
|
195
|
+
async clearAllSessions(): Promise<void> {
|
|
196
|
+
this.sessions.clear();
|
|
197
|
+
this.logger.info('All sessions cleared');
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
/**
|
|
201
|
+
* Create a new session object
|
|
202
|
+
*/
|
|
203
|
+
private createSession(sessionId: string): Session {
|
|
204
|
+
const now = Date.now();
|
|
205
|
+
|
|
206
|
+
return validateSchema(SessionSchema, {
|
|
207
|
+
id: sessionId,
|
|
208
|
+
status: 'running',
|
|
209
|
+
startTime: now,
|
|
210
|
+
lastAccessedAt: now,
|
|
211
|
+
metadata: {},
|
|
212
|
+
results: { history: [] },
|
|
213
|
+
} as any) as Session;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/**
|
|
217
|
+
* Validate session ID format
|
|
218
|
+
*/
|
|
219
|
+
private isValidSessionId(sessionId: string): boolean {
|
|
220
|
+
// Accept UUID format or prefixed IDs
|
|
221
|
+
return (
|
|
222
|
+
/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(sessionId) ||
|
|
223
|
+
/^[a-zA-Z0-9_-]{1,128}$/.test(sessionId)
|
|
224
|
+
);
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
/**
|
|
228
|
+
* Start cleanup interval
|
|
229
|
+
*/
|
|
230
|
+
private startCleanupInterval(): void {
|
|
231
|
+
this.cleanupIntervalId = setInterval(() => {
|
|
232
|
+
this.cleanupExpiredSessions();
|
|
233
|
+
}, this.config.sessionCleanupIntervalMs);
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* Stop cleanup interval
|
|
238
|
+
*/
|
|
239
|
+
private stopCleanupInterval(): void {
|
|
240
|
+
if (this.cleanupIntervalId !== null) {
|
|
241
|
+
clearInterval(this.cleanupIntervalId);
|
|
242
|
+
this.cleanupIntervalId = null;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
/**
|
|
247
|
+
* Clean up expired sessions
|
|
248
|
+
*/
|
|
249
|
+
private cleanupExpiredSessions(): number {
|
|
250
|
+
const now = Date.now();
|
|
251
|
+
const expiredSessions: string[] = [];
|
|
252
|
+
|
|
253
|
+
for (const [sessionId, session] of this.sessions.entries()) {
|
|
254
|
+
if (now - session.lastAccessedAt > this.config.sessionMaxAgeMs) {
|
|
255
|
+
expiredSessions.push(sessionId);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
for (const sessionId of expiredSessions) {
|
|
260
|
+
this.sessions.delete(sessionId);
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
if (expiredSessions.length > 0) {
|
|
264
|
+
this.logger.debug('Cleaned up expired sessions', { count: expiredSessions.length });
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
return expiredSessions.length;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { EventEmitter } from 'events';
|
|
2
|
+
import { Logger } from '../utils/logger';
|
|
3
|
+
|
|
4
|
+
const logger = new Logger('CreativityEngine');
|
|
5
|
+
|
|
6
|
+
export class CreativityEngine extends EventEmitter {
|
|
7
|
+
constructor() {
|
|
8
|
+
super();
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export function createCreativityEngine(): CreativityEngine {
|
|
13
|
+
return new CreativityEngine();
|
|
14
|
+
}
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* gthinking v2.0.0 - Sequential Thinking System
|
|
3
|
+
* Advanced multi-stage thinking engine with AI-powered analysis, reasoning, and planning
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
// Types
|
|
7
|
+
export * from './types';
|
|
8
|
+
|
|
9
|
+
// Utils
|
|
10
|
+
export * from './utils';
|
|
11
|
+
|
|
12
|
+
// Core
|
|
13
|
+
export * from './core/errors';
|
|
14
|
+
export * from './core/config';
|
|
15
|
+
|
|
16
|
+
// Version
|
|
17
|
+
export const VERSION = '2.0.0';
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Main entry point for the gthinking library
|
|
21
|
+
*/
|
|
22
|
+
export { SequentialThinkingEngine } from './core/engine';
|
|
23
|
+
|
|
24
|
+
// Convenience exports for common use cases
|
|
25
|
+
export {
|
|
26
|
+
// Search
|
|
27
|
+
SearchDiscoveryEngine,
|
|
28
|
+
createSearchEngine,
|
|
29
|
+
} from './search/search-engine';
|
|
30
|
+
|
|
31
|
+
export {
|
|
32
|
+
// Analysis
|
|
33
|
+
AnalysisEngine,
|
|
34
|
+
createAnalysisEngine,
|
|
35
|
+
} from './analysis/analysis-engine';
|
|
36
|
+
|
|
37
|
+
export {
|
|
38
|
+
// Reasoning
|
|
39
|
+
ReasoningEngine,
|
|
40
|
+
createReasoningEngine,
|
|
41
|
+
} from './reasoning/reasoning-engine';
|
|
42
|
+
|
|
43
|
+
export {
|
|
44
|
+
// Planning
|
|
45
|
+
PlanningEngine,
|
|
46
|
+
createPlanningEngine,
|
|
47
|
+
} from './planning/planning-engine';
|
|
48
|
+
|
|
49
|
+
export {
|
|
50
|
+
// Creativity
|
|
51
|
+
CreativityEngine,
|
|
52
|
+
createCreativityEngine,
|
|
53
|
+
} from './creativity/creativity-engine';
|
|
54
|
+
|
|
55
|
+
export {
|
|
56
|
+
// Learning
|
|
57
|
+
LearningEngine,
|
|
58
|
+
createLearningEngine,
|
|
59
|
+
} from './learning/learning-engine';
|
|
60
|
+
|
|
61
|
+
export {
|
|
62
|
+
// Synthesis
|
|
63
|
+
SynthesisEngine,
|
|
64
|
+
createSynthesisEngine,
|
|
65
|
+
} from './synthesis/synthesis-engine';
|
|
66
|
+
|
|
67
|
+
// LLM Service
|
|
68
|
+
export {
|
|
69
|
+
LLMService,
|
|
70
|
+
createLLMService,
|
|
71
|
+
} from './llm/llm-service';
|
|
72
|
+
|
|
73
|
+
// Cache
|
|
74
|
+
export {
|
|
75
|
+
Cache,
|
|
76
|
+
CacheManager,
|
|
77
|
+
cacheManager,
|
|
78
|
+
} from './utils/cache';
|
|
79
|
+
|
|
80
|
+
// Logger
|
|
81
|
+
export {
|
|
82
|
+
Logger,
|
|
83
|
+
createLogger,
|
|
84
|
+
createChildLogger,
|
|
85
|
+
error,
|
|
86
|
+
warn,
|
|
87
|
+
info,
|
|
88
|
+
debug,
|
|
89
|
+
} from './utils/logger';
|
|
90
|
+
|
|
91
|
+
// Metrics
|
|
92
|
+
export {
|
|
93
|
+
MetricsCollector,
|
|
94
|
+
metricsCollector,
|
|
95
|
+
timed,
|
|
96
|
+
trackOperation,
|
|
97
|
+
} from './utils/metrics';
|
|
98
|
+
|
|
99
|
+
// ID Generator
|
|
100
|
+
export {
|
|
101
|
+
generateUUID,
|
|
102
|
+
generateDeterministicUUID,
|
|
103
|
+
generateShortId,
|
|
104
|
+
generateTimestampId,
|
|
105
|
+
generateSequentialId,
|
|
106
|
+
generateCompoundId,
|
|
107
|
+
isValidUUID,
|
|
108
|
+
Namespaces,
|
|
109
|
+
IdGenerator,
|
|
110
|
+
idGenerator,
|
|
111
|
+
} from './utils/id-generator';
|
|
112
|
+
|
|
113
|
+
// Validation
|
|
114
|
+
export {
|
|
115
|
+
sanitizeInput,
|
|
116
|
+
sanitizeForShell,
|
|
117
|
+
validateEmail,
|
|
118
|
+
isValidURL,
|
|
119
|
+
isNonEmptyString,
|
|
120
|
+
isPositiveInteger,
|
|
121
|
+
isInRange,
|
|
122
|
+
hasUniqueElements,
|
|
123
|
+
safeJsonParse,
|
|
124
|
+
safeJsonStringify,
|
|
125
|
+
validateSchema,
|
|
126
|
+
validateSchemaAsync,
|
|
127
|
+
hasRequiredProperties,
|
|
128
|
+
isValidLength,
|
|
129
|
+
removeNullValues,
|
|
130
|
+
deepClone,
|
|
131
|
+
isPlainObject,
|
|
132
|
+
ValidationRateLimiter,
|
|
133
|
+
validationRateLimiter,
|
|
134
|
+
} from './utils/validation';
|
|
135
|
+
|
|
136
|
+
// Error handling
|
|
137
|
+
export {
|
|
138
|
+
GThinkingError,
|
|
139
|
+
ValidationError,
|
|
140
|
+
TimeoutError,
|
|
141
|
+
CacheError,
|
|
142
|
+
StageError,
|
|
143
|
+
LLMError,
|
|
144
|
+
SearchError,
|
|
145
|
+
ConfigurationError,
|
|
146
|
+
SecurityError,
|
|
147
|
+
RateLimitError,
|
|
148
|
+
ErrorCode,
|
|
149
|
+
errorHandlerRegistry,
|
|
150
|
+
withRetry,
|
|
151
|
+
withErrorHandling,
|
|
152
|
+
defaultRetryConfig,
|
|
153
|
+
} from './core/errors';
|
|
154
|
+
|
|
155
|
+
// Configuration
|
|
156
|
+
export {
|
|
157
|
+
ConfigManager,
|
|
158
|
+
configManager,
|
|
159
|
+
defaultConfig,
|
|
160
|
+
GThinkingConfigSchema,
|
|
161
|
+
LLMProviderConfigSchema,
|
|
162
|
+
SearchConfigSchema,
|
|
163
|
+
CacheConfigSchema,
|
|
164
|
+
LoggingConfigSchema,
|
|
165
|
+
PipelineConfigSchema,
|
|
166
|
+
StageConfigSchema,
|
|
167
|
+
} from './core/config';
|
|
168
|
+
|
|
169
|
+
// Type re-exports for convenience
|
|
170
|
+
export type {
|
|
171
|
+
GThinkingConfig,
|
|
172
|
+
LLMProviderConfig,
|
|
173
|
+
SearchConfig,
|
|
174
|
+
CacheConfig,
|
|
175
|
+
LoggingConfig,
|
|
176
|
+
PipelineConfig,
|
|
177
|
+
StageConfig,
|
|
178
|
+
} from './core/config';
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { EventEmitter } from 'events';
|
|
2
|
+
import { Logger } from '../utils/logger';
|
|
3
|
+
|
|
4
|
+
const logger = new Logger('LearningEngine');
|
|
5
|
+
|
|
6
|
+
export class LearningEngine extends EventEmitter {
|
|
7
|
+
constructor() {
|
|
8
|
+
super();
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export function createLearningEngine(): LearningEngine {
|
|
13
|
+
return new LearningEngine();
|
|
14
|
+
}
|