a2a-memory 0.1.2 → 0.6.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 (191) hide show
  1. package/README.md +262 -45
  2. package/dist/adapters/anthropic.d.ts +69 -0
  3. package/dist/adapters/anthropic.d.ts.map +1 -0
  4. package/dist/adapters/anthropic.js +116 -0
  5. package/dist/adapters/anthropic.js.map +1 -0
  6. package/dist/claude/sync.d.ts +57 -0
  7. package/dist/claude/sync.d.ts.map +1 -0
  8. package/dist/claude/sync.js +201 -0
  9. package/dist/claude/sync.js.map +1 -0
  10. package/dist/cli/commands/add.d.ts +8 -0
  11. package/dist/cli/commands/add.d.ts.map +1 -0
  12. package/dist/cli/commands/add.js +45 -0
  13. package/dist/cli/commands/add.js.map +1 -0
  14. package/dist/cli/commands/claude-sync.d.ts +11 -0
  15. package/dist/cli/commands/claude-sync.d.ts.map +1 -0
  16. package/dist/cli/commands/claude-sync.js +69 -0
  17. package/dist/cli/commands/claude-sync.js.map +1 -0
  18. package/dist/cli/commands/cleanup.d.ts +8 -0
  19. package/dist/cli/commands/cleanup.d.ts.map +1 -0
  20. package/dist/cli/commands/cleanup.js +82 -0
  21. package/dist/cli/commands/cleanup.js.map +1 -0
  22. package/dist/cli/commands/edit.d.ts +8 -0
  23. package/dist/cli/commands/edit.d.ts.map +1 -0
  24. package/dist/cli/commands/edit.js +66 -0
  25. package/dist/cli/commands/edit.js.map +1 -0
  26. package/dist/cli/commands/embed.d.ts +8 -0
  27. package/dist/cli/commands/embed.d.ts.map +1 -0
  28. package/dist/cli/commands/embed.js +93 -0
  29. package/dist/cli/commands/embed.js.map +1 -0
  30. package/dist/cli/commands/health.d.ts +8 -0
  31. package/dist/cli/commands/health.d.ts.map +1 -0
  32. package/dist/cli/commands/health.js +108 -0
  33. package/dist/cli/commands/health.js.map +1 -0
  34. package/dist/cli/commands/rm.d.ts +8 -0
  35. package/dist/cli/commands/rm.d.ts.map +1 -0
  36. package/dist/cli/commands/rm.js +60 -0
  37. package/dist/cli/commands/rm.js.map +1 -0
  38. package/dist/cli/commands/sync.d.ts.map +1 -1
  39. package/dist/cli/commands/sync.js +52 -0
  40. package/dist/cli/commands/sync.js.map +1 -1
  41. package/dist/cli/commands/team.d.ts +7 -0
  42. package/dist/cli/commands/team.d.ts.map +1 -0
  43. package/dist/cli/commands/team.js +144 -0
  44. package/dist/cli/commands/team.js.map +1 -0
  45. package/dist/cli/index.d.ts +5 -0
  46. package/dist/cli/index.d.ts.map +1 -1
  47. package/dist/cli/index.js +44 -1
  48. package/dist/cli/index.js.map +1 -1
  49. package/dist/config/manager.d.ts +16 -0
  50. package/dist/config/manager.d.ts.map +1 -1
  51. package/dist/config/manager.js +170 -5
  52. package/dist/config/manager.js.map +1 -1
  53. package/dist/db/database.d.ts +28 -3
  54. package/dist/db/database.d.ts.map +1 -1
  55. package/dist/db/database.js +291 -64
  56. package/dist/db/database.js.map +1 -1
  57. package/dist/embedding/index.d.ts +21 -0
  58. package/dist/embedding/index.d.ts.map +1 -0
  59. package/dist/embedding/index.js +29 -0
  60. package/dist/embedding/index.js.map +1 -0
  61. package/dist/embedding/local-provider.d.ts +40 -0
  62. package/dist/embedding/local-provider.d.ts.map +1 -0
  63. package/dist/embedding/local-provider.js +157 -0
  64. package/dist/embedding/local-provider.js.map +1 -0
  65. package/dist/embedding/openai-provider.d.ts +31 -0
  66. package/dist/embedding/openai-provider.d.ts.map +1 -0
  67. package/dist/embedding/openai-provider.js +92 -0
  68. package/dist/embedding/openai-provider.js.map +1 -0
  69. package/dist/embedding/quantization.d.ts +34 -0
  70. package/dist/embedding/quantization.d.ts.map +1 -0
  71. package/dist/embedding/quantization.js +89 -0
  72. package/dist/embedding/quantization.js.map +1 -0
  73. package/dist/extraction/extractor.d.ts +11 -1
  74. package/dist/extraction/extractor.d.ts.map +1 -1
  75. package/dist/extraction/extractor.js +63 -20
  76. package/dist/extraction/extractor.js.map +1 -1
  77. package/dist/extraction/filter.d.ts.map +1 -1
  78. package/dist/extraction/filter.js +25 -3
  79. package/dist/extraction/filter.js.map +1 -1
  80. package/dist/extraction/scorer.d.ts +2 -0
  81. package/dist/extraction/scorer.d.ts.map +1 -1
  82. package/dist/extraction/scorer.js +23 -1
  83. package/dist/extraction/scorer.js.map +1 -1
  84. package/dist/extraction/similarity.d.ts +25 -0
  85. package/dist/extraction/similarity.d.ts.map +1 -0
  86. package/dist/extraction/similarity.js +85 -0
  87. package/dist/extraction/similarity.js.map +1 -0
  88. package/dist/hooks/post-tool-use.d.ts.map +1 -1
  89. package/dist/hooks/post-tool-use.js +88 -53
  90. package/dist/hooks/post-tool-use.js.map +1 -1
  91. package/dist/hooks/session-end.d.ts +1 -0
  92. package/dist/hooks/session-end.d.ts.map +1 -1
  93. package/dist/hooks/session-end.js +173 -33
  94. package/dist/hooks/session-end.js.map +1 -1
  95. package/dist/hooks/session-start.d.ts +2 -2
  96. package/dist/hooks/session-start.d.ts.map +1 -1
  97. package/dist/hooks/session-start.js +172 -22
  98. package/dist/hooks/session-start.js.map +1 -1
  99. package/dist/hooks/shared.d.ts +18 -0
  100. package/dist/hooks/shared.d.ts.map +1 -0
  101. package/dist/hooks/shared.js +46 -0
  102. package/dist/hooks/shared.js.map +1 -0
  103. package/dist/i18n/index.d.ts +3 -0
  104. package/dist/i18n/index.d.ts.map +1 -0
  105. package/dist/i18n/index.js +2 -0
  106. package/dist/i18n/index.js.map +1 -0
  107. package/dist/i18n/messages.d.ts +82 -0
  108. package/dist/i18n/messages.d.ts.map +1 -0
  109. package/dist/i18n/messages.js +150 -0
  110. package/dist/i18n/messages.js.map +1 -0
  111. package/dist/index.d.ts +25 -5
  112. package/dist/index.d.ts.map +1 -1
  113. package/dist/index.js +20 -3
  114. package/dist/index.js.map +1 -1
  115. package/dist/lifecycle/cleanup.d.ts +25 -0
  116. package/dist/lifecycle/cleanup.d.ts.map +1 -0
  117. package/dist/lifecycle/cleanup.js +52 -0
  118. package/dist/lifecycle/cleanup.js.map +1 -0
  119. package/dist/lifecycle/index.d.ts +15 -0
  120. package/dist/lifecycle/index.d.ts.map +1 -0
  121. package/dist/lifecycle/index.js +12 -0
  122. package/dist/lifecycle/index.js.map +1 -0
  123. package/dist/lifecycle/quality-scorer.d.ts +19 -0
  124. package/dist/lifecycle/quality-scorer.d.ts.map +1 -0
  125. package/dist/lifecycle/quality-scorer.js +40 -0
  126. package/dist/lifecycle/quality-scorer.js.map +1 -0
  127. package/dist/lifecycle/tiering.d.ts +50 -0
  128. package/dist/lifecycle/tiering.d.ts.map +1 -0
  129. package/dist/lifecycle/tiering.js +235 -0
  130. package/dist/lifecycle/tiering.js.map +1 -0
  131. package/dist/llm/client.d.ts +37 -0
  132. package/dist/llm/client.d.ts.map +1 -0
  133. package/dist/llm/client.js +154 -0
  134. package/dist/llm/client.js.map +1 -0
  135. package/dist/llm/index.d.ts +6 -0
  136. package/dist/llm/index.d.ts.map +1 -0
  137. package/dist/llm/index.js +5 -0
  138. package/dist/llm/index.js.map +1 -0
  139. package/dist/search/index.d.ts +8 -0
  140. package/dist/search/index.d.ts.map +1 -0
  141. package/dist/search/index.js +7 -0
  142. package/dist/search/index.js.map +1 -0
  143. package/dist/search/ranker.d.ts +30 -0
  144. package/dist/search/ranker.d.ts.map +1 -0
  145. package/dist/search/ranker.js +91 -0
  146. package/dist/search/ranker.js.map +1 -0
  147. package/dist/sync/client.d.ts +103 -0
  148. package/dist/sync/client.d.ts.map +1 -1
  149. package/dist/sync/client.js +186 -6
  150. package/dist/sync/client.js.map +1 -1
  151. package/dist/sync/encryption.d.ts +72 -0
  152. package/dist/sync/encryption.d.ts.map +1 -0
  153. package/dist/sync/encryption.js +203 -0
  154. package/dist/sync/encryption.js.map +1 -0
  155. package/dist/sync/index.d.ts +9 -0
  156. package/dist/sync/index.d.ts.map +1 -1
  157. package/dist/sync/index.js +6 -0
  158. package/dist/sync/index.js.map +1 -1
  159. package/dist/sync/queue.d.ts +49 -0
  160. package/dist/sync/queue.d.ts.map +1 -0
  161. package/dist/sync/queue.js +112 -0
  162. package/dist/sync/queue.js.map +1 -0
  163. package/dist/sync/scheduler.d.ts +69 -0
  164. package/dist/sync/scheduler.d.ts.map +1 -0
  165. package/dist/sync/scheduler.js +140 -0
  166. package/dist/sync/scheduler.js.map +1 -0
  167. package/dist/sync/synchronizer.d.ts +19 -5
  168. package/dist/sync/synchronizer.d.ts.map +1 -1
  169. package/dist/sync/synchronizer.js +128 -70
  170. package/dist/sync/synchronizer.js.map +1 -1
  171. package/dist/sync/team-synchronizer.d.ts +43 -0
  172. package/dist/sync/team-synchronizer.d.ts.map +1 -0
  173. package/dist/sync/team-synchronizer.js +126 -0
  174. package/dist/sync/team-synchronizer.js.map +1 -0
  175. package/dist/sync/vector-clock.d.ts +23 -0
  176. package/dist/sync/vector-clock.d.ts.map +1 -0
  177. package/dist/sync/vector-clock.js +40 -0
  178. package/dist/sync/vector-clock.js.map +1 -0
  179. package/dist/types/index.d.ts +74 -2
  180. package/dist/types/index.d.ts.map +1 -1
  181. package/dist/types/index.js +56 -4
  182. package/dist/types/index.js.map +1 -1
  183. package/dist/utils/keychain.d.ts +50 -0
  184. package/dist/utils/keychain.d.ts.map +1 -0
  185. package/dist/utils/keychain.js +166 -0
  186. package/dist/utils/keychain.js.map +1 -0
  187. package/dist/utils/logger.d.ts +16 -0
  188. package/dist/utils/logger.d.ts.map +1 -0
  189. package/dist/utils/logger.js +118 -0
  190. package/dist/utils/logger.js.map +1 -0
  191. package/package.json +1 -1
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Reciprocal Rank Fusion (RRF) 기반 하이브리드 검색
3
+ *
4
+ * FTS, Vector, Recency 결과를 통합하여 최적의 검색 결과 제공.
5
+ */
6
+ /**
7
+ * RRF (Reciprocal Rank Fusion) 기반 하이브리드 랭커
8
+ *
9
+ * RRF 공식: score = sum(1 / (k + rank_i)) for each source
10
+ * - k: RRF 파라미터 (기본: 60) - 낮을수록 상위 순위에 더 높은 가중치
11
+ * - rank: 각 소스에서의 순위 (1부터 시작)
12
+ */
13
+ export class HybridRanker {
14
+ k;
15
+ constructor(k = 60) {
16
+ this.k = k;
17
+ }
18
+ /**
19
+ * FTS + Vector + Recency 결과를 RRF로 통합
20
+ */
21
+ rank(ftsResults, vectorResults, recencyResults) {
22
+ // 각 메모리별 score 계산을 위한 맵
23
+ const scoreMap = new Map();
24
+ // FTS 점수 계산
25
+ for (let i = 0; i < ftsResults.length; i++) {
26
+ const result = ftsResults[i];
27
+ const rank = i + 1;
28
+ const score = 1 / (this.k + rank);
29
+ const existing = scoreMap.get(result.memory.id);
30
+ if (existing) {
31
+ existing.totalScore += score;
32
+ existing.sources.push({ type: 'fts', rank });
33
+ }
34
+ else {
35
+ scoreMap.set(result.memory.id, {
36
+ memory: result.memory,
37
+ totalScore: score,
38
+ sources: [{ type: 'fts', rank }],
39
+ });
40
+ }
41
+ }
42
+ // Vector 점수 계산
43
+ for (let i = 0; i < vectorResults.length; i++) {
44
+ const result = vectorResults[i];
45
+ const rank = i + 1;
46
+ const score = 1 / (this.k + rank);
47
+ const existing = scoreMap.get(result.memory.id);
48
+ if (existing) {
49
+ existing.totalScore += score;
50
+ existing.sources.push({ type: 'vector', rank });
51
+ }
52
+ else {
53
+ scoreMap.set(result.memory.id, {
54
+ memory: result.memory,
55
+ totalScore: score,
56
+ sources: [{ type: 'vector', rank }],
57
+ });
58
+ }
59
+ }
60
+ // Recency 점수 계산
61
+ if (recencyResults && recencyResults.length > 0) {
62
+ for (let i = 0; i < recencyResults.length; i++) {
63
+ const memory = recencyResults[i];
64
+ const rank = i + 1;
65
+ const score = 1 / (this.k + rank);
66
+ const existing = scoreMap.get(memory.id);
67
+ if (existing) {
68
+ existing.totalScore += score;
69
+ existing.sources.push({ type: 'recency', rank });
70
+ }
71
+ else {
72
+ scoreMap.set(memory.id, {
73
+ memory: memory,
74
+ totalScore: score,
75
+ sources: [{ type: 'recency', rank }],
76
+ });
77
+ }
78
+ }
79
+ }
80
+ // 점수 내림차순 정렬
81
+ const ranked = Array.from(scoreMap.values())
82
+ .sort((a, b) => b.totalScore - a.totalScore)
83
+ .map((item) => ({
84
+ memory: item.memory,
85
+ score: item.totalScore,
86
+ sources: item.sources,
87
+ }));
88
+ return ranked;
89
+ }
90
+ }
91
+ //# sourceMappingURL=ranker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ranker.js","sourceRoot":"","sources":["../../src/search/ranker.ts"],"names":[],"mappings":"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"}
@@ -16,11 +16,28 @@ export interface RemoteMemory {
16
16
  metadata?: Record<string, unknown>;
17
17
  created_at: string;
18
18
  updated_at: string;
19
+ access_count?: number;
20
+ agent_id?: string;
21
+ last_accessed_at?: string;
22
+ embedding?: number[];
19
23
  }
