@jee1/memento-client 0.1.0

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 (79) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +17 -0
  3. package/dist/client/agent-client.d.ts +15 -0
  4. package/dist/client/agent-client.d.ts.map +1 -0
  5. package/dist/client/agent-client.js +64 -0
  6. package/dist/client/agent-client.js.map +1 -0
  7. package/dist/client/client-context.d.ts +14 -0
  8. package/dist/client/client-context.d.ts.map +1 -0
  9. package/dist/client/client-context.js +2 -0
  10. package/dist/client/client-context.js.map +1 -0
  11. package/dist/client/factory.d.ts +7 -0
  12. package/dist/client/factory.d.ts.map +1 -0
  13. package/dist/client/factory.js +8 -0
  14. package/dist/client/factory.js.map +1 -0
  15. package/dist/client/format-utils.d.ts +10 -0
  16. package/dist/client/format-utils.d.ts.map +1 -0
  17. package/dist/client/format-utils.js +79 -0
  18. package/dist/client/format-utils.js.map +1 -0
  19. package/dist/client/http-transport.d.ts +29 -0
  20. package/dist/client/http-transport.d.ts.map +1 -0
  21. package/dist/client/http-transport.js +123 -0
  22. package/dist/client/http-transport.js.map +1 -0
  23. package/dist/client/memory-client.d.ts +27 -0
  24. package/dist/client/memory-client.d.ts.map +1 -0
  25. package/dist/client/memory-client.js +128 -0
  26. package/dist/client/memory-client.js.map +1 -0
  27. package/dist/client/memory-utils.d.ts +30 -0
  28. package/dist/client/memory-utils.d.ts.map +1 -0
  29. package/dist/client/memory-utils.js +121 -0
  30. package/dist/client/memory-utils.js.map +1 -0
  31. package/dist/client/search-client.d.ts +14 -0
  32. package/dist/client/search-client.d.ts.map +1 -0
  33. package/dist/client/search-client.js +54 -0
  34. package/dist/client/search-client.js.map +1 -0
  35. package/dist/client/search-utils.d.ts +14 -0
  36. package/dist/client/search-utils.d.ts.map +1 -0
  37. package/dist/client/search-utils.js +46 -0
  38. package/dist/client/search-utils.js.map +1 -0
  39. package/dist/client/time-utils.d.ts +9 -0
  40. package/dist/client/time-utils.d.ts.map +1 -0
  41. package/dist/client/time-utils.js +36 -0
  42. package/dist/client/time-utils.js.map +1 -0
  43. package/dist/client/tools-client.d.ts +23 -0
  44. package/dist/client/tools-client.d.ts.map +1 -0
  45. package/dist/client/tools-client.js +57 -0
  46. package/dist/client/tools-client.js.map +1 -0
  47. package/dist/client/validation-utils.d.ts +28 -0
  48. package/dist/client/validation-utils.d.ts.map +1 -0
  49. package/dist/client/validation-utils.js +93 -0
  50. package/dist/client/validation-utils.js.map +1 -0
  51. package/dist/context-injector.d.ts +106 -0
  52. package/dist/context-injector.d.ts.map +1 -0
  53. package/dist/context-injector.js +299 -0
  54. package/dist/context-injector.js.map +1 -0
  55. package/dist/index.d.ts +43 -0
  56. package/dist/index.d.ts.map +1 -0
  57. package/dist/index.js +44 -0
  58. package/dist/index.js.map +1 -0
  59. package/dist/logger.d.ts +11 -0
  60. package/dist/logger.d.ts.map +1 -0
  61. package/dist/logger.js +27 -0
  62. package/dist/logger.js.map +1 -0
  63. package/dist/memento-client.d.ts +64 -0
  64. package/dist/memento-client.d.ts.map +1 -0
  65. package/dist/memento-client.js +146 -0
  66. package/dist/memento-client.js.map +1 -0
  67. package/dist/memory-manager.d.ts +137 -0
  68. package/dist/memory-manager.d.ts.map +1 -0
  69. package/dist/memory-manager.js +342 -0
  70. package/dist/memory-manager.js.map +1 -0
  71. package/dist/types.d.ts +288 -0
  72. package/dist/types.d.ts.map +1 -0
  73. package/dist/types.js +44 -0
  74. package/dist/types.js.map +1 -0
  75. package/dist/utils.d.ts +11 -0
  76. package/dist/utils.d.ts.map +1 -0
  77. package/dist/utils.js +11 -0
  78. package/dist/utils.js.map +1 -0
  79. package/package.json +53 -0
