@qcluffy/agent-bootstrap 0.0.2 → 0.0.4

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.
@@ -0,0 +1,401 @@
1
+ "use strict";
2
+ /**
3
+ * Memory System - TypeScript 实现
4
+ * 记忆系统:存储、加载、索引、遗忘
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || (function () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
39
+ var __importDefault = (this && this.__importDefault) || function (mod) {
40
+ return (mod && mod.__esModule) ? mod : { "default": mod };
41
+ };
42
+ Object.defineProperty(exports, "__esModule", { value: true });
43
+ exports.MemorySystem = exports.MemoryForgetting = exports.MemoryLoader = exports.MemoryStore = void 0;
44
+ exports.createMemorySystem = createMemorySystem;
45
+ const fs = __importStar(require("fs"));
46
+ const path = __importStar(require("path"));
47
+ const os = __importStar(require("os"));
48
+ const crypto_1 = __importDefault(require("crypto"));
49
+ function getConfig(workspaceDir) {
50
+ const wsDir = workspaceDir || path.join(os.homedir(), '.openclaw', 'workspace');
51
+ return {
52
+ workspaceDir: wsDir,
53
+ memoryDir: path.join(wsDir, 'memory'),
54
+ dailyDir: path.join(wsDir, 'memory', 'daily'),
55
+ longtermDir: path.join(wsDir, 'memory', 'longterm'),
56
+ archiveDir: path.join(wsDir, 'memory', 'archive'),
57
+ emotionDir: path.join(wsDir, 'memory', 'emotions'),
58
+ };
59
+ }
60
+ // ============================================================================
61
+ // 工具函数
62
+ // ============================================================================
63
+ function generateId() {
64
+ return crypto_1.default.randomUUID();
65
+ }
66
+ function formatDate(date = new Date()) {
67
+ return date.toISOString().split('T')[0];
68
+ }
69
+ function ensureDir(dirPath) {
70
+ if (!fs.existsSync(dirPath)) {
71
+ fs.mkdirSync(dirPath, { recursive: true });
72
+ }
73
+ }
74
+ // ============================================================================
75
+ // MemoryStore - 存储
76
+ // ============================================================================
77
+ class MemoryStore {
78
+ constructor(workspaceDir) {
79
+ this.config = getConfig(workspaceDir);
80
+ this.init();
81
+ }
82
+ init() {
83
+ ensureDir(this.config.dailyDir);
84
+ ensureDir(this.config.longtermDir);
85
+ ensureDir(this.config.archiveDir);
86
+ ensureDir(this.config.emotionDir);
87
+ }
88
+ save(memory) {
89
+ const id = generateId();
90
+ const fullMemory = {
91
+ ...memory,
92
+ id,
93
+ timestamp: new Date().toISOString(),
94
+ };
95
+ const date = formatDate();
96
+ const filePath = path.join(this.config.dailyDir, `${date}.md`);
97
+ let content = '';
98
+ if (fs.existsSync(filePath)) {
99
+ content = fs.readFileSync(filePath, 'utf-8');
100
+ }
101
+ // 追加记忆到文件
102
+ const newEntry = this.formatMemoryEntry(fullMemory);
103
+ content += newEntry + '\n\n';
104
+ fs.writeFileSync(filePath, content, 'utf-8');
105
+ return id;
106
+ }
107
+ formatMemoryEntry(memory) {
108
+ let entry = `## ${memory.timestamp}\n\n`;
109
+ entry += `- **内容**: ${memory.content}\n`;
110
+ entry += `- **类型**: ${memory.type}\n`;
111
+ entry += `- **标签**: ${memory.tags.join(', ') || '无'}\n`;
112
+ entry += `- **情感**: ${memory.emotion}\n`;
113
+ entry += `- **隐私**: ${memory.privacy}\n`;
114
+ if (memory.metadata) {
115
+ entry += `- **元数据**: ${JSON.stringify(memory.metadata)}\n`;
116
+ }
117
+ return entry;
118
+ }
119
+ savePreferences(prefs) {
120
+ const filePath = path.join(this.config.memoryDir, 'learned_preferences.json');
121
+ fs.writeFileSync(filePath, JSON.stringify(prefs, null, 2), 'utf-8');
122
+ }
123
+ loadPreferences() {
124
+ const filePath = path.join(this.config.memoryDir, 'learned_preferences.json');
125
+ if (!fs.existsSync(filePath)) {
126
+ return {};
127
+ }
128
+ try {
129
+ return JSON.parse(fs.readFileSync(filePath, 'utf-8'));
130
+ }
131
+ catch {
132
+ return {};
133
+ }
134
+ }
135
+ saveIdentity(identity) {
136
+ const filePath = path.join(this.config.workspaceDir, 'IDENTITY.md');
137
+ const content = this.formatYaml(identity);
138
+ fs.writeFileSync(filePath, content, 'utf-8');
139
+ }
140
+ loadIdentity() {
141
+ const filePath = path.join(this.config.workspaceDir, 'IDENTITY.md');
142
+ if (!fs.existsSync(filePath)) {
143
+ return {};
144
+ }
145
+ // 简单解析 YAML 格式
146
+ const content = fs.readFileSync(filePath, 'utf-8');
147
+ return this.parseYaml(content);
148
+ }
149
+ formatYaml(obj) {
150
+ let yaml = '# IDENTITY.md\n';
151
+ for (const [key, value] of Object.entries(obj)) {
152
+ yaml += `${key}: ${JSON.stringify(value)}\n`;
153
+ }
154
+ return yaml;
155
+ }
156
+ parseYaml(content) {
157
+ const identity = {};
158
+ const lines = content.split('\n');
159
+ for (const line of lines) {
160
+ const match = line.match(/^(\w+):\s*(.+)$/);
161
+ if (match) {
162
+ const [, key, value] = match;
163
+ try {
164
+ identity[key] = JSON.parse(value);
165
+ }
166
+ catch {
167
+ identity[key] = value.trim();
168
+ }
169
+ }
170
+ }
171
+ return identity;
172
+ }
173
+ }
174
+ exports.MemoryStore = MemoryStore;
175
+ // ============================================================================
176
+ // MemoryLoader - 加载
177
+ // ============================================================================
178
+ class MemoryLoader {
179
+ constructor(workspaceDir) {
180
+ this.config = getConfig(workspaceDir);
181
+ }
182
+ loadTodayMemories() {
183
+ const today = formatDate();
184
+ const filePath = path.join(this.config.dailyDir, `${today}.md`);
185
+ return this.loadFromFile(filePath);
186
+ }
187
+ loadRecentMemories(days = 7) {
188
+ const memories = [];
189
+ const now = new Date();
190
+ for (let i = 0; i < days; i++) {
191
+ const date = new Date(now);
192
+ date.setDate(date.getDate() - i);
193
+ const dateStr = formatDate(date);
194
+ const filePath = path.join(this.config.dailyDir, `${dateStr}.md`);
195
+ const dayMemories = this.loadFromFile(filePath);
196
+ memories.push(...dayMemories);
197
+ }
198
+ return memories;
199
+ }
200
+ loadFromFile(filePath) {
201
+ if (!fs.existsSync(filePath)) {
202
+ return [];
203
+ }
204
+ // 简单解析 Markdown 文件
205
+ const content = fs.readFileSync(filePath, 'utf-8');
206
+ const memories = [];
207
+ const entries = content.split(/^## /m).filter(e => e.trim());
208
+ for (const entry of entries) {
209
+ const lines = entry.split('\n');
210
+ const memory = {
211
+ id: '',
212
+ content: '',
213
+ type: 'episodic',
214
+ tags: [],
215
+ emotion: 0.5,
216
+ privacy: 'P3',
217
+ timestamp: '',
218
+ };
219
+ for (const line of lines) {
220
+ if (line.includes('**内容**:')) {
221
+ memory.content = line.replace(/.*\*\*内容\*\*:\s*/, '').trim();
222
+ }
223
+ else if (line.includes('**类型**:')) {
224
+ memory.type = line.replace(/.*\*\*类型\*\*:\s*/, '').trim();
225
+ }
226
+ else if (line.includes('**标签**:')) {
227
+ const tagsStr = line.replace(/.*\*\*标签\*\*:\s*/, '').replace('无', '').trim();
228
+ memory.tags = tagsStr ? tagsStr.split(', ').filter(t => t) : [];
229
+ }
230
+ else if (line.includes('**情感**:')) {
231
+ memory.emotion = parseFloat(line.replace(/.*\*\*情感\*\*:\s*/, '').trim()) || 0.5;
232
+ }
233
+ else if (line.includes('**隐私**:')) {
234
+ memory.privacy = line.replace(/.*\*\*隐私\*\*:\s*/, '').trim();
235
+ }
236
+ else if (line.match(/^\d{4}-\d{2}-\d{2}/)) {
237
+ memory.timestamp = line.trim();
238
+ memory.id = generateId();
239
+ }
240
+ }
241
+ if (memory.content && memory.timestamp) {
242
+ memories.push(memory);
243
+ }
244
+ }
245
+ return memories;
246
+ }
247
+ loadPrefrences() {
248
+ const store = new MemoryStore(this.config.workspaceDir);
249
+ return store.loadPreferences();
250
+ }
251
+ getStats() {
252
+ const memories = this.loadRecentMemories(30);
253
+ const stats = {
254
+ total: memories.length,
255
+ byType: { episodic: 0, semantic: 0, procedural: 0, self: 0 },
256
+ byPrivacy: { P0: 0, P1: 0, P2: 0, P3: 0, P4: 0 },
257
+ };
258
+ for (const m of memories) {
259
+ stats.byType[m.type]++;
260
+ stats.byPrivacy[m.privacy]++;
261
+ }
262
+ return stats;
263
+ }
264
+ }
265
+ exports.MemoryLoader = MemoryLoader;
266
+ // ============================================================================
267
+ // MemoryForgetting - 遗忘
268
+ // ============================================================================
269
+ class MemoryForgetting {
270
+ constructor(workspaceDir) {
271
+ this.config = getConfig(workspaceDir);
272
+ }
273
+ forgetMemory(memoryId, date) {
274
+ // 简单实现:标记为遗忘(不真正删除)
275
+ console.log(`[memory] Forgetting memory ${memoryId} from ${date}`);
276
+ return true;
277
+ }
278
+ runAutoCleanup() {
279
+ const now = Date.now();
280
+ const thirtyDaysAgo = now - (30 * 24 * 60 * 60 * 1000);
281
+ let deleted = 0;
282
+ let archived = 0;
283
+ // 清理超过90天的记忆
284
+ if (fs.existsSync(this.config.dailyDir)) {
285
+ const files = fs.readdirSync(this.config.dailyDir);
286
+ for (const file of files) {
287
+ if (!file.endsWith('.md'))
288
+ continue;
289
+ const filePath = path.join(this.config.dailyDir, file);
290
+ const stat = fs.statSync(filePath);
291
+ if (stat.mtimeMs < thirtyDaysAgo) {
292
+ // 移动到归档
293
+ const archivePath = path.join(this.config.archiveDir, file);
294
+ fs.renameSync(filePath, archivePath);
295
+ archived++;
296
+ }
297
+ }
298
+ }
299
+ return { deleted, archived };
300
+ }
301
+ getForgettingStats() {
302
+ let pending = 0;
303
+ let archived = 0;
304
+ if (fs.existsSync(this.config.dailyDir)) {
305
+ pending = fs.readdirSync(this.config.dailyDir).filter(f => f.endsWith('.md')).length;
306
+ }
307
+ if (fs.existsSync(this.config.archiveDir)) {
308
+ archived = fs.readdirSync(this.config.archiveDir).filter(f => f.endsWith('.md')).length;
309
+ }
310
+ return { pending, archived };
311
+ }
312
+ }
313
+ exports.MemoryForgetting = MemoryForgetting;
314
+ // ============================================================================
315
+ // MemorySystem - 统一 API
316
+ // ============================================================================
317
+ class MemorySystem {
318
+ constructor(workspaceDir) {
319
+ this.store = new MemoryStore(workspaceDir);
320
+ this.loader = new MemoryLoader(workspaceDir);
321
+ this.forgetting = new MemoryForgetting(workspaceDir);
322
+ }
323
+ // 存储操作
324
+ save(content, options) {
325
+ return this.store.save({
326
+ content,
327
+ type: options?.type || 'episodic',
328
+ tags: options?.tags || [],
329
+ emotion: options?.emotion || 0.5,
330
+ privacy: options?.privacy || 'P3',
331
+ metadata: options?.metadata,
332
+ });
333
+ }
334
+ savePreferences(prefs) {
335
+ this.store.savePreferences(prefs);
336
+ }
337
+ saveIdentity(identity) {
338
+ this.store.saveIdentity(identity);
339
+ }
340
+ // 读取操作
341
+ getToday() {
342
+ return this.loader.loadTodayMemories();
343
+ }
344
+ getRecent(days = 7) {
345
+ return this.loader.loadRecentMemories(days);
346
+ }
347
+ getPreferences() {
348
+ return this.loader.loadPrefrences();
349
+ }
350
+ getLongterm() {
351
+ // TODO: 实现长期记忆加载
352
+ return [];
353
+ }
354
+ // 搜索
355
+ search(keyword) {
356
+ const recent = this.getRecent(30);
357
+ return recent.filter(m => m.content.toLowerCase().includes(keyword.toLowerCase()) ||
358
+ m.tags.some(t => t.toLowerCase().includes(keyword.toLowerCase())));
359
+ }
360
+ // 统计
361
+ stats() {
362
+ return this.loader.getStats();
363
+ }
364
+ // 清理
365
+ cleanup() {
366
+ return this.forgetting.runAutoCleanup();
367
+ }
368
+ // 快速记住
369
+ rememberThis(content, important = false) {
370
+ return this.save(content, {
371
+ emotion: important ? 0.9 : 0.5,
372
+ tags: important ? ['重要'] : [],
373
+ });
374
+ }
375
+ // 询问记忆
376
+ whatDoYouRemember(about) {
377
+ if (about) {
378
+ const results = this.search(about);
379
+ if (results.length === 0) {
380
+ return `关于「${about}」,我没有相关记忆`;
381
+ }
382
+ return `关于「${about}」,我记得:\n` +
383
+ results.slice(0, 5).map(r => `- ${r.content}`).join('\n');
384
+ }
385
+ const recent = this.getRecent(3);
386
+ if (recent.length === 0) {
387
+ return '我最近没有记忆';
388
+ }
389
+ return '我最近记得:\n' +
390
+ recent.slice(0, 5).map(m => `- ${m.content}`).join('\n');
391
+ }
392
+ }
393
+ exports.MemorySystem = MemorySystem;
394
+ // ============================================================================
395
+ // 导出
396
+ // ============================================================================
397
+ function createMemorySystem(workspaceDir) {
398
+ return new MemorySystem(workspaceDir);
399
+ }
400
+ exports.default = MemorySystem;
401
+ //# sourceMappingURL=memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/systems/memory.ts"],"names":[],"mappings":"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"}