agentdb 1.0.0 → 1.0.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/CHANGELOG.md +104 -0
- package/README.md +5 -5
- package/bin/agentdb.js +296 -65
- package/dist/mcp/learning/core/experience-buffer.d.ts +61 -0
- package/dist/mcp/learning/core/experience-buffer.d.ts.map +1 -0
- package/dist/mcp/learning/core/experience-buffer.js +175 -0
- package/dist/mcp/learning/core/experience-buffer.js.map +1 -0
- package/dist/mcp/learning/core/experience-buffer.mjs +170 -0
- package/dist/mcp/learning/core/experience-recorder.d.ts +40 -0
- package/dist/mcp/learning/core/experience-recorder.d.ts.map +1 -0
- package/dist/mcp/learning/core/experience-recorder.js +200 -0
- package/dist/mcp/learning/core/experience-recorder.js.map +1 -0
- package/dist/mcp/learning/core/experience-recorder.mjs +195 -0
- package/dist/mcp/learning/core/learning-manager.d.ts +66 -0
- package/dist/mcp/learning/core/learning-manager.d.ts.map +1 -0
- package/dist/mcp/learning/core/learning-manager.js +252 -0
- package/dist/mcp/learning/core/learning-manager.js.map +1 -0
- package/dist/mcp/learning/core/learning-manager.mjs +247 -0
- package/dist/mcp/learning/core/policy-optimizer.d.ts +53 -0
- package/dist/mcp/learning/core/policy-optimizer.d.ts.map +1 -0
- package/dist/mcp/learning/core/policy-optimizer.js +251 -0
- package/dist/mcp/learning/core/policy-optimizer.js.map +1 -0
- package/dist/mcp/learning/core/policy-optimizer.mjs +246 -0
- package/dist/mcp/learning/core/reward-estimator.d.ts +44 -0
- package/dist/mcp/learning/core/reward-estimator.d.ts.map +1 -0
- package/dist/mcp/learning/core/reward-estimator.js +158 -0
- package/dist/mcp/learning/core/reward-estimator.js.map +1 -0
- package/dist/mcp/learning/core/reward-estimator.mjs +153 -0
- package/dist/mcp/learning/core/session-manager.d.ts +63 -0
- package/dist/mcp/learning/core/session-manager.d.ts.map +1 -0
- package/dist/mcp/learning/core/session-manager.js +202 -0
- package/dist/mcp/learning/core/session-manager.js.map +1 -0
- package/dist/mcp/learning/core/session-manager.mjs +197 -0
- package/dist/mcp/learning/index.d.ts +19 -0
- package/dist/mcp/learning/index.d.ts.map +1 -0
- package/dist/mcp/learning/index.js +30 -0
- package/dist/mcp/learning/index.js.map +1 -0
- package/dist/mcp/learning/index.mjs +19 -0
- package/dist/mcp/learning/tools/mcp-learning-tools.d.ts +369 -0
- package/dist/mcp/learning/tools/mcp-learning-tools.d.ts.map +1 -0
- package/dist/mcp/learning/tools/mcp-learning-tools.js +361 -0
- package/dist/mcp/learning/tools/mcp-learning-tools.js.map +1 -0
- package/dist/mcp/learning/tools/mcp-learning-tools.mjs +356 -0
- package/dist/mcp/learning/types/index.d.ts +138 -0
- package/dist/mcp/learning/types/index.d.ts.map +1 -0
- package/dist/mcp/learning/types/index.js +6 -0
- package/dist/mcp/learning/types/index.js.map +1 -0
- package/dist/mcp/learning/types/index.mjs +4 -0
- package/dist/mcp-server.d.ts +2 -0
- package/dist/mcp-server.d.ts.map +1 -1
- package/dist/mcp-server.js +72 -4
- package/dist/mcp-server.js.map +1 -1
- package/dist/mcp-server.mjs +72 -4
- package/dist/wasm/sql-wasm-debug.js +6989 -0
- package/dist/wasm/sql-wasm-debug.wasm +0 -0
- package/dist/wasm/sql-wasm.js +188 -0
- package/dist/wasm/sql-wasm.wasm +0 -0
- package/dist/wasm-loader.d.ts.map +1 -1
- package/dist/wasm-loader.js +5 -2
- package/dist/wasm-loader.js.map +1 -1
- package/dist/wasm-loader.mjs +5 -2
- package/examples/mcp-learning-example.ts +220 -0
- package/package.json +26 -5
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* SessionManager - Manages learning session lifecycle and state
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.SessionManager = void 0;
|
|
7
|
+
class SessionManager {
|
|
8
|
+
constructor(db) {
|
|
9
|
+
this.activeSessions = new Map();
|
|
10
|
+
this.db = db;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Create a new learning session
|
|
14
|
+
*/
|
|
15
|
+
async createSession(userId, sessionType, plugin, config = {}) {
|
|
16
|
+
const sessionId = `session_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
|
|
17
|
+
const session = {
|
|
18
|
+
sessionId,
|
|
19
|
+
userId,
|
|
20
|
+
sessionType,
|
|
21
|
+
plugin,
|
|
22
|
+
status: 'active',
|
|
23
|
+
startTime: Date.now(),
|
|
24
|
+
experienceCount: 0,
|
|
25
|
+
config,
|
|
26
|
+
};
|
|
27
|
+
this.activeSessions.set(sessionId, session);
|
|
28
|
+
await this.persistSession(session);
|
|
29
|
+
return session;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Get active session by ID
|
|
33
|
+
*/
|
|
34
|
+
getSession(sessionId) {
|
|
35
|
+
return this.activeSessions.get(sessionId);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Get all active sessions for a user
|
|
39
|
+
*/
|
|
40
|
+
getUserSessions(userId) {
|
|
41
|
+
return Array.from(this.activeSessions.values()).filter((session) => session.userId === userId && session.status === 'active');
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Pause a learning session
|
|
45
|
+
*/
|
|
46
|
+
async pauseSession(sessionId) {
|
|
47
|
+
const session = this.activeSessions.get(sessionId);
|
|
48
|
+
if (!session) {
|
|
49
|
+
throw new Error(`Session ${sessionId} not found`);
|
|
50
|
+
}
|
|
51
|
+
session.status = 'paused';
|
|
52
|
+
await this.persistSession(session);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Resume a paused session
|
|
56
|
+
*/
|
|
57
|
+
async resumeSession(sessionId) {
|
|
58
|
+
const session = this.activeSessions.get(sessionId);
|
|
59
|
+
if (!session) {
|
|
60
|
+
throw new Error(`Session ${sessionId} not found`);
|
|
61
|
+
}
|
|
62
|
+
if (session.status !== 'paused') {
|
|
63
|
+
throw new Error(`Session ${sessionId} is not paused`);
|
|
64
|
+
}
|
|
65
|
+
session.status = 'active';
|
|
66
|
+
await this.persistSession(session);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* End a learning session
|
|
70
|
+
*/
|
|
71
|
+
async endSession(sessionId) {
|
|
72
|
+
const session = this.activeSessions.get(sessionId);
|
|
73
|
+
if (!session) {
|
|
74
|
+
throw new Error(`Session ${sessionId} not found`);
|
|
75
|
+
}
|
|
76
|
+
session.status = 'ended';
|
|
77
|
+
session.endTime = Date.now();
|
|
78
|
+
await this.persistSession(session);
|
|
79
|
+
this.activeSessions.delete(sessionId);
|
|
80
|
+
return session;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Update session experience count
|
|
84
|
+
*/
|
|
85
|
+
incrementExperienceCount(sessionId) {
|
|
86
|
+
const session = this.activeSessions.get(sessionId);
|
|
87
|
+
if (session) {
|
|
88
|
+
session.experienceCount++;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Update session policy
|
|
93
|
+
*/
|
|
94
|
+
async updateSessionPolicy(sessionId, policy) {
|
|
95
|
+
const session = this.activeSessions.get(sessionId);
|
|
96
|
+
if (!session) {
|
|
97
|
+
throw new Error(`Session ${sessionId} not found`);
|
|
98
|
+
}
|
|
99
|
+
session.currentPolicy = policy;
|
|
100
|
+
await this.persistSession(session);
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Get session metrics
|
|
104
|
+
*/
|
|
105
|
+
getSessionMetrics(sessionId) {
|
|
106
|
+
const session = this.activeSessions.get(sessionId);
|
|
107
|
+
if (!session) {
|
|
108
|
+
throw new Error(`Session ${sessionId} not found`);
|
|
109
|
+
}
|
|
110
|
+
const endTime = session.endTime || Date.now();
|
|
111
|
+
const duration = endTime - session.startTime;
|
|
112
|
+
return {
|
|
113
|
+
duration,
|
|
114
|
+
experienceCount: session.experienceCount,
|
|
115
|
+
status: session.status,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Persist session to vector database
|
|
120
|
+
*/
|
|
121
|
+
async persistSession(session) {
|
|
122
|
+
// Create a simple embedding for session metadata
|
|
123
|
+
const sessionText = JSON.stringify({
|
|
124
|
+
userId: session.userId,
|
|
125
|
+
sessionType: session.sessionType,
|
|
126
|
+
plugin: session.plugin,
|
|
127
|
+
});
|
|
128
|
+
const embedding = new Float32Array(768);
|
|
129
|
+
for (let i = 0; i < sessionText.length; i++) {
|
|
130
|
+
const index = sessionText.charCodeAt(i) % 768;
|
|
131
|
+
embedding[index] += 1;
|
|
132
|
+
}
|
|
133
|
+
// Normalize
|
|
134
|
+
const magnitude = Math.sqrt(embedding.reduce((sum, val) => sum + val * val, 0));
|
|
135
|
+
if (magnitude > 0) {
|
|
136
|
+
for (let i = 0; i < embedding.length; i++) {
|
|
137
|
+
embedding[i] /= magnitude;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
await this.db.insert({
|
|
141
|
+
embedding: Array.from(embedding),
|
|
142
|
+
metadata: {
|
|
143
|
+
type: 'learning_session',
|
|
144
|
+
sessionId: session.sessionId,
|
|
145
|
+
userId: session.userId,
|
|
146
|
+
sessionType: session.sessionType,
|
|
147
|
+
plugin: session.plugin,
|
|
148
|
+
status: session.status,
|
|
149
|
+
startTime: session.startTime,
|
|
150
|
+
endTime: session.endTime,
|
|
151
|
+
experienceCount: session.experienceCount,
|
|
152
|
+
config: session.config,
|
|
153
|
+
currentPolicy: session.currentPolicy,
|
|
154
|
+
},
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Restore sessions from database
|
|
159
|
+
*/
|
|
160
|
+
async restoreSessions(userId) {
|
|
161
|
+
const filter = { type: 'learning_session', status: 'active' };
|
|
162
|
+
if (userId) {
|
|
163
|
+
filter.userId = userId;
|
|
164
|
+
}
|
|
165
|
+
const results = await this.db.search(Array(768).fill(0), 1000);
|
|
166
|
+
const sessions = [];
|
|
167
|
+
for (const result of results) {
|
|
168
|
+
const session = {
|
|
169
|
+
sessionId: result.metadata.sessionId,
|
|
170
|
+
userId: result.metadata.userId,
|
|
171
|
+
sessionType: result.metadata.sessionType,
|
|
172
|
+
plugin: result.metadata.plugin,
|
|
173
|
+
status: result.metadata.status,
|
|
174
|
+
startTime: result.metadata.startTime,
|
|
175
|
+
endTime: result.metadata.endTime,
|
|
176
|
+
experienceCount: result.metadata.experienceCount,
|
|
177
|
+
config: result.metadata.config,
|
|
178
|
+
currentPolicy: result.metadata.currentPolicy,
|
|
179
|
+
};
|
|
180
|
+
this.activeSessions.set(session.sessionId, session);
|
|
181
|
+
sessions.push(session);
|
|
182
|
+
}
|
|
183
|
+
return sessions;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Cleanup old sessions
|
|
187
|
+
*/
|
|
188
|
+
async cleanupOldSessions(maxAge = 7 * 24 * 60 * 60 * 1000) {
|
|
189
|
+
const cutoff = Date.now() - maxAge;
|
|
190
|
+
let cleaned = 0;
|
|
191
|
+
for (const [sessionId, session] of this.activeSessions.entries()) {
|
|
192
|
+
const endTime = session.endTime || Date.now();
|
|
193
|
+
if (endTime < cutoff && session.status === 'ended') {
|
|
194
|
+
this.activeSessions.delete(sessionId);
|
|
195
|
+
cleaned++;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
return cleaned;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
exports.SessionManager = SessionManager;
|
|
202
|
+
//# sourceMappingURL=session-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-manager.js","sourceRoot":"","sources":["../../../../src/mcp/learning/core/session-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SessionManager - Manages learning session lifecycle and state
|
|
3
|
+
*/
|
|
4
|
+
export class SessionManager {
|
|
5
|
+
constructor(db) {
|
|
6
|
+
this.activeSessions = new Map();
|
|
7
|
+
this.db = db;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Create a new learning session
|
|
11
|
+
*/
|
|
12
|
+
async createSession(userId, sessionType, plugin, config = {}) {
|
|
13
|
+
const sessionId = `session_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
|
|
14
|
+
const session = {
|
|
15
|
+
sessionId,
|
|
16
|
+
userId,
|
|
17
|
+
sessionType,
|
|
18
|
+
plugin,
|
|
19
|
+
status: 'active',
|
|
20
|
+
startTime: Date.now(),
|
|
21
|
+
experienceCount: 0,
|
|
22
|
+
config,
|
|
23
|
+
};
|
|
24
|
+
this.activeSessions.set(sessionId, session);
|
|
25
|
+
await this.persistSession(session);
|
|
26
|
+
return session;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Get active session by ID
|
|
30
|
+
*/
|
|
31
|
+
getSession(sessionId) {
|
|
32
|
+
return this.activeSessions.get(sessionId);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Get all active sessions for a user
|
|
36
|
+
*/
|
|
37
|
+
getUserSessions(userId) {
|
|
38
|
+
return Array.from(this.activeSessions.values()).filter((session) => session.userId === userId && session.status === 'active');
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Pause a learning session
|
|
42
|
+
*/
|
|
43
|
+
async pauseSession(sessionId) {
|
|
44
|
+
const session = this.activeSessions.get(sessionId);
|
|
45
|
+
if (!session) {
|
|
46
|
+
throw new Error(`Session ${sessionId} not found`);
|
|
47
|
+
}
|
|
48
|
+
session.status = 'paused';
|
|
49
|
+
await this.persistSession(session);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Resume a paused session
|
|
53
|
+
*/
|
|
54
|
+
async resumeSession(sessionId) {
|
|
55
|
+
const session = this.activeSessions.get(sessionId);
|
|
56
|
+
if (!session) {
|
|
57
|
+
throw new Error(`Session ${sessionId} not found`);
|
|
58
|
+
}
|
|
59
|
+
if (session.status !== 'paused') {
|
|
60
|
+
throw new Error(`Session ${sessionId} is not paused`);
|
|
61
|
+
}
|
|
62
|
+
session.status = 'active';
|
|
63
|
+
await this.persistSession(session);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* End a learning session
|
|
67
|
+
*/
|
|
68
|
+
async endSession(sessionId) {
|
|
69
|
+
const session = this.activeSessions.get(sessionId);
|
|
70
|
+
if (!session) {
|
|
71
|
+
throw new Error(`Session ${sessionId} not found`);
|
|
72
|
+
}
|
|
73
|
+
session.status = 'ended';
|
|
74
|
+
session.endTime = Date.now();
|
|
75
|
+
await this.persistSession(session);
|
|
76
|
+
this.activeSessions.delete(sessionId);
|
|
77
|
+
return session;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Update session experience count
|
|
81
|
+
*/
|
|
82
|
+
incrementExperienceCount(sessionId) {
|
|
83
|
+
const session = this.activeSessions.get(sessionId);
|
|
84
|
+
if (session) {
|
|
85
|
+
session.experienceCount++;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Update session policy
|
|
90
|
+
*/
|
|
91
|
+
async updateSessionPolicy(sessionId, policy) {
|
|
92
|
+
const session = this.activeSessions.get(sessionId);
|
|
93
|
+
if (!session) {
|
|
94
|
+
throw new Error(`Session ${sessionId} not found`);
|
|
95
|
+
}
|
|
96
|
+
session.currentPolicy = policy;
|
|
97
|
+
await this.persistSession(session);
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Get session metrics
|
|
101
|
+
*/
|
|
102
|
+
getSessionMetrics(sessionId) {
|
|
103
|
+
const session = this.activeSessions.get(sessionId);
|
|
104
|
+
if (!session) {
|
|
105
|
+
throw new Error(`Session ${sessionId} not found`);
|
|
106
|
+
}
|
|
107
|
+
const endTime = session.endTime || Date.now();
|
|
108
|
+
const duration = endTime - session.startTime;
|
|
109
|
+
return {
|
|
110
|
+
duration,
|
|
111
|
+
experienceCount: session.experienceCount,
|
|
112
|
+
status: session.status,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Persist session to vector database
|
|
117
|
+
*/
|
|
118
|
+
async persistSession(session) {
|
|
119
|
+
// Create a simple embedding for session metadata
|
|
120
|
+
const sessionText = JSON.stringify({
|
|
121
|
+
userId: session.userId,
|
|
122
|
+
sessionType: session.sessionType,
|
|
123
|
+
plugin: session.plugin,
|
|
124
|
+
});
|
|
125
|
+
const embedding = new Float32Array(768);
|
|
126
|
+
for (let i = 0; i < sessionText.length; i++) {
|
|
127
|
+
const index = sessionText.charCodeAt(i) % 768;
|
|
128
|
+
embedding[index] += 1;
|
|
129
|
+
}
|
|
130
|
+
// Normalize
|
|
131
|
+
const magnitude = Math.sqrt(embedding.reduce((sum, val) => sum + val * val, 0));
|
|
132
|
+
if (magnitude > 0) {
|
|
133
|
+
for (let i = 0; i < embedding.length; i++) {
|
|
134
|
+
embedding[i] /= magnitude;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
await this.db.insert({
|
|
138
|
+
embedding: Array.from(embedding),
|
|
139
|
+
metadata: {
|
|
140
|
+
type: 'learning_session',
|
|
141
|
+
sessionId: session.sessionId,
|
|
142
|
+
userId: session.userId,
|
|
143
|
+
sessionType: session.sessionType,
|
|
144
|
+
plugin: session.plugin,
|
|
145
|
+
status: session.status,
|
|
146
|
+
startTime: session.startTime,
|
|
147
|
+
endTime: session.endTime,
|
|
148
|
+
experienceCount: session.experienceCount,
|
|
149
|
+
config: session.config,
|
|
150
|
+
currentPolicy: session.currentPolicy,
|
|
151
|
+
},
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Restore sessions from database
|
|
156
|
+
*/
|
|
157
|
+
async restoreSessions(userId) {
|
|
158
|
+
const filter = { type: 'learning_session', status: 'active' };
|
|
159
|
+
if (userId) {
|
|
160
|
+
filter.userId = userId;
|
|
161
|
+
}
|
|
162
|
+
const results = await this.db.search(Array(768).fill(0), 1000);
|
|
163
|
+
const sessions = [];
|
|
164
|
+
for (const result of results) {
|
|
165
|
+
const session = {
|
|
166
|
+
sessionId: result.metadata.sessionId,
|
|
167
|
+
userId: result.metadata.userId,
|
|
168
|
+
sessionType: result.metadata.sessionType,
|
|
169
|
+
plugin: result.metadata.plugin,
|
|
170
|
+
status: result.metadata.status,
|
|
171
|
+
startTime: result.metadata.startTime,
|
|
172
|
+
endTime: result.metadata.endTime,
|
|
173
|
+
experienceCount: result.metadata.experienceCount,
|
|
174
|
+
config: result.metadata.config,
|
|
175
|
+
currentPolicy: result.metadata.currentPolicy,
|
|
176
|
+
};
|
|
177
|
+
this.activeSessions.set(session.sessionId, session);
|
|
178
|
+
sessions.push(session);
|
|
179
|
+
}
|
|
180
|
+
return sessions;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Cleanup old sessions
|
|
184
|
+
*/
|
|
185
|
+
async cleanupOldSessions(maxAge = 7 * 24 * 60 * 60 * 1000) {
|
|
186
|
+
const cutoff = Date.now() - maxAge;
|
|
187
|
+
let cleaned = 0;
|
|
188
|
+
for (const [sessionId, session] of this.activeSessions.entries()) {
|
|
189
|
+
const endTime = session.endTime || Date.now();
|
|
190
|
+
if (endTime < cutoff && session.status === 'ended') {
|
|
191
|
+
this.activeSessions.delete(sessionId);
|
|
192
|
+
cleaned++;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
return cleaned;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Learning Integration - Main Entry Point
|
|
3
|
+
*
|
|
4
|
+
* Provides reinforcement learning capabilities for MCP tools including:
|
|
5
|
+
* - Experience recording and replay
|
|
6
|
+
* - Multi-dimensional reward calculation
|
|
7
|
+
* - Policy optimization (Q-learning)
|
|
8
|
+
* - Session management
|
|
9
|
+
* - Transfer learning between tasks
|
|
10
|
+
*/
|
|
11
|
+
export { LearningManager } from './core/learning-manager.js';
|
|
12
|
+
export { ExperienceRecorder } from './core/experience-recorder.js';
|
|
13
|
+
export { RewardEstimator } from './core/reward-estimator.js';
|
|
14
|
+
export { SessionManager } from './core/session-manager.js';
|
|
15
|
+
export { PolicyOptimizer } from './core/policy-optimizer.js';
|
|
16
|
+
export { ExperienceBuffer } from './core/experience-buffer.js';
|
|
17
|
+
export { MCPLearningTools } from './tools/mcp-learning-tools.js';
|
|
18
|
+
export type { ExecutionContext, State, Action, Experience, Outcome, Reward, ActionPrediction, TrainingOptions, TrainingMetrics, LearningSession, FeedbackInput, LearningMetrics, TransferMetrics, } from './types/index.js';
|
|
19
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/mcp/learning/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAG/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAGjE,YAAY,EACV,gBAAgB,EAChB,KAAK,EACL,MAAM,EACN,UAAU,EACV,OAAO,EACP,MAAM,EACN,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,eAAe,EACf,aAAa,EACb,eAAe,EACf,eAAe,GAChB,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* MCP Learning Integration - Main Entry Point
|
|
4
|
+
*
|
|
5
|
+
* Provides reinforcement learning capabilities for MCP tools including:
|
|
6
|
+
* - Experience recording and replay
|
|
7
|
+
* - Multi-dimensional reward calculation
|
|
8
|
+
* - Policy optimization (Q-learning)
|
|
9
|
+
* - Session management
|
|
10
|
+
* - Transfer learning between tasks
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.MCPLearningTools = exports.ExperienceBuffer = exports.PolicyOptimizer = exports.SessionManager = exports.RewardEstimator = exports.ExperienceRecorder = exports.LearningManager = void 0;
|
|
14
|
+
// Core classes
|
|
15
|
+
var learning_manager_js_1 = require("./core/learning-manager.js");
|
|
16
|
+
Object.defineProperty(exports, "LearningManager", { enumerable: true, get: function () { return learning_manager_js_1.LearningManager; } });
|
|
17
|
+
var experience_recorder_js_1 = require("./core/experience-recorder.js");
|
|
18
|
+
Object.defineProperty(exports, "ExperienceRecorder", { enumerable: true, get: function () { return experience_recorder_js_1.ExperienceRecorder; } });
|
|
19
|
+
var reward_estimator_js_1 = require("./core/reward-estimator.js");
|
|
20
|
+
Object.defineProperty(exports, "RewardEstimator", { enumerable: true, get: function () { return reward_estimator_js_1.RewardEstimator; } });
|
|
21
|
+
var session_manager_js_1 = require("./core/session-manager.js");
|
|
22
|
+
Object.defineProperty(exports, "SessionManager", { enumerable: true, get: function () { return session_manager_js_1.SessionManager; } });
|
|
23
|
+
var policy_optimizer_js_1 = require("./core/policy-optimizer.js");
|
|
24
|
+
Object.defineProperty(exports, "PolicyOptimizer", { enumerable: true, get: function () { return policy_optimizer_js_1.PolicyOptimizer; } });
|
|
25
|
+
var experience_buffer_js_1 = require("./core/experience-buffer.js");
|
|
26
|
+
Object.defineProperty(exports, "ExperienceBuffer", { enumerable: true, get: function () { return experience_buffer_js_1.ExperienceBuffer; } });
|
|
27
|
+
// MCP tools
|
|
28
|
+
var mcp_learning_tools_js_1 = require("./tools/mcp-learning-tools.js");
|
|
29
|
+
Object.defineProperty(exports, "MCPLearningTools", { enumerable: true, get: function () { return mcp_learning_tools_js_1.MCPLearningTools; } });
|
|
30
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/mcp/learning/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;AAEH,eAAe;AACf,kEAA6D;AAApD,sHAAA,eAAe,OAAA;AACxB,wEAAmE;AAA1D,4HAAA,kBAAkB,OAAA;AAC3B,kEAA6D;AAApD,sHAAA,eAAe,OAAA;AACxB,gEAA2D;AAAlD,oHAAA,cAAc,OAAA;AACvB,kEAA6D;AAApD,sHAAA,eAAe,OAAA;AACxB,oEAA+D;AAAtD,wHAAA,gBAAgB,OAAA;AAEzB,YAAY;AACZ,uEAAiE;AAAxD,yHAAA,gBAAgB,OAAA"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Learning Integration - Main Entry Point
|
|
3
|
+
*
|
|
4
|
+
* Provides reinforcement learning capabilities for MCP tools including:
|
|
5
|
+
* - Experience recording and replay
|
|
6
|
+
* - Multi-dimensional reward calculation
|
|
7
|
+
* - Policy optimization (Q-learning)
|
|
8
|
+
* - Session management
|
|
9
|
+
* - Transfer learning between tasks
|
|
10
|
+
*/
|
|
11
|
+
// Core classes
|
|
12
|
+
export { LearningManager } from './core/learning-manager.mjs';
|
|
13
|
+
export { ExperienceRecorder } from './core/experience-recorder.mjs';
|
|
14
|
+
export { RewardEstimator } from './core/reward-estimator.mjs';
|
|
15
|
+
export { SessionManager } from './core/session-manager.mjs';
|
|
16
|
+
export { PolicyOptimizer } from './core/policy-optimizer.mjs';
|
|
17
|
+
export { ExperienceBuffer } from './core/experience-buffer.mjs';
|
|
18
|
+
// MCP tools
|
|
19
|
+
export { MCPLearningTools } from './tools/mcp-learning-tools.mjs';
|