context-gatekeeper 0.3.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 (305) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +774 -0
  3. package/README.zh.md +765 -0
  4. package/bin/context-gatekeeper-cli.js +60 -0
  5. package/dist/api/gdpr.d.ts +104 -0
  6. package/dist/api/gdpr.d.ts.map +1 -0
  7. package/dist/api/gdpr.js +229 -0
  8. package/dist/api/gdpr.js.map +1 -0
  9. package/dist/api/health-check.d.ts +13 -0
  10. package/dist/api/health-check.d.ts.map +1 -0
  11. package/dist/api/health-check.js +2 -0
  12. package/dist/api/health-check.js.map +1 -0
  13. package/dist/api/index.d.ts +7 -0
  14. package/dist/api/index.d.ts.map +1 -0
  15. package/dist/api/index.js +8 -0
  16. package/dist/api/index.js.map +1 -0
  17. package/dist/api/observability.d.ts +39 -0
  18. package/dist/api/observability.d.ts.map +1 -0
  19. package/dist/api/observability.js +132 -0
  20. package/dist/api/observability.js.map +1 -0
  21. package/dist/api/session-manager.d.ts +41 -0
  22. package/dist/api/session-manager.d.ts.map +1 -0
  23. package/dist/api/session-manager.js +129 -0
  24. package/dist/api/session-manager.js.map +1 -0
  25. package/dist/index.d.ts +2 -0
  26. package/dist/index.d.ts.map +1 -0
  27. package/dist/index.js +7 -0
  28. package/dist/index.js.map +1 -0
  29. package/dist/mcp/server.d.ts +8 -0
  30. package/dist/mcp/server.d.ts.map +1 -0
  31. package/dist/mcp/server.js +613 -0
  32. package/dist/mcp/server.js.map +1 -0
  33. package/dist/mcp/tools/configure-llm.d.ts +26 -0
  34. package/dist/mcp/tools/configure-llm.d.ts.map +1 -0
  35. package/dist/mcp/tools/configure-llm.js +32 -0
  36. package/dist/mcp/tools/configure-llm.js.map +1 -0
  37. package/dist/mcp/tools/context-compress.d.ts +15 -0
  38. package/dist/mcp/tools/context-compress.d.ts.map +1 -0
  39. package/dist/mcp/tools/context-compress.js +15 -0
  40. package/dist/mcp/tools/context-compress.js.map +1 -0
  41. package/dist/mcp/tools/dual-mode-execute.d.ts +78 -0
  42. package/dist/mcp/tools/dual-mode-execute.d.ts.map +1 -0
  43. package/dist/mcp/tools/dual-mode-execute.js +299 -0
  44. package/dist/mcp/tools/dual-mode-execute.js.map +1 -0
  45. package/dist/mcp/tools/index.d.ts +19 -0
  46. package/dist/mcp/tools/index.d.ts.map +1 -0
  47. package/dist/mcp/tools/index.js +20 -0
  48. package/dist/mcp/tools/index.js.map +1 -0
  49. package/dist/mcp/tools/intelligent-recall.d.ts +67 -0
  50. package/dist/mcp/tools/intelligent-recall.d.ts.map +1 -0
  51. package/dist/mcp/tools/intelligent-recall.js +208 -0
  52. package/dist/mcp/tools/intelligent-recall.js.map +1 -0
  53. package/dist/mcp/tools/memory-anchor.d.ts +13 -0
  54. package/dist/mcp/tools/memory-anchor.d.ts.map +1 -0
  55. package/dist/mcp/tools/memory-anchor.js +16 -0
  56. package/dist/mcp/tools/memory-anchor.js.map +1 -0
  57. package/dist/mcp/tools/memory-delete-batch.d.ts +16 -0
  58. package/dist/mcp/tools/memory-delete-batch.d.ts.map +1 -0
  59. package/dist/mcp/tools/memory-delete-batch.js +26 -0
  60. package/dist/mcp/tools/memory-delete-batch.js.map +1 -0
  61. package/dist/mcp/tools/memory-extract.d.ts +68 -0
  62. package/dist/mcp/tools/memory-extract.d.ts.map +1 -0
  63. package/dist/mcp/tools/memory-extract.js +280 -0
  64. package/dist/mcp/tools/memory-extract.js.map +1 -0
  65. package/dist/mcp/tools/memory-recall.d.ts +42 -0
  66. package/dist/mcp/tools/memory-recall.d.ts.map +1 -0
  67. package/dist/mcp/tools/memory-recall.js +37 -0
  68. package/dist/mcp/tools/memory-recall.js.map +1 -0
  69. package/dist/mcp/tools/memory-report-usage.d.ts +17 -0
  70. package/dist/mcp/tools/memory-report-usage.d.ts.map +1 -0
  71. package/dist/mcp/tools/memory-report-usage.js +15 -0
  72. package/dist/mcp/tools/memory-report-usage.js.map +1 -0
  73. package/dist/mcp/tools/memory-search.d.ts +43 -0
  74. package/dist/mcp/tools/memory-search.d.ts.map +1 -0
  75. package/dist/mcp/tools/memory-search.js +38 -0
  76. package/dist/mcp/tools/memory-search.js.map +1 -0
  77. package/dist/mcp/tools/memory-session.d.ts +118 -0
  78. package/dist/mcp/tools/memory-session.d.ts.map +1 -0
  79. package/dist/mcp/tools/memory-session.js +113 -0
  80. package/dist/mcp/tools/memory-session.js.map +1 -0
  81. package/dist/mcp/tools/memory-stats.d.ts +10 -0
  82. package/dist/mcp/tools/memory-stats.d.ts.map +1 -0
  83. package/dist/mcp/tools/memory-stats.js +35 -0
  84. package/dist/mcp/tools/memory-stats.js.map +1 -0
  85. package/dist/mcp/tools/memory-store-batch.d.ts +49 -0
  86. package/dist/mcp/tools/memory-store-batch.d.ts.map +1 -0
  87. package/dist/mcp/tools/memory-store-batch.js +48 -0
  88. package/dist/mcp/tools/memory-store-batch.js.map +1 -0
  89. package/dist/mcp/tools/memory-store.d.ts +37 -0
  90. package/dist/mcp/tools/memory-store.d.ts.map +1 -0
  91. package/dist/mcp/tools/memory-store.js +34 -0
  92. package/dist/mcp/tools/memory-store.js.map +1 -0
  93. package/dist/mcp/tools/project-create.d.ts +16 -0
  94. package/dist/mcp/tools/project-create.d.ts.map +1 -0
  95. package/dist/mcp/tools/project-create.js +14 -0
  96. package/dist/mcp/tools/project-create.js.map +1 -0
  97. package/dist/models/types.d.ts +88 -0
  98. package/dist/models/types.d.ts.map +1 -0
  99. package/dist/models/types.js +19 -0
  100. package/dist/models/types.js.map +1 -0
  101. package/dist/schema/compression.d.ts +7 -0
  102. package/dist/schema/compression.d.ts.map +1 -0
  103. package/dist/schema/compression.js +66 -0
  104. package/dist/schema/compression.js.map +1 -0
  105. package/dist/schema/fulltext-search.d.ts +10 -0
  106. package/dist/schema/fulltext-search.d.ts.map +1 -0
  107. package/dist/schema/fulltext-search.js +73 -0
  108. package/dist/schema/fulltext-search.js.map +1 -0
  109. package/dist/schema/index.d.ts +9 -0
  110. package/dist/schema/index.d.ts.map +1 -0
  111. package/dist/schema/index.js +9 -0
  112. package/dist/schema/index.js.map +1 -0
  113. package/dist/schema/knowledge-graph.d.ts +108 -0
  114. package/dist/schema/knowledge-graph.d.ts.map +1 -0
  115. package/dist/schema/knowledge-graph.js +372 -0
  116. package/dist/schema/knowledge-graph.js.map +1 -0
  117. package/dist/schema/memory-session.d.ts +62 -0
  118. package/dist/schema/memory-session.d.ts.map +1 -0
  119. package/dist/schema/memory-session.js +258 -0
  120. package/dist/schema/memory-session.js.map +1 -0
  121. package/dist/schema/memory.d.ts +84 -0
  122. package/dist/schema/memory.d.ts.map +1 -0
  123. package/dist/schema/memory.js +622 -0
  124. package/dist/schema/memory.js.map +1 -0
  125. package/dist/schema/project.d.ts +8 -0
  126. package/dist/schema/project.d.ts.map +1 -0
  127. package/dist/schema/project.js +68 -0
  128. package/dist/schema/project.js.map +1 -0
  129. package/dist/schema/schema-init.d.ts +2 -0
  130. package/dist/schema/schema-init.d.ts.map +1 -0
  131. package/dist/schema/schema-init.js +199 -0
  132. package/dist/schema/schema-init.js.map +1 -0
  133. package/dist/schema/vector-index.d.ts +28 -0
  134. package/dist/schema/vector-index.d.ts.map +1 -0
  135. package/dist/schema/vector-index.js +179 -0
  136. package/dist/schema/vector-index.js.map +1 -0
  137. package/dist/scripts/agents/base.d.ts +89 -0
  138. package/dist/scripts/agents/base.d.ts.map +1 -0
  139. package/dist/scripts/agents/base.js +148 -0
  140. package/dist/scripts/agents/base.js.map +1 -0
  141. package/dist/scripts/agents/base.ts +193 -0
  142. package/dist/scripts/agents/claude-code.d.ts +21 -0
  143. package/dist/scripts/agents/claude-code.d.ts.map +1 -0
  144. package/dist/scripts/agents/claude-code.js +33 -0
  145. package/dist/scripts/agents/claude-code.js.map +1 -0
  146. package/dist/scripts/agents/claude-code.ts +36 -0
  147. package/dist/scripts/agents/claude-desktop.d.ts +25 -0
  148. package/dist/scripts/agents/claude-desktop.d.ts.map +1 -0
  149. package/dist/scripts/agents/claude-desktop.js +36 -0
  150. package/dist/scripts/agents/claude-desktop.js.map +1 -0
  151. package/dist/scripts/agents/claude-desktop.ts +39 -0
  152. package/dist/scripts/agents/cline.d.ts +22 -0
  153. package/dist/scripts/agents/cline.d.ts.map +1 -0
  154. package/dist/scripts/agents/cline.js +35 -0
  155. package/dist/scripts/agents/cline.js.map +1 -0
  156. package/dist/scripts/agents/cline.ts +38 -0
  157. package/dist/scripts/agents/continue.d.ts +20 -0
  158. package/dist/scripts/agents/continue.d.ts.map +1 -0
  159. package/dist/scripts/agents/continue.js +35 -0
  160. package/dist/scripts/agents/continue.js.map +1 -0
  161. package/dist/scripts/agents/continue.ts +38 -0
  162. package/dist/scripts/agents/cursor.d.ts +27 -0
  163. package/dist/scripts/agents/cursor.d.ts.map +1 -0
  164. package/dist/scripts/agents/cursor.js +38 -0
  165. package/dist/scripts/agents/cursor.js.map +1 -0
  166. package/dist/scripts/agents/cursor.ts +41 -0
  167. package/dist/scripts/cli/config-gen.d.ts +59 -0
  168. package/dist/scripts/cli/config-gen.d.ts.map +1 -0
  169. package/dist/scripts/cli/config-gen.js +156 -0
  170. package/dist/scripts/cli/config-gen.js.map +1 -0
  171. package/dist/scripts/cli/config-gen.ts +164 -0
  172. package/dist/scripts/cli/detect.d.ts +42 -0
  173. package/dist/scripts/cli/detect.d.ts.map +1 -0
  174. package/dist/scripts/cli/detect.js +131 -0
  175. package/dist/scripts/cli/detect.js.map +1 -0
  176. package/dist/scripts/cli/detect.ts +162 -0
  177. package/dist/scripts/cli/install.d.ts +31 -0
  178. package/dist/scripts/cli/install.d.ts.map +1 -0
  179. package/dist/scripts/cli/install.js +125 -0
  180. package/dist/scripts/cli/install.js.map +1 -0
  181. package/dist/scripts/cli/install.ts +157 -0
  182. package/dist/scripts/cli/status.d.ts +8 -0
  183. package/dist/scripts/cli/status.d.ts.map +1 -0
  184. package/dist/scripts/cli/status.js +39 -0
  185. package/dist/scripts/cli/status.js.map +1 -0
  186. package/dist/scripts/cli/status.ts +48 -0
  187. package/dist/scripts/cli/uninstall.d.ts +22 -0
  188. package/dist/scripts/cli/uninstall.d.ts.map +1 -0
  189. package/dist/scripts/cli/uninstall.js +141 -0
  190. package/dist/scripts/cli/uninstall.js.map +1 -0
  191. package/dist/scripts/cli/uninstall.ts +157 -0
  192. package/dist/scripts/cli.d.ts +23 -0
  193. package/dist/scripts/cli.d.ts.map +1 -0
  194. package/dist/scripts/cli.js +166 -0
  195. package/dist/scripts/cli.js.map +1 -0
  196. package/dist/scripts/cli.ts +173 -0
  197. package/dist/services/classifier/index.d.ts +36 -0
  198. package/dist/services/classifier/index.d.ts.map +1 -0
  199. package/dist/services/classifier/index.js +104 -0
  200. package/dist/services/classifier/index.js.map +1 -0
  201. package/dist/services/classifier/llm.d.ts +37 -0
  202. package/dist/services/classifier/llm.d.ts.map +1 -0
  203. package/dist/services/classifier/llm.js +119 -0
  204. package/dist/services/classifier/llm.js.map +1 -0
  205. package/dist/services/classifier/rules.d.ts +22 -0
  206. package/dist/services/classifier/rules.d.ts.map +1 -0
  207. package/dist/services/classifier/rules.js +98 -0
  208. package/dist/services/classifier/rules.js.map +1 -0
  209. package/dist/services/compressor/index.d.ts +3 -0
  210. package/dist/services/compressor/index.d.ts.map +1 -0
  211. package/dist/services/compressor/index.js +3 -0
  212. package/dist/services/compressor/index.js.map +1 -0
  213. package/dist/services/compressor/threshold.d.ts +35 -0
  214. package/dist/services/compressor/threshold.d.ts.map +1 -0
  215. package/dist/services/compressor/threshold.js +60 -0
  216. package/dist/services/compressor/threshold.js.map +1 -0
  217. package/dist/services/compressor/trigger.d.ts +24 -0
  218. package/dist/services/compressor/trigger.d.ts.map +1 -0
  219. package/dist/services/compressor/trigger.js +91 -0
  220. package/dist/services/compressor/trigger.js.map +1 -0
  221. package/dist/services/constraint-extractor.d.ts +25 -0
  222. package/dist/services/constraint-extractor.d.ts.map +1 -0
  223. package/dist/services/constraint-extractor.js +97 -0
  224. package/dist/services/constraint-extractor.js.map +1 -0
  225. package/dist/services/database-health.d.ts +22 -0
  226. package/dist/services/database-health.d.ts.map +1 -0
  227. package/dist/services/database-health.js +122 -0
  228. package/dist/services/database-health.js.map +1 -0
  229. package/dist/services/embedding-fixed.d.ts +9 -0
  230. package/dist/services/embedding-fixed.d.ts.map +1 -0
  231. package/dist/services/embedding-fixed.js +70 -0
  232. package/dist/services/embedding-fixed.js.map +1 -0
  233. package/dist/services/embedding-provider.d.ts +79 -0
  234. package/dist/services/embedding-provider.d.ts.map +1 -0
  235. package/dist/services/embedding-provider.js +229 -0
  236. package/dist/services/embedding-provider.js.map +1 -0
  237. package/dist/services/embedding.d.ts +17 -0
  238. package/dist/services/embedding.d.ts.map +1 -0
  239. package/dist/services/embedding.js +99 -0
  240. package/dist/services/embedding.js.map +1 -0
  241. package/dist/services/hnsw-index.d.ts +76 -0
  242. package/dist/services/hnsw-index.d.ts.map +1 -0
  243. package/dist/services/hnsw-index.js +301 -0
  244. package/dist/services/hnsw-index.js.map +1 -0
  245. package/dist/services/llm.d.ts +39 -0
  246. package/dist/services/llm.d.ts.map +1 -0
  247. package/dist/services/llm.js +207 -0
  248. package/dist/services/llm.js.map +1 -0
  249. package/dist/services/memory-tiers.d.ts +75 -0
  250. package/dist/services/memory-tiers.d.ts.map +1 -0
  251. package/dist/services/memory-tiers.js +275 -0
  252. package/dist/services/memory-tiers.js.map +1 -0
  253. package/dist/services/memory.d.ts +33 -0
  254. package/dist/services/memory.d.ts.map +1 -0
  255. package/dist/services/memory.js +209 -0
  256. package/dist/services/memory.js.map +1 -0
  257. package/dist/services/multi-agent-sharing.d.ts +83 -0
  258. package/dist/services/multi-agent-sharing.d.ts.map +1 -0
  259. package/dist/services/multi-agent-sharing.js +278 -0
  260. package/dist/services/multi-agent-sharing.js.map +1 -0
  261. package/dist/services/reranker.d.ts +88 -0
  262. package/dist/services/reranker.d.ts.map +1 -0
  263. package/dist/services/reranker.js +234 -0
  264. package/dist/services/reranker.js.map +1 -0
  265. package/dist/services/triple-extractor.d.ts +35 -0
  266. package/dist/services/triple-extractor.d.ts.map +1 -0
  267. package/dist/services/triple-extractor.js +293 -0
  268. package/dist/services/triple-extractor.js.map +1 -0
  269. package/dist/services/vector-provider.d.ts +40 -0
  270. package/dist/services/vector-provider.d.ts.map +1 -0
  271. package/dist/services/vector-provider.js +225 -0
  272. package/dist/services/vector-provider.js.map +1 -0
  273. package/dist/utils/after-chain-executor.d.ts +26 -0
  274. package/dist/utils/after-chain-executor.d.ts.map +1 -0
  275. package/dist/utils/after-chain-executor.js +135 -0
  276. package/dist/utils/after-chain-executor.js.map +1 -0
  277. package/dist/utils/after-chain.d.ts +94 -0
  278. package/dist/utils/after-chain.d.ts.map +1 -0
  279. package/dist/utils/after-chain.js +155 -0
  280. package/dist/utils/after-chain.js.map +1 -0
  281. package/dist/utils/db.d.ts +29 -0
  282. package/dist/utils/db.d.ts.map +1 -0
  283. package/dist/utils/db.js +201 -0
  284. package/dist/utils/db.js.map +1 -0
  285. package/dist/utils/encryption.d.ts +87 -0
  286. package/dist/utils/encryption.d.ts.map +1 -0
  287. package/dist/utils/encryption.js +175 -0
  288. package/dist/utils/encryption.js.map +1 -0
  289. package/dist/utils/errors.d.ts +35 -0
  290. package/dist/utils/errors.d.ts.map +1 -0
  291. package/dist/utils/errors.js +56 -0
  292. package/dist/utils/errors.js.map +1 -0
  293. package/dist/utils/logger.d.ts +27 -0
  294. package/dist/utils/logger.d.ts.map +1 -0
  295. package/dist/utils/logger.js +177 -0
  296. package/dist/utils/logger.js.map +1 -0
  297. package/dist/utils/priority.d.ts +26 -0
  298. package/dist/utils/priority.d.ts.map +1 -0
  299. package/dist/utils/priority.js +43 -0
  300. package/dist/utils/priority.js.map +1 -0
  301. package/dist/utils/watchdog.d.ts +57 -0
  302. package/dist/utils/watchdog.d.ts.map +1 -0
  303. package/dist/utils/watchdog.js +164 -0
  304. package/dist/utils/watchdog.js.map +1 -0
  305. package/package.json +78 -0
