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.
- package/LICENSE +21 -0
- package/README.md +774 -0
- package/README.zh.md +765 -0
- package/bin/context-gatekeeper-cli.js +60 -0
- package/dist/api/gdpr.d.ts +104 -0
- package/dist/api/gdpr.d.ts.map +1 -0
- package/dist/api/gdpr.js +229 -0
- package/dist/api/gdpr.js.map +1 -0
- package/dist/api/health-check.d.ts +13 -0
- package/dist/api/health-check.d.ts.map +1 -0
- package/dist/api/health-check.js +2 -0
- package/dist/api/health-check.js.map +1 -0
- package/dist/api/index.d.ts +7 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +8 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/observability.d.ts +39 -0
- package/dist/api/observability.d.ts.map +1 -0
- package/dist/api/observability.js +132 -0
- package/dist/api/observability.js.map +1 -0
- package/dist/api/session-manager.d.ts +41 -0
- package/dist/api/session-manager.d.ts.map +1 -0
- package/dist/api/session-manager.js +129 -0
- package/dist/api/session-manager.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/server.d.ts +8 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +613 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools/configure-llm.d.ts +26 -0
- package/dist/mcp/tools/configure-llm.d.ts.map +1 -0
- package/dist/mcp/tools/configure-llm.js +32 -0
- package/dist/mcp/tools/configure-llm.js.map +1 -0
- package/dist/mcp/tools/context-compress.d.ts +15 -0
- package/dist/mcp/tools/context-compress.d.ts.map +1 -0
- package/dist/mcp/tools/context-compress.js +15 -0
- package/dist/mcp/tools/context-compress.js.map +1 -0
- package/dist/mcp/tools/dual-mode-execute.d.ts +78 -0
- package/dist/mcp/tools/dual-mode-execute.d.ts.map +1 -0
- package/dist/mcp/tools/dual-mode-execute.js +299 -0
- package/dist/mcp/tools/dual-mode-execute.js.map +1 -0
- package/dist/mcp/tools/index.d.ts +19 -0
- package/dist/mcp/tools/index.d.ts.map +1 -0
- package/dist/mcp/tools/index.js +20 -0
- package/dist/mcp/tools/index.js.map +1 -0
- package/dist/mcp/tools/intelligent-recall.d.ts +67 -0
- package/dist/mcp/tools/intelligent-recall.d.ts.map +1 -0
- package/dist/mcp/tools/intelligent-recall.js +208 -0
- package/dist/mcp/tools/intelligent-recall.js.map +1 -0
- package/dist/mcp/tools/memory-anchor.d.ts +13 -0
- package/dist/mcp/tools/memory-anchor.d.ts.map +1 -0
- package/dist/mcp/tools/memory-anchor.js +16 -0
- package/dist/mcp/tools/memory-anchor.js.map +1 -0
- package/dist/mcp/tools/memory-delete-batch.d.ts +16 -0
- package/dist/mcp/tools/memory-delete-batch.d.ts.map +1 -0
- package/dist/mcp/tools/memory-delete-batch.js +26 -0
- package/dist/mcp/tools/memory-delete-batch.js.map +1 -0
- package/dist/mcp/tools/memory-extract.d.ts +68 -0
- package/dist/mcp/tools/memory-extract.d.ts.map +1 -0
- package/dist/mcp/tools/memory-extract.js +280 -0
- package/dist/mcp/tools/memory-extract.js.map +1 -0
- package/dist/mcp/tools/memory-recall.d.ts +42 -0
- package/dist/mcp/tools/memory-recall.d.ts.map +1 -0
- package/dist/mcp/tools/memory-recall.js +37 -0
- package/dist/mcp/tools/memory-recall.js.map +1 -0
- package/dist/mcp/tools/memory-report-usage.d.ts +17 -0
- package/dist/mcp/tools/memory-report-usage.d.ts.map +1 -0
- package/dist/mcp/tools/memory-report-usage.js +15 -0
- package/dist/mcp/tools/memory-report-usage.js.map +1 -0
- package/dist/mcp/tools/memory-search.d.ts +43 -0
- package/dist/mcp/tools/memory-search.d.ts.map +1 -0
- package/dist/mcp/tools/memory-search.js +38 -0
- package/dist/mcp/tools/memory-search.js.map +1 -0
- package/dist/mcp/tools/memory-session.d.ts +118 -0
- package/dist/mcp/tools/memory-session.d.ts.map +1 -0
- package/dist/mcp/tools/memory-session.js +113 -0
- package/dist/mcp/tools/memory-session.js.map +1 -0
- package/dist/mcp/tools/memory-stats.d.ts +10 -0
- package/dist/mcp/tools/memory-stats.d.ts.map +1 -0
- package/dist/mcp/tools/memory-stats.js +35 -0
- package/dist/mcp/tools/memory-stats.js.map +1 -0
- package/dist/mcp/tools/memory-store-batch.d.ts +49 -0
- package/dist/mcp/tools/memory-store-batch.d.ts.map +1 -0
- package/dist/mcp/tools/memory-store-batch.js +48 -0
- package/dist/mcp/tools/memory-store-batch.js.map +1 -0
- package/dist/mcp/tools/memory-store.d.ts +37 -0
- package/dist/mcp/tools/memory-store.d.ts.map +1 -0
- package/dist/mcp/tools/memory-store.js +34 -0
- package/dist/mcp/tools/memory-store.js.map +1 -0
- package/dist/mcp/tools/project-create.d.ts +16 -0
- package/dist/mcp/tools/project-create.d.ts.map +1 -0
- package/dist/mcp/tools/project-create.js +14 -0
- package/dist/mcp/tools/project-create.js.map +1 -0
- package/dist/models/types.d.ts +88 -0
- package/dist/models/types.d.ts.map +1 -0
- package/dist/models/types.js +19 -0
- package/dist/models/types.js.map +1 -0
- package/dist/schema/compression.d.ts +7 -0
- package/dist/schema/compression.d.ts.map +1 -0
- package/dist/schema/compression.js +66 -0
- package/dist/schema/compression.js.map +1 -0
- package/dist/schema/fulltext-search.d.ts +10 -0
- package/dist/schema/fulltext-search.d.ts.map +1 -0
- package/dist/schema/fulltext-search.js +73 -0
- package/dist/schema/fulltext-search.js.map +1 -0
- package/dist/schema/index.d.ts +9 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +9 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/schema/knowledge-graph.d.ts +108 -0
- package/dist/schema/knowledge-graph.d.ts.map +1 -0
- package/dist/schema/knowledge-graph.js +372 -0
- package/dist/schema/knowledge-graph.js.map +1 -0
- package/dist/schema/memory-session.d.ts +62 -0
- package/dist/schema/memory-session.d.ts.map +1 -0
- package/dist/schema/memory-session.js +258 -0
- package/dist/schema/memory-session.js.map +1 -0
- package/dist/schema/memory.d.ts +84 -0
- package/dist/schema/memory.d.ts.map +1 -0
- package/dist/schema/memory.js +622 -0
- package/dist/schema/memory.js.map +1 -0
- package/dist/schema/project.d.ts +8 -0
- package/dist/schema/project.d.ts.map +1 -0
- package/dist/schema/project.js +68 -0
- package/dist/schema/project.js.map +1 -0
- package/dist/schema/schema-init.d.ts +2 -0
- package/dist/schema/schema-init.d.ts.map +1 -0
- package/dist/schema/schema-init.js +199 -0
- package/dist/schema/schema-init.js.map +1 -0
- package/dist/schema/vector-index.d.ts +28 -0
- package/dist/schema/vector-index.d.ts.map +1 -0
- package/dist/schema/vector-index.js +179 -0
- package/dist/schema/vector-index.js.map +1 -0
- package/dist/scripts/agents/base.d.ts +89 -0
- package/dist/scripts/agents/base.d.ts.map +1 -0
- package/dist/scripts/agents/base.js +148 -0
- package/dist/scripts/agents/base.js.map +1 -0
- package/dist/scripts/agents/base.ts +193 -0
- package/dist/scripts/agents/claude-code.d.ts +21 -0
- package/dist/scripts/agents/claude-code.d.ts.map +1 -0
- package/dist/scripts/agents/claude-code.js +33 -0
- package/dist/scripts/agents/claude-code.js.map +1 -0
- package/dist/scripts/agents/claude-code.ts +36 -0
- package/dist/scripts/agents/claude-desktop.d.ts +25 -0
- package/dist/scripts/agents/claude-desktop.d.ts.map +1 -0
- package/dist/scripts/agents/claude-desktop.js +36 -0
- package/dist/scripts/agents/claude-desktop.js.map +1 -0
- package/dist/scripts/agents/claude-desktop.ts +39 -0
- package/dist/scripts/agents/cline.d.ts +22 -0
- package/dist/scripts/agents/cline.d.ts.map +1 -0
- package/dist/scripts/agents/cline.js +35 -0
- package/dist/scripts/agents/cline.js.map +1 -0
- package/dist/scripts/agents/cline.ts +38 -0
- package/dist/scripts/agents/continue.d.ts +20 -0
- package/dist/scripts/agents/continue.d.ts.map +1 -0
- package/dist/scripts/agents/continue.js +35 -0
- package/dist/scripts/agents/continue.js.map +1 -0
- package/dist/scripts/agents/continue.ts +38 -0
- package/dist/scripts/agents/cursor.d.ts +27 -0
- package/dist/scripts/agents/cursor.d.ts.map +1 -0
- package/dist/scripts/agents/cursor.js +38 -0
- package/dist/scripts/agents/cursor.js.map +1 -0
- package/dist/scripts/agents/cursor.ts +41 -0
- package/dist/scripts/cli/config-gen.d.ts +59 -0
- package/dist/scripts/cli/config-gen.d.ts.map +1 -0
- package/dist/scripts/cli/config-gen.js +156 -0
- package/dist/scripts/cli/config-gen.js.map +1 -0
- package/dist/scripts/cli/config-gen.ts +164 -0
- package/dist/scripts/cli/detect.d.ts +42 -0
- package/dist/scripts/cli/detect.d.ts.map +1 -0
- package/dist/scripts/cli/detect.js +131 -0
- package/dist/scripts/cli/detect.js.map +1 -0
- package/dist/scripts/cli/detect.ts +162 -0
- package/dist/scripts/cli/install.d.ts +31 -0
- package/dist/scripts/cli/install.d.ts.map +1 -0
- package/dist/scripts/cli/install.js +125 -0
- package/dist/scripts/cli/install.js.map +1 -0
- package/dist/scripts/cli/install.ts +157 -0
- package/dist/scripts/cli/status.d.ts +8 -0
- package/dist/scripts/cli/status.d.ts.map +1 -0
- package/dist/scripts/cli/status.js +39 -0
- package/dist/scripts/cli/status.js.map +1 -0
- package/dist/scripts/cli/status.ts +48 -0
- package/dist/scripts/cli/uninstall.d.ts +22 -0
- package/dist/scripts/cli/uninstall.d.ts.map +1 -0
- package/dist/scripts/cli/uninstall.js +141 -0
- package/dist/scripts/cli/uninstall.js.map +1 -0
- package/dist/scripts/cli/uninstall.ts +157 -0
- package/dist/scripts/cli.d.ts +23 -0
- package/dist/scripts/cli.d.ts.map +1 -0
- package/dist/scripts/cli.js +166 -0
- package/dist/scripts/cli.js.map +1 -0
- package/dist/scripts/cli.ts +173 -0
- package/dist/services/classifier/index.d.ts +36 -0
- package/dist/services/classifier/index.d.ts.map +1 -0
- package/dist/services/classifier/index.js +104 -0
- package/dist/services/classifier/index.js.map +1 -0
- package/dist/services/classifier/llm.d.ts +37 -0
- package/dist/services/classifier/llm.d.ts.map +1 -0
- package/dist/services/classifier/llm.js +119 -0
- package/dist/services/classifier/llm.js.map +1 -0
- package/dist/services/classifier/rules.d.ts +22 -0
- package/dist/services/classifier/rules.d.ts.map +1 -0
- package/dist/services/classifier/rules.js +98 -0
- package/dist/services/classifier/rules.js.map +1 -0
- package/dist/services/compressor/index.d.ts +3 -0
- package/dist/services/compressor/index.d.ts.map +1 -0
- package/dist/services/compressor/index.js +3 -0
- package/dist/services/compressor/index.js.map +1 -0
- package/dist/services/compressor/threshold.d.ts +35 -0
- package/dist/services/compressor/threshold.d.ts.map +1 -0
- package/dist/services/compressor/threshold.js +60 -0
- package/dist/services/compressor/threshold.js.map +1 -0
- package/dist/services/compressor/trigger.d.ts +24 -0
- package/dist/services/compressor/trigger.d.ts.map +1 -0
- package/dist/services/compressor/trigger.js +91 -0
- package/dist/services/compressor/trigger.js.map +1 -0
- package/dist/services/constraint-extractor.d.ts +25 -0
- package/dist/services/constraint-extractor.d.ts.map +1 -0
- package/dist/services/constraint-extractor.js +97 -0
- package/dist/services/constraint-extractor.js.map +1 -0
- package/dist/services/database-health.d.ts +22 -0
- package/dist/services/database-health.d.ts.map +1 -0
- package/dist/services/database-health.js +122 -0
- package/dist/services/database-health.js.map +1 -0
- package/dist/services/embedding-fixed.d.ts +9 -0
- package/dist/services/embedding-fixed.d.ts.map +1 -0
- package/dist/services/embedding-fixed.js +70 -0
- package/dist/services/embedding-fixed.js.map +1 -0
- package/dist/services/embedding-provider.d.ts +79 -0
- package/dist/services/embedding-provider.d.ts.map +1 -0
- package/dist/services/embedding-provider.js +229 -0
- package/dist/services/embedding-provider.js.map +1 -0
- package/dist/services/embedding.d.ts +17 -0
- package/dist/services/embedding.d.ts.map +1 -0
- package/dist/services/embedding.js +99 -0
- package/dist/services/embedding.js.map +1 -0
- package/dist/services/hnsw-index.d.ts +76 -0
- package/dist/services/hnsw-index.d.ts.map +1 -0
- package/dist/services/hnsw-index.js +301 -0
- package/dist/services/hnsw-index.js.map +1 -0
- package/dist/services/llm.d.ts +39 -0
- package/dist/services/llm.d.ts.map +1 -0
- package/dist/services/llm.js +207 -0
- package/dist/services/llm.js.map +1 -0
- package/dist/services/memory-tiers.d.ts +75 -0
- package/dist/services/memory-tiers.d.ts.map +1 -0
- package/dist/services/memory-tiers.js +275 -0
- package/dist/services/memory-tiers.js.map +1 -0
- package/dist/services/memory.d.ts +33 -0
- package/dist/services/memory.d.ts.map +1 -0
- package/dist/services/memory.js +209 -0
- package/dist/services/memory.js.map +1 -0
- package/dist/services/multi-agent-sharing.d.ts +83 -0
- package/dist/services/multi-agent-sharing.d.ts.map +1 -0
- package/dist/services/multi-agent-sharing.js +278 -0
- package/dist/services/multi-agent-sharing.js.map +1 -0
- package/dist/services/reranker.d.ts +88 -0
- package/dist/services/reranker.d.ts.map +1 -0
- package/dist/services/reranker.js +234 -0
- package/dist/services/reranker.js.map +1 -0
- package/dist/services/triple-extractor.d.ts +35 -0
- package/dist/services/triple-extractor.d.ts.map +1 -0
- package/dist/services/triple-extractor.js +293 -0
- package/dist/services/triple-extractor.js.map +1 -0
- package/dist/services/vector-provider.d.ts +40 -0
- package/dist/services/vector-provider.d.ts.map +1 -0
- package/dist/services/vector-provider.js +225 -0
- package/dist/services/vector-provider.js.map +1 -0
- package/dist/utils/after-chain-executor.d.ts +26 -0
- package/dist/utils/after-chain-executor.d.ts.map +1 -0
- package/dist/utils/after-chain-executor.js +135 -0
- package/dist/utils/after-chain-executor.js.map +1 -0
- package/dist/utils/after-chain.d.ts +94 -0
- package/dist/utils/after-chain.d.ts.map +1 -0
- package/dist/utils/after-chain.js +155 -0
- package/dist/utils/after-chain.js.map +1 -0
- package/dist/utils/db.d.ts +29 -0
- package/dist/utils/db.d.ts.map +1 -0
- package/dist/utils/db.js +201 -0
- package/dist/utils/db.js.map +1 -0
- package/dist/utils/encryption.d.ts +87 -0
- package/dist/utils/encryption.d.ts.map +1 -0
- package/dist/utils/encryption.js +175 -0
- package/dist/utils/encryption.js.map +1 -0
- package/dist/utils/errors.d.ts +35 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +56 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/logger.d.ts +27 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +177 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/priority.d.ts +26 -0
- package/dist/utils/priority.d.ts.map +1 -0
- package/dist/utils/priority.js +43 -0
- package/dist/utils/priority.js.map +1 -0
- package/dist/utils/watchdog.d.ts +57 -0
- package/dist/utils/watchdog.d.ts.map +1 -0
- package/dist/utils/watchdog.js +164 -0
- package/dist/utils/watchdog.js.map +1 -0
- 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":"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"}
|
|
@@ -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
|