@@ -0,0 +1,146 @@
1
+ /**
2
+ * MementoClient - Memento MCP Server와 통신하는 메인 클라이언트
3
+ *
4
+ * @example
5
+ * ```typescript
6
+ * import { MementoClient } from '@jee1/memento-client';
7
+ *
8
+ * const client = new MementoClient({
9
+ * serverUrl: 'http://localhost:8080',
10
+ * apiKey: 'your-api-key'
11
+ * });
12
+ *
13
+ * await client.connect();
14
+ *
15
+ * const memory = await client.remember({
16
+ * content: 'React Hook에 대해 학습했다',
17
+ * type: 'episodic',
18
+ * importance: 0.8
19
+ * });
20
+ * ```
21
+ */
22
+ import { EventEmitter } from 'events';
23
+ import { createHttpClient, connectClient, disconnectClient, healthCheck as performHealthCheck, ensureConnected as ensureClientConnected, } from './client/http-transport.js';
24
+ import * as memoryClient from './client/memory-client.js';
25
+ import * as searchClient from './client/search-client.js';
26
+ import * as toolsClient from './client/tools-client.js';
27
+ import * as agentClient from './client/agent-client.js';
28
+ export class MementoClient extends EventEmitter {
29
+ httpClient;
30
+ isConnected = false;
31
+ options;
32
+ constructor(options = {}) {
33
+ super();
34
+ this.options = {
35
+ serverUrl: 'http://localhost:8080',
36
+ apiKey: '',
37
+ timeout: 10000,
38
+ retryCount: 3,
39
+ logLevel: 'info',
40
+ ...options,
41
+ };
42
+ this.httpClient = createHttpClient(this.options, (error) => {
43
+ this.emit('error', error);
44
+ });
45
+ }
46
+ async connect() {
47
+ return connectClient(this);
48
+ }
49
+ async disconnect() {
50
+ return disconnectClient(this);
51
+ }
52
+ get connected() {
53
+ return this.isConnected;
54
+ }
55
+ async healthCheck() {
56
+ return performHealthCheck(this);
57
+ }
58
+ async remember(params) {
59
+ return memoryClient.remember(this, params);
60
+ }
61
+ async recall(query, filters, limit, recallOptions) {
62
+ return searchClient.recall(this, query, filters, limit, recallOptions);
63
+ }
64
+ async hybridSearch(params) {
65
+ return searchClient.hybridSearch(this, params);
66
+ }
67
+ async getMemory(id) {
68
+ return memoryClient.getMemory(this, id);
69
+ }
70
+ async updateMemory(id, params) {
71
+ return memoryClient.updateMemory(this, id, params);
72
+ }
73
+ async forget(memoryId, hard = false) {
74
+ return memoryClient.forget(this, memoryId, hard);
75
+ }
76
+ async pin(memoryId) {
77
+ return memoryClient.pin(this, memoryId);
78
+ }
79
+ async unpin(memoryId) {
80
+ return memoryClient.unpin(this, memoryId);
81
+ }
82
+ async link(sourceId, targetId, relationType) {
83
+ return toolsClient.link(this, sourceId, targetId, relationType);
84
+ }
85
+ async export(format, filters) {
86
+ return toolsClient.exportMemories(this, format, filters);
87
+ }
88
+ async feedback(memoryId, helpful, comment, score, score_breakdown, options) {
89
+ return toolsClient.feedback(this, memoryId, helpful, comment, score, score_breakdown, options);
90
+ }
91
+ async recordRecallFeedback(recallResult, memoryId, helpful, options) {
92
+ return toolsClient.recordRecallFeedback(this, recallResult, memoryId, helpful, options);
93
+ }
94
+ async injectContext(params) {
95
+ return toolsClient.injectContext(this, params);
96
+ }
97
+ async getAgentCapabilities() {
98
+ return agentClient.getAgentCapabilities(this);
99
+ }
100
+ async getAgentOperationsStatus(query = {}) {
101
+ return agentClient.getAgentOperationsStatus(this, query);
102
+ }
103
+ async startAgentSession(event) {
104
+ return agentClient.startAgentSession(this, event);
105
+ }
106
+ async ingestAgentObservations(events) {
107
+ return agentClient.ingestAgentObservations(this, events);
108
+ }
109
+ async preCompactAgentSession(sessionId, event) {
110
+ return agentClient.preCompactAgentSession(this, sessionId, event);
111
+ }
112
+ async stopAgentSession(sessionId, event) {
113
+ return agentClient.stopAgentSession(this, sessionId, event);
114
+ }
115
+ async getAgentSession(sessionId) {
116
+ return agentClient.getAgentSession(this, sessionId);
117
+ }
118
+ async listAgentObservations(sessionId, query = {}) {
119
+ return agentClient.listAgentObservations(this, sessionId, query);
120
+ }
121
+ async getAgentProvenance(query) {
122
+ return agentClient.getAgentProvenance(this, query);
123
+ }
124
+ async linkAgentProvenance(input) {
125
+ return agentClient.linkAgentProvenance(this, input);
126
+ }
127
+ async exportAgentSession(sessionId) {
128
+ return agentClient.exportAgentSession(this, sessionId);
129
+ }
130
+ async deleteAgentSession(sessionId) {
131
+ return agentClient.deleteAgentSession(this, sessionId);
132
+ }
133
+ ensureConnected() {
134
+ ensureClientConnected(this);
135
+ }
136
+ updateOptions(newOptions) {
137
+ this.options = { ...this.options, ...newOptions };
138
+ this.httpClient = createHttpClient(this.options, (error) => {
139
+ this.emit('error', error);
140
+ });
141
+ }
142
+ getOptions() {
143
+ return { ...this.options };
144
+ }
145
+ }
146
+ //# sourceMappingURL=memento-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memento-client.js","sourceRoot":"","sources":["../src/memento-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,137 @@
1
+ /**
2
+ * MemoryManager - 기억 관리를 위한 고수준 API
3
+ * MementoClient를 래핑하여 더 편리한 기억 관리 기능을 제공합니다.
4
+ *
5
+ * @example
6
+ * ```typescript
7
+ * import { MemoryManager } from '@jee1/memento-client';
8
+ *
9
+ * const manager = new MemoryManager(client);
10
+ *
11
+ * // 기억 저장
12
+ * const memory = await manager.create({
13
+ * content: 'React Hook 학습',
14
+ * type: 'episodic',
15
+ * tags: ['react', 'frontend']
16
+ * });
17
+ *
18
+ * // 기억 검색
19
+ * const results = await manager.search('React Hook');
20
+ * ```
21
+ */
22
+ import { MementoClient } from './memento-client.js';
23
+ import type { MemoryItem, CreateMemoryParams, UpdateMemoryParams, SearchFilters, SearchResult, MemoryType, PrivacyScope } from './types.js';
24
+ export declare class MemoryManager {
25
+ private client;
26
+ constructor(client: MementoClient);
27
+ /**
28
+ * 기억 생성
29
+ */
30
+ create(params: CreateMemoryParams): Promise<MemoryItem>;
31
+ /**
32
+ * 기억 조회
33
+ */
34
+ get(id: string): Promise<MemoryItem | null>;
35
+ /**
36
+ * 기억 업데이트
37
+ */
38
+ update(id: string, params: UpdateMemoryParams): Promise<MemoryItem>;
39
+ /**
40
+ * 기억 삭제
41
+ */
42
+ delete(id: string, hard?: boolean): Promise<boolean>;
43
+ /**
44
+ * 기억 검색
45
+ */
46
+ search(query: string, options?: {
47
+ filters?: SearchFilters;
48
+ limit?: number;
49
+ useHybrid?: boolean;
50
+ }): Promise<SearchResult>;
51
+ /**
52
+ * 태그로 기억 검색
53
+ */
54
+ searchByTags(tags: string[], limit?: number): Promise<SearchResult>;
55
+ /**
56
+ * 타입별 기억 검색
57
+ */
58
+ searchByType(type: MemoryType, limit?: number): Promise<SearchResult>;
59
+ /**
60
+ * 프로젝트별 기억 검색
61
+ */
62
+ searchByProject(projectId: string, limit?: number): Promise<SearchResult>;
63
+ /**
64
+ * 최근 기억 검색
65
+ */
66
+ searchRecent(days?: number, limit?: number): Promise<SearchResult>;
67
+ /**
68
+ * 고정된 기억 검색
69
+ */
70
+ searchPinned(limit?: number): Promise<SearchResult>;
71
+ /**
72
+ * 의미적 유사 기억 검색
73
+ */
74
+ findSimilar(memoryId: string, limit?: number): Promise<SearchResult>;
75
+ /**
76
+ * 관련 기억 검색 (태그 기반)
77
+ */
78
+ findRelated(memoryId: string, limit?: number): Promise<SearchResult>;
79
+ /**
80
+ * 기억 고정
81
+ */
82
+ pin(id: string): Promise<boolean>;
83
+ /**
84
+ * 기억 고정 해제
85
+ */
86
+ unpin(id: string): Promise<boolean>;
87
+ /**
88
+ * 기억 중요도 설정
89
+ */
90
+ setImportance(id: string, importance: number): Promise<MemoryItem>;
91
+ /**
92
+ * 기억 태그 추가
93
+ */
94
+ addTags(id: string, tags: string[]): Promise<MemoryItem>;
95
+ /**
96
+ * 기억 태그 제거
97
+ */
98
+ removeTags(id: string, tags: string[]): Promise<MemoryItem>;
99
+ /**
100
+ * 기억 태그 업데이트
101
+ */
102
+ setTags(id: string, tags: string[]): Promise<MemoryItem>;
103
+ /**
104
+ * 기억 공개 범위 설정
105
+ */
106
+ setPrivacyScope(id: string, privacyScope: PrivacyScope): Promise<MemoryItem>;
107
+ /**
108
+ * 여러 기억 일괄 생성
109
+ */
110
+ createBatch(params: CreateMemoryParams[]): Promise<MemoryItem[]>;
111
+ /**
112
+ * 여러 기억 일괄 삭제
113
+ */
114
+ deleteBatch(ids: string[], hard?: boolean): Promise<number>;
115
+ /**
116
+ * 여러 기억 일괄 고정/해제
117
+ */
118
+ pinBatch(ids: string[], pin?: boolean): Promise<number>;
119
+ /**
120
+ * 기억 통계 조회
121
+ */
122
+ getStats(): Promise<{
123
+ total: number;
124
+ byType: Record<MemoryType, number>;
125
+ byPrivacyScope: Record<PrivacyScope, number>;
126
+ pinned: number;
127
+ recent: number;
128
+ }>;
129
+ /**
130
+ * 인기 태그 조회
131
+ */
132
+ getPopularTags(limit?: number): Promise<Array<{
133
+ tag: string;
134
+ count: number;
135
+ }>>;
136
+ }
137
+ //# sourceMappingURL=memory-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-manager.d.ts","sourceRoot":"","sources":["../src/memory-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,342 @@
1
+ /**
2
+ * MemoryManager - 기억 관리를 위한 고수준 API
3
+ * MementoClient를 래핑하여 더 편리한 기억 관리 기능을 제공합니다.
4
+ *
5
+ * @example
6
+ * ```typescript
7
+ * import { MemoryManager } from '@jee1/memento-client';
8
+ *
9
+ * const manager = new MemoryManager(client);
10
+ *
11
+ * // 기억 저장
12
+ * const memory = await manager.create({
13
+ * content: 'React Hook 학습',
14
+ * type: 'episodic',
15
+ * tags: ['react', 'frontend']
16
+ * });
17
+ *
18
+ * // 기억 검색
19
+ * const results = await manager.search('React Hook');
20
+ * ```
21
+ */
22
+ import { logger } from './logger.js';
23
+ export class MemoryManager {
24
+ client;
25
+ constructor(client) {
26
+ this.client = client;
27
+ }
28
+ // ============================================================================
29
+ // 기본 CRUD 작업
30
+ // ============================================================================
31
+ /**
32
+ * 기억 생성
33
+ */
34
+ async create(params) {
35
+ const result = await this.client.remember(params);
36
+ // 생성된 기억의 상세 정보를 조회하여 반환
37
+ return await this.client.getMemory(result.memory_id);
38
+ }
39
+ /**
40
+ * 기억 조회
41
+ */
42
+ async get(id) {
43
+ try {
44
+ return await this.client.getMemory(id);
45
+ }
46
+ catch (error) {
47
+ const errorObj = error;
48
+ if (errorObj.code === 'NOT_FOUND' || errorObj.message?.includes('not found')) {
49
+ return null;
50
+ }
51
+ throw error;
52
+ }
53
+ }
54
+ /**
55
+ * 기억 업데이트
56
+ */
57
+ async update(id, params) {
58
+ return await this.client.updateMemory(id, params);
59
+ }
60
+ /**
61
+ * 기억 삭제
62
+ */
63
+ async delete(id, hard = false) {
64
+ const result = await this.client.forget(id, hard);
65
+ return result.success;
66
+ }
67
+ // ============================================================================
68
+ // 검색 기능
69
+ // ============================================================================
70
+ /**
71
+ * 기억 검색
72
+ */
73
+ async search(query, options = {}) {
74
+ const { filters, limit, useHybrid = false } = options;
75
+ if (useHybrid) {
76
+ const hybridResult = await this.client.hybridSearch({
77
+ query,
78
+ filters: filters || undefined,
79
+ limit: limit || undefined
80
+ });
81
+ // HybridSearchResult를 SearchResult로 변환
82
+ return {
83
+ items: hybridResult.items.map(item => ({
84
+ ...item,
85
+ score: item.finalScore
86
+ })),
87
+ total_count: hybridResult.total_count,
88
+ query_time: hybridResult.query_time
89
+ };
90
+ }
91
+ else {
92
+ return await this.client.recall(query, filters, limit);
93
+ }
94
+ }
95
+ /**
96
+ * 태그로 기억 검색
97
+ */
98
+ async searchByTags(tags, limit) {
99
+ return await this.search('*', {
100
+ filters: { tags },
101
+ limit: limit || undefined
102
+ });
103
+ }
104
+ /**
105
+ * 타입별 기억 검색
106
+ */
107
+ async searchByType(type, limit) {
108
+ return await this.search('*', {
109
+ filters: { type: [type] },
110
+ limit: limit || undefined
111
+ });
112
+ }
113
+ /**
114
+ * 프로젝트별 기억 검색
115
+ */
116
+ async searchByProject(projectId, limit) {
117
+ return await this.search('', {
118
+ filters: { project_id: projectId },
119
+ limit: limit || undefined
120
+ });
121
+ }
122
+ /**
123
+ * 최근 기억 검색
124
+ */
125
+ async searchRecent(days = 7, limit) {
126
+ const timeFrom = new Date();
127
+ timeFrom.setDate(timeFrom.getDate() - days);
128
+ return await this.search('', {
129
+ filters: {
130
+ time_from: timeFrom.toISOString()
131
+ },
132
+ limit: limit || undefined
133
+ });
134
+ }
135
+ /**
136
+ * 고정된 기억 검색
137
+ */
138
+ async searchPinned(limit) {
139
+ return await this.search('', {
140
+ filters: { pinned: true },
141
+ limit: limit || undefined
142
+ });
143
+ }
144
+ // ============================================================================
145
+ // 고급 검색 기능
146
+ // ============================================================================
147
+ /**
148
+ * 의미적 유사 기억 검색
149
+ */
150
+ async findSimilar(memoryId, limit = 5) {
151
+ const memory = await this.get(memoryId);
152
+ if (!memory) {
153
+ throw new Error(`Memory with id ${memoryId} not found`);
154
+ }
155
+ return await this.search(memory.content, {
156
+ filters: {
157
+ type: [memory.type]
158
+ },
159
+ limit: limit + 1, // 자기 자신 제외를 위해 +1
160
+ useHybrid: true
161
+ });
162
+ }
163
+ /**
164
+ * 관련 기억 검색 (태그 기반)
165
+ */
166
+ async findRelated(memoryId, limit = 5) {
167
+ const memory = await this.get(memoryId);
168
+ if (!memory || !memory.tags || memory.tags.length === 0) {
169
+ return { items: [], total_count: 0, query_time: 0 };
170
+ }
171
+ return await this.searchByTags(memory.tags, limit + 1);
172
+ }
173
+ // ============================================================================
174
+ // 기억 관리 기능
175
+ // ============================================================================
176
+ /**
177
+ * 기억 고정
178
+ */
179
+ async pin(id) {
180
+ const result = await this.client.pin(id);
181
+ return result.success;
182
+ }
183
+ /**
184
+ * 기억 고정 해제
185
+ */
186
+ async unpin(id) {
187
+ const result = await this.client.unpin(id);
188
+ return result.success;
189
+ }
190
+ /**
191
+ * 기억 중요도 설정
192
+ */
193
+ async setImportance(id, importance) {
194
+ if (importance < 0 || importance > 1) {
195
+ throw new Error('Importance must be between 0 and 1');
196
+ }
197
+ return await this.update(id, { importance });
198
+ }
199
+ /**
200
+ * 기억 태그 추가
201
+ */
202
+ async addTags(id, tags) {
203
+ const memory = await this.get(id);
204
+ if (!memory) {
205
+ throw new Error(`Memory with id ${id} not found`);
206
+ }
207
+ const existingTags = memory.tags || [];
208
+ const newTags = [...new Set([...existingTags, ...tags])];
209
+ return await this.update(id, { tags: newTags });
210
+ }
211
+ /**
212
+ * 기억 태그 제거
213
+ */
214
+ async removeTags(id, tags) {
215
+ const memory = await this.get(id);
216
+ if (!memory) {
217
+ throw new Error(`Memory with id ${id} not found`);
218
+ }
219
+ const existingTags = memory.tags || [];
220
+ const newTags = existingTags.filter(tag => !tags.includes(tag));
221
+ return await this.update(id, { tags: newTags });
222
+ }
223
+ /**
224
+ * 기억 태그 업데이트
225
+ */
226
+ async setTags(id, tags) {
227
+ return await this.update(id, { tags });
228
+ }
229
+ /**
230
+ * 기억 공개 범위 설정
231
+ */
232
+ async setPrivacyScope(id, privacyScope) {
233
+ return await this.update(id, { privacy_scope: privacyScope });
234
+ }
235
+ // ============================================================================
236
+ // 배치 작업
237
+ // ============================================================================
238
+ /**
239
+ * 여러 기억 일괄 생성
240
+ */
241
+ async createBatch(params) {
242
+ const results = [];
243
+ for (const param of params) {
244
+ try {
245
+ const memory = await this.create(param);
246
+ results.push(memory);
247
+ }
248
+ catch (error) {
249
+ logger.error(`Failed to create memory: ${param.content}`, { error });
250
+ // 에러가 발생해도 계속 진행
251
+ }
252
+ }
253
+ return results;
254
+ }
255
+ /**
256
+ * 여러 기억 일괄 삭제
257
+ */
258
+ async deleteBatch(ids, hard = false) {
259
+ let successCount = 0;
260
+ for (const id of ids) {
261
+ try {
262
+ const success = await this.delete(id, hard);
263
+ if (success)
264
+ successCount++;
265
+ }
266
+ catch (error) {
267
+ logger.error(`Failed to delete memory: ${id}`, { error });
268
+ }
269
+ }
270
+ return successCount;
271
+ }
272
+ /**
273
+ * 여러 기억 일괄 고정/해제
274
+ */
275
+ async pinBatch(ids, pin = true) {
276
+ let successCount = 0;
277
+ for (const id of ids) {
278
+ try {
279
+ const success = pin ? await this.pin(id) : await this.unpin(id);
280
+ if (success)
281
+ successCount++;
282
+ }
283
+ catch (error) {
284
+ logger.error(`Failed to ${pin ? 'pin' : 'unpin'} memory: ${id}`, { error });
285
+ }
286
+ }
287
+ return successCount;
288
+ }
289
+ // ============================================================================
290
+ // 통계 및 분석
291
+ // ============================================================================
292
+ /**
293
+ * 기억 통계 조회
294
+ */
295
+ async getStats() {
296
+ const allMemories = await this.search('*', { limit: 50 });
297
+ const recentMemories = await this.searchRecent(7, 50);
298
+ const stats = {
299
+ total: allMemories.total_count,
300
+ byType: {
301
+ working: 0,
302
+ episodic: 0,
303
+ semantic: 0,
304
+ procedural: 0
305
+ },
306
+ byPrivacyScope: {
307
+ private: 0,
308
+ team: 0,
309
+ public: 0
310
+ },
311
+ pinned: 0,
312
+ recent: recentMemories.total_count
313
+ };
314
+ for (const memory of allMemories.items) {
315
+ stats.byType[memory.type]++;
316
+ const privacyScope = memory.privacy_scope || 'private';
317
+ stats.byPrivacyScope[privacyScope]++;
318
+ if (memory.pinned)
319
+ stats.pinned++;
320
+ }
321
+ return stats;
322
+ }
323
+ /**
324
+ * 인기 태그 조회
325
+ */
326
+ async getPopularTags(limit = 10) {
327
+ const allMemories = await this.search('', { limit: 1000 });
328
+ const tagCounts = {};
329
+ for (const memory of allMemories.items) {
330
+ if (memory.tags) {
331
+ for (const tag of memory.tags) {
332
+ tagCounts[tag] = (tagCounts[tag] || 0) + 1;
333
+ }
334
+ }
335
+ }
336
+ return Object.entries(tagCounts)
337
+ .map(([tag, count]) => ({ tag, count }))
338
+ .sort((a, b) => b.count - a.count)
339
+ .slice(0, limit);
340
+ }
341
+ }
342
+ //# sourceMappingURL=memory-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-manager.js","sourceRoot":"","sources":["../src/memory-manager.ts"],"names":[],"mappings":"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"}