@@ -0,0 +1,87 @@
1
+ /**
2
+ * AES-256-GCM Encryption Utilities
3
+ * Provides at-rest encryption for sensitive memory content
4
+ */
5
+ export interface EncryptionKey {
6
+ key: Buffer;
7
+ keyId: string;
8
+ createdAt: Date;
9
+ }
10
+ export interface EncryptedData {
11
+ ciphertext: string;
12
+ iv: string;
13
+ tag: string;
14
+ keyId: string;
15
+ }
16
+ export interface EncryptedField {
17
+ field: string;
18
+ encryptedData: EncryptedData;
19
+ }
20
+ declare const keyStore: Map<string, EncryptionKey>;
21
+ /**
22
+ * Generate a new encryption key
23
+ */
24
+ export declare function generateEncryptionKey(keyId?: string): EncryptionKey;
25
+ /**
26
+ * Get an encryption key by ID
27
+ */
28
+ export declare function getEncryptionKey(keyId: string): EncryptionKey | null;
29
+ /**
30
+ * Derive a key from a password (PBKDF2)
31
+ */
32
+ export declare function deriveKeyFromPassword(password: string, salt?: Buffer): {
33
+ key: Buffer;
34
+ salt: Buffer;
35
+ };
36
+ /**
37
+ * Encrypt data with AES-256-GCM
38
+ */
39
+ export declare function encrypt(plaintext: string, key: Buffer): EncryptedData;
40
+ /**
41
+ * Encrypt data with a specific key
42
+ */
43
+ export declare function encryptWithKey(plaintext: string, encryptionKey: EncryptionKey): EncryptedData;
44
+ /**
45
+ * Decrypt data with AES-256-GCM
46
+ */
47
+ export declare function decrypt(encryptedData: EncryptedData, key: Buffer): string;
48
+ /**
49
+ * Decrypt with key lookup
50
+ */
51
+ export declare function decryptWithKeyId(encryptedData: EncryptedData): string | null;
52
+ /**
53
+ * Encrypt multiple fields in an object
54
+ */
55
+ export declare function encryptFields<T extends Record<string, unknown>>(data: T, fieldsToEncrypt: (keyof T)[], key: Buffer): T & {
56
+ _encrypted: string[];
57
+ };
58
+ /**
59
+ * Decrypt multiple fields in an object
60
+ */
61
+ export declare function decryptFields<T extends Record<string, unknown>>(data: T, key: Buffer): T;
62
+ /**
63
+ * Hash data for integrity verification
64
+ */
65
+ export declare function hashData(data: string): string;
66
+ /**
67
+ * Verify data integrity
68
+ */
69
+ export declare function verifyIntegrity(data: string, expectedHash: string): boolean;
70
+ /**
71
+ * Generate a secure random string
72
+ */
73
+ export declare function generateSecureToken(length?: number): string;
74
+ /**
75
+ * Key rotation support
76
+ */
77
+ export interface KeyRotationResult {
78
+ newKeyId: string;
79
+ reEncryptedCount: number;
80
+ failedIds: string[];
81
+ }
82
+ export declare function rotateEncryptionKey(oldKeyId: string, fieldsToReencrypt: Array<{
83
+ id: string;
84
+ encryptedData: EncryptedData;
85
+ }>, newKey: EncryptionKey): KeyRotationResult;
86
+ export { keyStore };
87
+ //# sourceMappingURL=encryption.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encryption.d.ts","sourceRoot":"","sources":["../../src/utils/encryption.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,aAAa,CAAC;CAC9B;AAGD,QAAA,MAAM,QAAQ,4BAAmC,CAAC;AAElD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,aAAa,CAanE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAEpE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAKpG;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,aAAa,CAerE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,GAAG,aAAa,CAI7F;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,aAAa,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAYzE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,aAAa,EAAE,aAAa,GAAG,MAAM,GAAG,IAAI,CAW5E;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7D,IAAI,EAAE,CAAC,EACP,eAAe,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,EAC5B,GAAG,EAAE,MAAM,GACV,CAAC,GAAG;IAAE,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,CAiB9B;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7D,IAAI,EAAE,CAAC,EACP,GAAG,EAAE,MAAM,GACV,CAAC,CAsBH;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAG3E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,GAAE,MAAW,GAAG,MAAM,CAE/D;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,iBAAiB,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,aAAa,CAAA;CAAE,CAAC,EACtE,MAAM,EAAE,aAAa,GACpB,iBAAiB,CA+BnB;AAGD,OAAO,EAAE,QAAQ,EAAE,CAAC"}
@@ -0,0 +1,175 @@
1
+ /**
2
+ * AES-256-GCM Encryption Utilities
3
+ * Provides at-rest encryption for sensitive memory content
4
+ */
5
+ import { createCipheriv, createDecipheriv, randomBytes, createHash } from 'crypto';
6
+ // Key management
7
+ const keyStore = new Map();
8
+ /**
9
+ * Generate a new encryption key
10
+ */
11
+ export function generateEncryptionKey(keyId) {
12
+ const id = keyId || `key-${Date.now()}-${randomBytes(4).toString('hex')}`;
13
+ const key = randomBytes(32); // 256 bits for AES-256
14
+ const encryptionKey = {
15
+ key,
16
+ keyId: id,
17
+ createdAt: new Date()
18
+ };
19
+ keyStore.set(id, encryptionKey);
20
+ return encryptionKey;
21
+ }
22
+ /**
23
+ * Get an encryption key by ID
24
+ */
25
+ export function getEncryptionKey(keyId) {
26
+ return keyStore.get(keyId) || null;
27
+ }
28
+ /**
29
+ * Derive a key from a password (PBKDF2)
30
+ */
31
+ export function deriveKeyFromPassword(password, salt) {
32
+ const saltBytes = salt || randomBytes(32);
33
+ const key = createHash('sha256').update(password + saltBytes.toString('hex')).digest();
34
+ return { key, salt: saltBytes };
35
+ }
36
+ /**
37
+ * Encrypt data with AES-256-GCM
38
+ */
39
+ export function encrypt(plaintext, key) {
40
+ const iv = randomBytes(12); // 96 bits for GCM
41
+ const cipher = createCipheriv('aes-256-gcm', key, iv);
42
+ let ciphertext = cipher.update(plaintext, 'utf8', 'base64');
43
+ ciphertext += cipher.final('base64');
44
+ const tag = cipher.getAuthTag();
45
+ return {
46
+ ciphertext,
47
+ iv: iv.toString('base64'),
48
+ tag: tag.toString('base64'),
49
+ keyId: ''
50
+ };
51
+ }
52
+ /**
53
+ * Encrypt data with a specific key
54
+ */
55
+ export function encryptWithKey(plaintext, encryptionKey) {
56
+ const result = encrypt(plaintext, encryptionKey.key);
57
+ result.keyId = encryptionKey.keyId;
58
+ return result;
59
+ }
60
+ /**
61
+ * Decrypt data with AES-256-GCM
62
+ */
63
+ export function decrypt(encryptedData, key) {
64
+ const iv = Buffer.from(encryptedData.iv, 'base64');
65
+ const tag = Buffer.from(encryptedData.tag, 'base64');
66
+ const ciphertext = Buffer.from(encryptedData.ciphertext, 'base64');
67
+ const decipher = createDecipheriv('aes-256-gcm', key, iv);
68
+ decipher.setAuthTag(tag);
69
+ let plaintext = decipher.update(ciphertext);
70
+ plaintext = Buffer.concat([plaintext, decipher.final()]);
71
+ return plaintext.toString('utf8');
72
+ }
73
+ /**
74
+ * Decrypt with key lookup
75
+ */
76
+ export function decryptWithKeyId(encryptedData) {
77
+ if (!encryptedData.keyId) {
78
+ return null;
79
+ }
80
+ const key = getEncryptionKey(encryptedData.keyId);
81
+ if (!key) {
82
+ return null;
83
+ }
84
+ return decrypt(encryptedData, key.key);
85
+ }
86
+ /**
87
+ * Encrypt multiple fields in an object
88
+ */
89
+ export function encryptFields(data, fieldsToEncrypt, key) {
90
+ const encrypted = {};
91
+ for (const field of fieldsToEncrypt) {
92
+ const value = data[field];
93
+ if (typeof value === 'string') {
94
+ encrypted[field] = encrypt(value, key);
95
+ }
96
+ }
97
+ return {
98
+ ...data,
99
+ _encrypted: fieldsToEncrypt.map(f => String(f)),
100
+ ...Object.fromEntries(Object.entries(encrypted).map(([k, v]) => [k, JSON.stringify(v)]))
101
+ };
102
+ }
103
+ /**
104
+ * Decrypt multiple fields in an object
105
+ */
106
+ export function decryptFields(data, key) {
107
+ const encryptedFields = data._encrypted || [];
108
+ const decrypted = { ...data };
109
+ for (const field of encryptedFields) {
110
+ const encryptedValue = data[field];
111
+ if (typeof encryptedValue === 'string') {
112
+ try {
113
+ const encryptedData = JSON.parse(encryptedValue);
114
+ decrypted[field] = decrypt(encryptedData, key);
115
+ }
116
+ catch {
117
+ // Decryption failed, keep original value
118
+ }
119
+ }
120
+ }
121
+ // Remove encryption metadata
122
+ const decryptedObj = decrypted;
123
+ delete decryptedObj['_encrypted'];
124
+ return decrypted;
125
+ }
126
+ /**
127
+ * Hash data for integrity verification
128
+ */
129
+ export function hashData(data) {
130
+ return createHash('sha256').update(data).digest('hex');
131
+ }
132
+ /**
133
+ * Verify data integrity
134
+ */
135
+ export function verifyIntegrity(data, expectedHash) {
136
+ const actualHash = hashData(data);
137
+ return actualHash === expectedHash;
138
+ }
139
+ /**
140
+ * Generate a secure random string
141
+ */
142
+ export function generateSecureToken(length = 32) {
143
+ return randomBytes(Math.ceil(length * 0.75)).toString('base64').slice(0, length);
144
+ }
145
+ export function rotateEncryptionKey(oldKeyId, fieldsToReencrypt, newKey) {
146
+ const failedIds = [];
147
+ let reEncryptedCount = 0;
148
+ for (const item of fieldsToReencrypt) {
149
+ try {
150
+ // Decrypt with old key
151
+ const oldKey = getEncryptionKey(oldKeyId);
152
+ if (!oldKey) {
153
+ failedIds.push(item.id);
154
+ continue;
155
+ }
156
+ const plaintext = decrypt(item.encryptedData, oldKey.key);
157
+ // Re-encrypt with new key
158
+ // In a real implementation, update the stored encrypted data here
159
+ // updateEncryptedField(item.id, newEncrypted);
160
+ void plaintext; // Mark as used
161
+ reEncryptedCount++;
162
+ }
163
+ catch {
164
+ failedIds.push(item.id);
165
+ }
166
+ }
167
+ return {
168
+ newKeyId: newKey.keyId,
169
+ reEncryptedCount,
170
+ failedIds
171
+ };
172
+ }
173
+ // Export key management functions
174
+ export { keyStore };
175
+ //# sourceMappingURL=encryption.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encryption.js","sourceRoot":"","sources":["../../src/utils/encryption.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAoBnF,iBAAiB;AACjB,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAyB,CAAC;AAElD;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,MAAM,EAAE,GAAG,KAAK,IAAI,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;IAC1E,MAAM,GAAG,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,uBAAuB;IAEpD,MAAM,aAAa,GAAkB;QACnC,GAAG;QACH,KAAK,EAAE,EAAE;QACT,SAAS,EAAE,IAAI,IAAI,EAAE;KACtB,CAAC;IAEF,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;IAEhC,OAAO,aAAa,CAAC;AACvB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,OAAO,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAAgB,EAAE,IAAa;IACnE,MAAM,SAAS,GAAG,IAAI,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC;IAC1C,MAAM,GAAG,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAEvF,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AAClC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,OAAO,CAAC,SAAiB,EAAE,GAAW;IACpD,MAAM,EAAE,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,kBAAkB;IAC9C,MAAM,MAAM,GAAG,cAAc,CAAC,aAAa,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IAEtD,IAAI,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC5D,UAAU,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAErC,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;IAEhC,OAAO;QACL,UAAU;QACV,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACzB,GAAG,EAAE,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC3B,KAAK,EAAE,EAAE;KACV,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,SAAiB,EAAE,aAA4B;IAC5E,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;IACrD,MAAM,CAAC,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC;IACnC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,OAAO,CAAC,aAA4B,EAAE,GAAW;IAC/D,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;IACnD,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACrD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAEnE,MAAM,QAAQ,GAAG,gBAAgB,CAAC,aAAa,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IAC1D,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAEzB,IAAI,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC5C,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAEzD,OAAO,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,aAA4B;IAC3D,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,GAAG,GAAG,gBAAgB,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAClD,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAC3B,IAAO,EACP,eAA4B,EAC5B,GAAW;IAEX,MAAM,SAAS,GAAkC,EAAE,CAAC;IAEpD,KAAK,MAAM,KAAK,IAAI,eAAe,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,SAAS,CAAC,KAAe,CAAC,GAAG,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED,OAAO;QACL,GAAG,IAAI;QACP,UAAU,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAwB;QACtE,GAAG,MAAM,CAAC,WAAW,CACnB,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAClE;KAC8B,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAC3B,IAAO,EACP,GAAW;IAEX,MAAM,eAAe,GAAI,IAAI,CAAC,UAAkC,IAAI,EAAE,CAAC;IAEvE,MAAM,SAAS,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;IAE9B,KAAK,MAAM,KAAK,IAAI,eAAe,EAAE,CAAC;QACpC,MAAM,cAAc,GAAG,IAAI,CAAC,KAAgB,CAAC,CAAC;QAC9C,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE,CAAC;YACvC,IAAI,CAAC;gBACH,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAkB,CAAC;gBACjE,SAAqC,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;YAC9E,CAAC;YAAC,MAAM,CAAC;gBACP,yCAAyC;YAC3C,CAAC;QACH,CAAC;IACH,CAAC;IAED,6BAA6B;IAC7B,MAAM,YAAY,GAAG,SAAoC,CAAC;IAC1D,OAAO,YAAY,CAAC,YAAY,CAAC,CAAC;IAElC,OAAO,SAAc,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACzD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,YAAoB;IAChE,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAClC,OAAO,UAAU,KAAK,YAAY,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,SAAiB,EAAE;IACrD,OAAO,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AACnF,CAAC;AAWD,MAAM,UAAU,mBAAmB,CACjC,QAAgB,EAChB,iBAAsE,EACtE,MAAqB;IAErB,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,IAAI,gBAAgB,GAAG,CAAC,CAAC;IAEzB,KAAK,MAAM,IAAI,IAAI,iBAAiB,EAAE,CAAC;QACnC,IAAI,CAAC;YACH,uBAAuB;YACvB,MAAM,MAAM,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACxB,SAAS;YACX,CAAC;YAED,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;YAE1D,0BAA0B;YAC1B,kEAAkE;YAClE,+CAA+C;YAE/C,KAAK,SAAS,CAAC,CAAC,eAAe;YAC/B,gBAAgB,EAAE,CAAC;QACrB,CAAC;QAAC,MAAM,CAAC;YACT,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,MAAM,CAAC,KAAK;QACtB,gBAAgB;QAChB,SAAS;KACV,CAAC;AACJ,CAAC;AAED,kCAAkC;AAClC,OAAO,EAAE,QAAQ,EAAE,CAAC"}
@@ -0,0 +1,35 @@
1
+ export declare class ContextGatekeeperError extends Error {
2
+ readonly code: string;
3
+ readonly cause?: unknown | undefined;
4
+ constructor(message: string, code: string, cause?: unknown | undefined);
5
+ }
6
+ export declare class DatabaseError extends ContextGatekeeperError {
7
+ constructor(message: string, cause?: unknown);
8
+ }
9
+ export declare class LLMError extends ContextGatekeeperError {
10
+ constructor(message: string, cause?: unknown);
11
+ }
12
+ export declare class MCPError extends ContextGatekeeperError {
13
+ constructor(message: string, cause?: unknown);
14
+ }
15
+ export declare class CompressionError extends ContextGatekeeperError {
16
+ constructor(message: string, cause?: unknown);
17
+ }
18
+ export declare class MemoryNotFoundError extends ContextGatekeeperError {
19
+ constructor(memoryId: string);
20
+ }
21
+ export declare class ProjectNotFoundError extends ContextGatekeeperError {
22
+ constructor(projectId: string);
23
+ }
24
+ export declare enum RecoveryStrategy {
25
+ FALLBACK_TO_MEMORY = "FALLBACK_TO_MEMORY",// DB -> Memory
26
+ FALLBACK_TO_RULES = "FALLBACK_TO_RULES",// LLM -> Rules
27
+ GRACEFUL_DEGRADATION = "GRACEFUL_DEGRADATION",// Service -> Silent
28
+ RETAIN_ORIGINAL = "RETAIN_ORIGINAL"
29
+ }
30
+ export interface ErrorContext {
31
+ strategy: RecoveryStrategy;
32
+ fallbackValue?: unknown;
33
+ shouldLog: boolean;
34
+ }
35
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAEA,qBAAa,sBAAuB,SAAQ,KAAK;aAG7B,IAAI,EAAE,MAAM;aACZ,KAAK,CAAC,EAAE,OAAO;gBAF/B,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,OAAO,YAAA;CAKlC;AAED,qBAAa,aAAc,SAAQ,sBAAsB;gBAC3C,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO;CAI7C;AAED,qBAAa,QAAS,SAAQ,sBAAsB;gBACtC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO;CAI7C;AAED,qBAAa,QAAS,SAAQ,sBAAsB;gBACtC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO;CAI7C;AAED,qBAAa,gBAAiB,SAAQ,sBAAsB;gBAC9C,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO;CAI7C;AAED,qBAAa,mBAAoB,SAAQ,sBAAsB;gBACjD,QAAQ,EAAE,MAAM;CAI7B;AAED,qBAAa,oBAAqB,SAAQ,sBAAsB;gBAClD,SAAS,EAAE,MAAM;CAI9B;AAGD,oBAAY,gBAAgB;IAC1B,kBAAkB,uBAAuB,CAAO,eAAe;IAC/D,iBAAiB,sBAAsB,CAAS,eAAe;IAC/D,oBAAoB,yBAAyB,CAAG,oBAAoB;IACpE,eAAe,oBAAoB;CACpC;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;CACpB"}
@@ -0,0 +1,56 @@
1
+ // Custom error classes for Context Gatekeeper
2
+ export class ContextGatekeeperError extends Error {
3
+ code;
4
+ cause;
5
+ constructor(message, code, cause) {
6
+ super(message);
7
+ this.code = code;
8
+ this.cause = cause;
9
+ this.name = 'ContextGatekeeperError';
10
+ }
11
+ }
12
+ export class DatabaseError extends ContextGatekeeperError {
13
+ constructor(message, cause) {
14
+ super(message, 'DATABASE_ERROR', cause);
15
+ this.name = 'DatabaseError';
16
+ }
17
+ }
18
+ export class LLMError extends ContextGatekeeperError {
19
+ constructor(message, cause) {
20
+ super(message, 'LLM_ERROR', cause);
21
+ this.name = 'LLMError';
22
+ }
23
+ }
24
+ export class MCPError extends ContextGatekeeperError {
25
+ constructor(message, cause) {
26
+ super(message, 'MCP_ERROR', cause);
27
+ this.name = 'MCPError';
28
+ }
29
+ }
30
+ export class CompressionError extends ContextGatekeeperError {
31
+ constructor(message, cause) {
32
+ super(message, 'COMPRESSION_ERROR', cause);
33
+ this.name = 'CompressionError';
34
+ }
35
+ }
36
+ export class MemoryNotFoundError extends ContextGatekeeperError {
37
+ constructor(memoryId) {
38
+ super(`Memory not found: ${memoryId}`, 'MEMORY_NOT_FOUND');
39
+ this.name = 'MemoryNotFoundError';
40
+ }
41
+ }
42
+ export class ProjectNotFoundError extends ContextGatekeeperError {
43
+ constructor(projectId) {
44
+ super(`Project not found: ${projectId}`, 'PROJECT_NOT_FOUND');
45
+ this.name = 'ProjectNotFoundError';
46
+ }
47
+ }
48
+ // Error recovery strategies
49
+ export var RecoveryStrategy;
50
+ (function (RecoveryStrategy) {
51
+ RecoveryStrategy["FALLBACK_TO_MEMORY"] = "FALLBACK_TO_MEMORY";
52
+ RecoveryStrategy["FALLBACK_TO_RULES"] = "FALLBACK_TO_RULES";
53
+ RecoveryStrategy["GRACEFUL_DEGRADATION"] = "GRACEFUL_DEGRADATION";
54
+ RecoveryStrategy["RETAIN_ORIGINAL"] = "RETAIN_ORIGINAL"; // Compression -> Keep original
55
+ })(RecoveryStrategy || (RecoveryStrategy = {}));
56
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAE9C,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IAG7B;IACA;IAHlB,YACE,OAAe,EACC,IAAY,EACZ,KAAe;QAE/B,KAAK,CAAC,OAAO,CAAC,CAAC;QAHC,SAAI,GAAJ,IAAI,CAAQ;QACZ,UAAK,GAAL,KAAK,CAAU;QAG/B,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;IACvC,CAAC;CACF;AAED,MAAM,OAAO,aAAc,SAAQ,sBAAsB;IACvD,YAAY,OAAe,EAAE,KAAe;QAC1C,KAAK,CAAC,OAAO,EAAE,gBAAgB,EAAE,KAAK,CAAC,CAAC;QACxC,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF;AAED,MAAM,OAAO,QAAS,SAAQ,sBAAsB;IAClD,YAAY,OAAe,EAAE,KAAe;QAC1C,KAAK,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;QACnC,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;IACzB,CAAC;CACF;AAED,MAAM,OAAO,QAAS,SAAQ,sBAAsB;IAClD,YAAY,OAAe,EAAE,KAAe;QAC1C,KAAK,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;QACnC,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;IACzB,CAAC;CACF;AAED,MAAM,OAAO,gBAAiB,SAAQ,sBAAsB;IAC1D,YAAY,OAAe,EAAE,KAAe;QAC1C,KAAK,CAAC,OAAO,EAAE,mBAAmB,EAAE,KAAK,CAAC,CAAC;QAC3C,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,sBAAsB;IAC7D,YAAY,QAAgB;QAC1B,KAAK,CAAC,qBAAqB,QAAQ,EAAE,EAAE,kBAAkB,CAAC,CAAC;QAC3D,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAED,MAAM,OAAO,oBAAqB,SAAQ,sBAAsB;IAC9D,YAAY,SAAiB;QAC3B,KAAK,CAAC,sBAAsB,SAAS,EAAE,EAAE,mBAAmB,CAAC,CAAC;QAC9D,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF;AAED,4BAA4B;AAC5B,MAAM,CAAN,IAAY,gBAKX;AALD,WAAY,gBAAgB;IAC1B,6DAAyC,CAAA;IACzC,2DAAuC,CAAA;IACvC,iEAA6C,CAAA;IAC7C,uDAAmC,CAAA,CAAa,+BAA+B;AACjF,CAAC,EALW,gBAAgB,KAAhB,gBAAgB,QAK3B"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Structured JSON Logger
3
+ *
4
+ * Features:
5
+ * - JSON output to stdout with configurable log levels
6
+ * - CG_LOG_LEVEL env var controls minimum level (trace, debug, info, warn, error)
7
+ * - CG_LOG_PRETTY env var enables pretty-printed output
8
+ * - CG_LOG_TO_FILE env var enables file-based logging
9
+ * - CG_LOG_FILE_PATH env var for custom file path
10
+ * - Graceful degradation on serialization failure
11
+ */
12
+ export type LogLevel = 'trace' | 'debug' | 'info' | 'warn' | 'error';
13
+ export declare class Logger {
14
+ private component?;
15
+ constructor(component?: string);
16
+ private log;
17
+ trace(message: string, data?: Record<string, unknown>): void;
18
+ debug(message: string, data?: Record<string, unknown>): void;
19
+ info(message: string, data?: Record<string, unknown>): void;
20
+ warn(message: string, data?: Record<string, unknown>): void;
21
+ error(message: string, dataOrError?: Record<string, unknown> | unknown): void;
22
+ /** Log a tool invocation with timing */
23
+ toolInvocation(toolName: string, latencyMs: number, success: boolean, error?: unknown): void;
24
+ }
25
+ export declare const logger: Logger;
26
+ export declare function createLogger(component: string): Logger;
27
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAsHrE,qBAAa,MAAM;IACjB,OAAO,CAAC,SAAS,CAAC,CAAS;gBAEf,SAAS,CAAC,EAAE,MAAM;IAI9B,OAAO,CAAC,GAAG;IAuBX,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI5D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI5D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI3D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI3D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,GAAG,IAAI;IAmB7E,wCAAwC;IACxC,cAAc,CACZ,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,OAAO,EAChB,KAAK,CAAC,EAAE,OAAO,GACd,IAAI;CAcR;AAGD,eAAO,MAAM,MAAM,QAAe,CAAC;AAGnC,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEtD"}
@@ -0,0 +1,177 @@
1
+ /**
2
+ * Structured JSON Logger
3
+ *
4
+ * Features:
5
+ * - JSON output to stdout with configurable log levels
6
+ * - CG_LOG_LEVEL env var controls minimum level (trace, debug, info, warn, error)
7
+ * - CG_LOG_PRETTY env var enables pretty-printed output
8
+ * - CG_LOG_TO_FILE env var enables file-based logging
9
+ * - CG_LOG_FILE_PATH env var for custom file path
10
+ * - Graceful degradation on serialization failure
11
+ */
12
+ import { appendFileSync } from 'fs';
13
+ const LOG_LEVELS = {
14
+ trace: 0,
15
+ debug: 1,
16
+ info: 2,
17
+ warn: 3,
18
+ error: 4,
19
+ };
20
+ const DEFAULT_LEVEL = 'info';
21
+ function parseLogLevel(envValue) {
22
+ if (!envValue)
23
+ return DEFAULT_LEVEL;
24
+ const level = envValue.toLowerCase();
25
+ return LOG_LEVELS[level] !== undefined ? level : DEFAULT_LEVEL;
26
+ }
27
+ function getMinLevel() {
28
+ return parseLogLevel(process.env.CG_LOG_LEVEL);
29
+ }
30
+ function isPrettyPrint() {
31
+ return process.env.CG_LOG_PRETTY === 'true' || process.env.CG_LOG_PRETTY === '1';
32
+ }
33
+ function getLogFilePath() {
34
+ if (process.env.CG_LOG_TO_FILE !== 'true' && process.env.CG_LOG_TO_FILE !== '1') {
35
+ return null;
36
+ }
37
+ return process.env.CG_LOG_FILE_PATH || 'context-gatekeeper.log';
38
+ }
39
+ function serializeError(error) {
40
+ if (error instanceof Error) {
41
+ return {
42
+ name: error.name,
43
+ message: error.message,
44
+ stack: error.stack,
45
+ };
46
+ }
47
+ return {
48
+ name: 'Error',
49
+ message: String(error),
50
+ };
51
+ }
52
+ function serializeErrorForData(error) {
53
+ if (error instanceof Error) {
54
+ return {
55
+ name: error.name,
56
+ message: error.message,
57
+ stack: error.stack,
58
+ ...Object.getOwnPropertyNames(error).reduce((acc, key) => {
59
+ try {
60
+ acc[key] = error[key];
61
+ }
62
+ catch {
63
+ // Skip non-serializable properties
64
+ }
65
+ return acc;
66
+ }, {}),
67
+ };
68
+ }
69
+ return { value: String(error) };
70
+ }
71
+ function shouldLog(level) {
72
+ return LOG_LEVELS[level] >= LOG_LEVELS[getMinLevel()];
73
+ }
74
+ function formatJson(entry, pretty) {
75
+ try {
76
+ if (pretty) {
77
+ return JSON.stringify(entry, null, 2);
78
+ }
79
+ return JSON.stringify(entry);
80
+ }
81
+ catch {
82
+ return JSON.stringify({
83
+ level: 'error',
84
+ timestamp: new Date().toISOString(),
85
+ message: 'Failed to serialize log entry',
86
+ data: { originalMessage: entry.message },
87
+ });
88
+ }
89
+ }
90
+ function output(line) {
91
+ const filePath = getLogFilePath();
92
+ if (filePath) {
93
+ try {
94
+ appendFileSync(filePath, line + '\n');
95
+ }
96
+ catch {
97
+ // Fallback to stdout on file write failure
98
+ process.stdout.write(line + '\n');
99
+ }
100
+ }
101
+ else {
102
+ process.stdout.write(line + '\n');
103
+ }
104
+ }
105
+ export class Logger {
106
+ component;
107
+ constructor(component) {
108
+ this.component = component;
109
+ }
110
+ log(level, message, data) {
111
+ if (!shouldLog(level))
112
+ return;
113
+ const entry = {
114
+ level,
115
+ timestamp: new Date().toISOString(),
116
+ message,
117
+ };
118
+ if (this.component) {
119
+ entry.data = { ...data, component: this.component };
120
+ }
121
+ else if (data) {
122
+ entry.data = data;
123
+ }
124
+ const pretty = isPrettyPrint();
125
+ output(formatJson(entry, pretty));
126
+ }
127
+ trace(message, data) {
128
+ this.log('trace', message, data);
129
+ }
130
+ debug(message, data) {
131
+ this.log('debug', message, data);
132
+ }
133
+ info(message, data) {
134
+ this.log('info', message, data);
135
+ }
136
+ warn(message, data) {
137
+ this.log('warn', message, data);
138
+ }
139
+ error(message, dataOrError) {
140
+ const data = {};
141
+ let extra;
142
+ if (dataOrError instanceof Error || (dataOrError && typeof dataOrError === 'object')) {
143
+ if (dataOrError instanceof Error) {
144
+ data.error = serializeError(dataOrError);
145
+ extra = serializeErrorForData(dataOrError);
146
+ }
147
+ else {
148
+ extra = dataOrError;
149
+ }
150
+ }
151
+ else if (dataOrError) {
152
+ data.error = serializeError(dataOrError);
153
+ }
154
+ const mergedData = extra ? { ...extra, ...data } : data;
155
+ this.log('error', message, Object.keys(mergedData).length > 0 ? mergedData : undefined);
156
+ }
157
+ /** Log a tool invocation with timing */
158
+ toolInvocation(toolName, latencyMs, success, error) {
159
+ const data = {
160
+ tool: toolName,
161
+ latencyMs,
162
+ success,
163
+ };
164
+ if (error) {
165
+ data.error = serializeErrorForData(error);
166
+ }
167
+ const level = success ? 'info' : 'error';
168
+ this.log(level, `Tool invocation: ${toolName}`, data);
169
+ }
170
+ }
171
+ // Default logger instance
172
+ export const logger = new Logger();
173
+ // Factory function for component-specific loggers
174
+ export function createLogger(component) {
175
+ return new Logger(component);
176
+ }
177
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { Priority } from '../models/types.js';
2
+ /**
3
+ * Calculate the decay factor based on memory age
4
+ */
5
+ export declare function calculateTimeDecay(createdAt: Date, anchored: boolean): number;
6
+ /**
7
+ * Calculate the priority score for a memory
8
+ *
9
+ * Formula: score = priority_weight * (1 + access_count * 0.1) * time_decay
10
+ *
11
+ * - Anchored memories: weight = 1.0, decay = 1.0 (permanent)
12
+ * - Constraint: weight = 0.8
13
+ * - Decision: weight = 0.6
14
+ * - Preference: weight = 0.4
15
+ * - Fact: weight = 0.2
16
+ */
17
+ export declare function calculatePriorityScore(priority: Priority, accessCount: number, createdAt: Date, anchored: boolean): number;
18
+ /**
19
+ * Get priority weight value
20
+ */
21
+ export declare function getPriorityWeight(priority: Priority): number;
22
+ /**
23
+ * Check if a priority level is high enough for quick matching
24
+ */
25
+ export declare function isHighPriority(priority: Priority): boolean;
26
+ //# sourceMappingURL=priority.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"priority.d.ts","sourceRoot":"","sources":["../../src/utils/priority.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAiE,MAAM,oBAAoB,CAAC;AAE7G;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,GAAG,MAAM,CAU7E;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,IAAI,EACf,QAAQ,EAAE,OAAO,GAChB,MAAM,CAMR;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAE5D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAE1D"}
@@ -0,0 +1,43 @@
1
+ import { PRIORITY_WEIGHTS, ANCHORED_DECAY_FACTOR, DEFAULT_DECAY_FACTOR } from '../models/types.js';
2
+ /**
3
+ * Calculate the decay factor based on memory age
4
+ */
5
+ export function calculateTimeDecay(createdAt, anchored) {
6
+ if (anchored) {
7
+ return ANCHORED_DECAY_FACTOR;
8
+ }
9
+ const now = Date.now();
10
+ const ageInDays = (now - createdAt.getTime()) / (1000 * 60 * 60 * 24);
11
+ // Simple exponential decay: decay_factor^age
12
+ return Math.pow(DEFAULT_DECAY_FACTOR, ageInDays);
13
+ }
14
+ /**
15
+ * Calculate the priority score for a memory
16
+ *
17
+ * Formula: score = priority_weight * (1 + access_count * 0.1) * time_decay
18
+ *
19
+ * - Anchored memories: weight = 1.0, decay = 1.0 (permanent)
20
+ * - Constraint: weight = 0.8
21
+ * - Decision: weight = 0.6
22
+ * - Preference: weight = 0.4
23
+ * - Fact: weight = 0.2
24
+ */
25
+ export function calculatePriorityScore(priority, accessCount, createdAt, anchored) {
26
+ const weight = PRIORITY_WEIGHTS[priority];
27
+ const decay = calculateTimeDecay(createdAt, anchored);
28
+ const accessBonus = 1 + accessCount * 0.1;
29
+ return weight * accessBonus * decay;
30
+ }
31
+ /**
32
+ * Get priority weight value
33
+ */
34
+ export function getPriorityWeight(priority) {
35
+ return PRIORITY_WEIGHTS[priority];
36
+ }
37
+ /**
38
+ * Check if a priority level is high enough for quick matching
39
+ */
40
+ export function isHighPriority(priority) {
41
+ return priority === 'anchored' || priority === 'constraint';
42
+ }
43
+ //# sourceMappingURL=priority.js.map