20
24
  export declare class A2AClient {
21
25
  private config;
22
26
  private timeout;
27
+ private encryptionKey;
23
28
  constructor(config: A2AClientConfig);
29
+ /**
30
+ * 암호화 키 설정
31
+ */
32
+ setEncryptionKey(key: Buffer): void;
33
+ /**
34
+ * 암호화 키 해제
35
+ */
36
+ clearEncryptionKey(): void;
37
+ /**
38
+ * 암호화 활성화 여부
39
+ */
40
+ isEncryptionEnabled(): boolean;
24
41
  /**
25
42
  * 메모리 생성
26
43
  */
@@ -43,7 +60,12 @@ export declare class A2AClient {
43
60
  listMemories(options?: {
44
61
  limit?: number;
45
62
  offset?: number;
63
+ includeEmbedding?: boolean;
46
64
  }): Promise<RemoteMemory[]>;
65
+ /**
66
+ * 메모리 복호화 헬퍼
67
+ */
68
+ private decryptMemory;
47
69
  /**
48
70
  * 메모리 업데이트
49
71
  */
@@ -56,10 +78,91 @@ export declare class A2AClient {
56
78
  * 메모리 삭제
57
79
  */
58
80
  deleteMemory(id: string): Promise<void>;
81
+ /**
82
+ * 팀 목록 조회
83
+ */
84
+ listTeams(): Promise<unknown[]>;
85
+ /**
86
+ * 팀 메모리 목록
87
+ */
88
+ listTeamMemories(teamPath: string, options?: {
89
+ limit?: number;
90
+ offset?: number;
91
+ }): Promise<RemoteMemory[]>;
92
+ /**
93
+ * 팀 메모리 추가
94
+ */
95
+ addTeamMemory(teamPath: string, input: {
96
+ content: string;
97
+ category: string;
98
+ tier?: string;
99
+ tags?: string[];
100
+ }): Promise<RemoteMemory>;
101
+ /**
102
+ * 팀 메모리 검색
103
+ */
104
+ searchTeamMemories(teamPath: string, query: string, options?: {
105
+ limit?: number;
106
+ category?: string;
107
+ }): Promise<RemoteMemory[]>;
108
+ /**
109
+ * Delta 생성
110
+ */
111
+ generateDelta(teamPath: string, memoryId: string, vectorClock: Record<string, number>): Promise<unknown>;
112
+ /**
113
+ * Delta 적용
114
+ */
115
+ applyDelta(teamPath: string, memoryId: string, delta: unknown): Promise<unknown>;
59
116
  /**
60
117
  * 연결 테스트
61
118
  */
62
119
  testConnection(): Promise<boolean>;
120
+ /**
121
+ * 컨텍스트 조합 (서버 고급 검색)
122
+ */
123
+ assembleContext(query: string, options?: {
124
+ maxMemories?: number;
125
+ maxTokens?: number;
126
+ categories?: string[];
127
+ tier?: string;
128
+ }): Promise<{
129
+ memories: RemoteMemory[];
130
+ totalTokens: number;
131
+ context: string;
132
+ }>;
133
+ /**
134
+ * 메모리 강화 (access_count 증가)
135
+ */
136
+ reinforceMemory(id: string): Promise<RemoteMemory>;
137
+ /**
138
+ * 메모리 승격 (semantic tier로 고정)
139
+ * NOTE: 서버는 target_tier 파라미터를 무시하고 항상 semantic으로 승격합니다.
140
+ */
141
+ promoteMemory(id: string, _targetTier?: string): Promise<RemoteMemory>;
142
+ /**
143
+ * 통계 조회
144
+ */
145
+ getStats(): Promise<{
146
+ totalMemories: number;
147
+ categoryCounts: Record<string, number>;
148
+ tierCounts: Record<string, number>;
149
+ averageAccessCount: number;
150
+ }>;
151
+ /**
152
+ * 인기 태그 조회
153
+ */
154
+ getPopularTags(limit?: number): Promise<Array<{
155
+ tag: string;
156
+ count: number;
157
+ }>>;
158
+ /**
159
+ * 팀 통계 조회
160
+ */
161
+ getTeamStats(teamPath: string): Promise<{
162
+ totalMemories: number;
163
+ totalNodes: number;
164
+ lastSyncedAt: string | null;
165
+ }>;
63
166
  /**
64
167
  * HTTP 요청 실행
65
168
  */
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/sync/client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,EAAE,eAAe;IAKnC;;OAEG;IACG,YAAY,CAAC,KAAK,EAAE;QACxB,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;KACjB,GAAG,OAAO,CAAC,YAAY,CAAC;IAWzB;;OAEG;IACG,cAAc,CAClB,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAC9C,OAAO,CAAC,YAAY,EAAE,CAAC;IAU1B;;OAEG;IACG,YAAY,CAAC,OAAO,CAAC,EAAE;QAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAW3B;;OAEG;IACG,YAAY,CAChB,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,GACtE,OAAO,CAAC,YAAY,CAAC;IAKxB;;OAEG;IACG,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7C;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IASxC;;OAEG;YACW,OAAO;IA0CrB;;OAEG;YACW,mBAAmB;CAyBlC"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/sync/client.ts"],"names":[],"mappings":"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"}
@@ -2,24 +2,61 @@
2
2
  * A2A API Client
3
3
  * Node.js 내장 fetch 사용 (외부 의존성 없음)
4
4
  */
5
+ import { encryptContent, decryptContent, wrapEncryptedContent, unwrapEncryptedContent, } from './encryption.js';
5
6
  export class A2AClient {
6
7
  config;
7
8
  timeout;
9
+ encryptionKey = null;
8
10
  constructor(config) {
9
11
  this.config = config;
10
12
  this.timeout = config.timeout ?? 10000;
11
13
  }
14
+ /**
15
+ * 암호화 키 설정
16
+ */
17
+ setEncryptionKey(key) {
18
+ if (key.length !== 32) {
19
+ throw new Error('암호화 키는 32 bytes여야 합니다');
20
+ }
21
+ this.encryptionKey = key;
22
+ }
23
+ /**
24
+ * 암호화 키 해제
25
+ */
26
+ clearEncryptionKey() {
27
+ this.encryptionKey = null;
28
+ }
29
+ /**
30
+ * 암호화 활성화 여부
31
+ */
32
+ isEncryptionEnabled() {
33
+ return this.encryptionKey !== null;
34
+ }
12
35
  /**
13
36
  * 메모리 생성
14
37
  */
15
38
  async createMemory(input) {
39
+ let contentToSend = input.content;
40
+ // 암호화가 활성화된 경우
41
+ if (this.encryptionKey) {
42
+ const encrypted = encryptContent(input.content, this.encryptionKey);
43
+ contentToSend = wrapEncryptedContent(encrypted);
44
+ }
16
45
  const response = await this.request('POST', '/api/v1/memories', {
17
- content: input.content,
46
+ content: contentToSend,
18
47
  category: input.category,
19
- tier: input.tier ?? 'tier2',
48
+ tier: input.tier,
20
49
  tags: input.tags ?? [],
21
50
  });
22
- return response;
51
+ const memory = response;
52
+ // 응답 복호화
53
+ if (this.encryptionKey && memory.content) {
54
+ const unwrapped = unwrapEncryptedContent(memory.content);
55
+ if (unwrapped) {
56
+ memory.content = decryptContent(unwrapped, this.encryptionKey);
57
+ }
58
+ }
59
+ return memory;
23
60
  }
24
61
  /**
25
62
  * 메모리 검색
@@ -30,7 +67,7 @@ export class A2AClient {
30
67
  limit: options?.limit ?? 10,
31
68
  category: options?.category,
32
69
  });
33
- return response.results ?? [];
70
+ return response.items ?? [];
34
71
  }
35
72
  /**
36
73
  * 메모리 목록
@@ -41,15 +78,43 @@ export class A2AClient {
41
78
  params.set('limit', options.limit.toString());
42
79
  if (options?.offset)
43
80
  params.set('offset', options.offset.toString());
81
+ if (options?.includeEmbedding)
82
+ params.set('include_embedding', 'true');
44
83
  const path = `/api/v1/memories${params.toString() ? `?${params.toString()}` : ''}`;
45
84
  const response = await this.request('GET', path);
46
- return response.memories ?? [];
85
+ const memories = response.items ?? [];
86
+ // 복호화
87
+ if (this.encryptionKey) {
88
+ return memories.map(memory => this.decryptMemory(memory));
89
+ }
90
+ return memories;
91
+ }
92
+ /**
93
+ * 메모리 복호화 헬퍼
94
+ */
95
+ decryptMemory(memory) {
96
+ if (!this.encryptionKey)
97
+ return memory;
98
+ const decrypted = { ...memory };
99
+ // content 복호화
100
+ if (decrypted.content) {
101
+ const unwrapped = unwrapEncryptedContent(decrypted.content);
102
+ if (unwrapped) {
103
+ try {
104
+ decrypted.content = decryptContent(unwrapped, this.encryptionKey);
105
+ }
106
+ catch {
107
+ // 복호화 실패 시 원본 유지 (암호화되지 않은 데이터일 수 있음)
108
+ }
109
+ }
110
+ }
111
+ return decrypted;
47
112
  }
48
113
  /**
49
114
  * 메모리 업데이트
50
115
  */
51
116
  async updateMemory(id, updates) {
52
- const response = await this.request('PATCH', `/api/v1/memories/${id}`, updates);
117
+ const response = await this.request('PUT', `/api/v1/memories/${id}`, updates);
53
118
  return response;
54
119
  }
55
120
  /**
@@ -58,6 +123,59 @@ export class A2AClient {
58
123
  async deleteMemory(id) {
59
124
  await this.request('DELETE', `/api/v1/memories/${id}`);
60
125
  }
126
+ // ============================
127
+ // Team API
128
+ // ============================
129
+ /**
130
+ * 팀 목록 조회
131
+ */
132
+ async listTeams() {
133
+ const response = await this.request('GET', '/api/v1/teams');
134
+ // 서버는 직접 배열 반환 (items 래퍼 없음)
135
+ if (Array.isArray(response))
136
+ return response;
137
+ return response.items ?? [];
138
+ }
139
+ /**
140
+ * 팀 메모리 목록
141
+ */
142
+ async listTeamMemories(teamPath, options) {
143
+ const params = new URLSearchParams();
144
+ if (options?.limit)
145
+ params.set('limit', options.limit.toString());
146
+ if (options?.offset)
147
+ params.set('offset', options.offset.toString());
148
+ const qs = params.toString();
149
+ const path = `/teams/${encodeURIComponent(teamPath)}/memories${qs ? `?${qs}` : ''}`;
150
+ const response = await this.request('GET', path);
151
+ return response.items ?? [];
152
+ }
153
+ /**
154
+ * 팀 메모리 추가
155
+ */
156
+ async addTeamMemory(teamPath, input) {
157
+ const response = await this.request('POST', `/teams/${encodeURIComponent(teamPath)}/memories`, input);
158
+ return response;
159
+ }
160
+ /**
161
+ * 팀 메모리 검색
162
+ */
163
+ async searchTeamMemories(teamPath, query, options) {
164
+ const response = await this.request('POST', `/teams/${encodeURIComponent(teamPath)}/memories/search`, { query, limit: options?.limit ?? 10, category: options?.category });
165
+ return response.items ?? [];
166
+ }
167
+ /**
168
+ * Delta 생성
169
+ */
170
+ async generateDelta(teamPath, memoryId, vectorClock) {
171
+ return this.request('POST', `/teams/${encodeURIComponent(teamPath)}/memories/sync/delta`, { memory_id: memoryId, vector_clock: vectorClock });
172
+ }
173
+ /**
174
+ * Delta 적용
175
+ */
176
+ async applyDelta(teamPath, memoryId, delta) {
177
+ return this.request('POST', `/teams/${encodeURIComponent(teamPath)}/memories/sync/apply`, { memory_id: memoryId, delta });
178
+ }
61
179
  /**
62
180
  * 연결 테스트
63
181
  */
@@ -70,6 +188,68 @@ export class A2AClient {
70
188
  return false;
71
189
  }
72
190
  }
191
+ // ============================
192
+ // Advanced API
193
+ // ============================
194
+ /**
195
+ * 컨텍스트 조합 (서버 고급 검색)
196
+ */
197
+ async assembleContext(query, options) {
198
+ const response = await this.request('POST', '/api/v1/memories/assemble', {
199
+ query,
200
+ max_memories: options?.maxMemories ?? 5,
201
+ max_tokens: options?.maxTokens ?? 2000,
202
+ categories: options?.categories,
203
+ tier: options?.tier,
204
+ });
205
+ return response;
206
+ }
207
+ /**
208
+ * 메모리 강화 (access_count 증가)
209
+ */
210
+ async reinforceMemory(id) {
211
+ const response = await this.request('POST', `/api/v1/memories/${id}/reinforce`);
212
+ return response;
213
+ }
214
+ /**
215
+ * 메모리 승격 (semantic tier로 고정)
216
+ * NOTE: 서버는 target_tier 파라미터를 무시하고 항상 semantic으로 승격합니다.
217
+ */
218
+ async promoteMemory(id, _targetTier) {
219
+ const response = await this.request('POST', `/api/v1/memories/${id}/promote`);
220
+ return response;
221
+ }
222
+ /**
223
+ * 통계 조회
224
+ */
225
+ async getStats() {
226
+ const response = await this.request('GET', '/api/v1/memories/stats');
227
+ return response;
228
+ }
229
+ /**
230
+ * 인기 태그 조회
231
+ */
232
+ async getPopularTags(limit = 10) {
233
+ const params = new URLSearchParams();
234
+ params.set('limit', limit.toString());
235
+ const path = `/api/v1/memories/tags/popular?${params.toString()}`;
236
+ const response = await this.request('GET', path);
237
+ return response.items ?? [];
238
+ }
239
+ /**
240
+ * 팀 통계 조회
241
+ */
242
+ async getTeamStats(teamPath) {
243
+ // team.py: GET /teams/{team_path}/memories/stats
244
+ const response = await this.request('GET', `/teams/${encodeURIComponent(teamPath)}/memories/stats`);
245
+ const data = response;
246
+ const stats = data.stats ?? data;
247
+ return {
248
+ totalMemories: stats.total_memories ?? 0,
249
+ totalNodes: stats.total_nodes ?? 0,
250
+ lastSyncedAt: stats.last_synced_at ?? null,
251
+ };
252
+ }
73
253
  /**
74
254
  * HTTP 요청 실행
75
255
  */
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/sync/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/sync/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * E2E Encryption Module
3
+ *
4
+ * AES-256-GCM 대칭 암호화를 사용하여 메모리 content/embedding 보호
5
+ * Node.js 내장 crypto 모듈만 사용 (외부 의존성 없음)
6
+ */
7
+ export interface EncryptedPayload {
8
+ ciphertext: string;
9
+ iv: string;
10
+ tag: string;
11
+ }
12
+ export interface EncryptionConfig {
13
+ enabled: boolean;
14
+ algorithm: 'aes-256-gcm';
15
+ }
16
+ export interface KeyDerivationResult {
17
+ key: Buffer;
18
+ salt: Buffer;
19
+ }
20
+ /**
21
+ * 랜덤 암호화 키 생성 (32 bytes)
22
+ */
23
+ export declare function generateEncryptionKey(): Buffer;
24
+ /**
25
+ * PBKDF2로 사용자 비밀번호에서 키 유도
26
+ * @param password - 사용자 입력 비밀번호
27
+ * @param salt - 선택적 salt (재현성 필요 시 제공)
28
+ * @returns 키와 salt
29
+ */
30
+ export declare function deriveKey(password: string, salt?: Buffer): KeyDerivationResult;
31
+ /**
32
+ * 텍스트 암호화 (AES-256-GCM)
33
+ * @param plaintext - 원본 텍스트
34
+ * @param key - 32 bytes 암호화 키
35
+ * @returns 암호화된 페이로드
36
+ */
37
+ export declare function encryptContent(plaintext: string, key: Buffer): EncryptedPayload;
38
+ /**
39
+ * 텍스트 복호화 (AES-256-GCM)
40
+ * @param encrypted - 암호화된 페이로드
41
+ * @param key - 32 bytes 암호화 키
42
+ * @returns 원본 텍스트
43
+ * @throws 키가 잘못되었거나 데이터가 변조된 경우
44
+ */
45
+ export declare function decryptContent(encrypted: EncryptedPayload, key: Buffer): string;
46
+ /**
47
+ * 임베딩 벡터 암호화
48
+ * @param embedding - number[] 벡터
49
+ * @param key - 32 bytes 암호화 키
50
+ * @returns base64 암호화된 문자열
51
+ */
52
+ export declare function encryptEmbedding(embedding: number[], key: Buffer): string;
53
+ /**
54
+ * 임베딩 벡터 복호화
55
+ * @param encrypted - base64 암호화된 문자열
56
+ * @param key - 32 bytes 암호화 키
57
+ * @returns number[] 벡터
58
+ */
59
+ export declare function decryptEmbedding(encrypted: string, key: Buffer): number[];
60
+ /**
61
+ * EncryptedPayload 검증
62
+ */
63
+ export declare function isValidEncryptedPayload(obj: unknown): obj is EncryptedPayload;
64
+ /**
65
+ * 암호화된 컨텐츠를 JSON으로 래핑
66
+ */
67
+ export declare function wrapEncryptedContent(encrypted: EncryptedPayload): string;
68
+ /**
69
+ * JSON에서 암호화된 컨텐츠 추출
70
+ */
71
+ export declare function unwrapEncryptedContent(wrapped: string): EncryptedPayload | null;
72
+ //# sourceMappingURL=encryption.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encryption.d.ts","sourceRoot":"","sources":["../../src/sync/encryption.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,aAAa,CAAC;CAC1B;AAED,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CACd;AAkBD;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,mBAAmB,CAe9E;AAMD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,gBAAgB,CAqB/E;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,gBAAgB,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAyB/E;AAMD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAkBzE;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAmCzE;AAMD;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,gBAAgB,CAS7E;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,gBAAgB,GAAG,MAAM,CAOxE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAqB/E"}