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,60 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* context-gatekeeper-cli wrapper.
|
|
4
|
+
*
|
|
5
|
+
* This file is the `bin` entry point for the npm package. When a
|
|
6
|
+
* compiled `dist/cli/cli.js` exists it runs that directly. Otherwise it
|
|
7
|
+
* falls back to running the TypeScript source via `tsx` (which the
|
|
8
|
+
* package depends on via devDependencies, and end users invoke via
|
|
9
|
+
* `npx -y`).
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import { spawn } from 'node:child_process';
|
|
13
|
+
import { existsSync } from 'node:fs';
|
|
14
|
+
import { dirname, join } from 'node:path';
|
|
15
|
+
import { fileURLToPath } from 'node:url';
|
|
16
|
+
|
|
17
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
18
|
+
const pkgRoot = join(__dirname, '..');
|
|
19
|
+
|
|
20
|
+
const CANDIDATES = [
|
|
21
|
+
// Preferred: compiled JS published by `npm run build:publish`.
|
|
22
|
+
join(pkgRoot, 'dist', 'src', 'cli', 'cli.js'),
|
|
23
|
+
// Fallback: source TS shipped alongside dist/ (publish copies it via prepack).
|
|
24
|
+
join(pkgRoot, 'dist', 'scripts', 'cli.ts'),
|
|
25
|
+
// Last resort: source TS in the working tree (dev mode, no build).
|
|
26
|
+
join(pkgRoot, 'scripts', 'cli.ts'),
|
|
27
|
+
];
|
|
28
|
+
|
|
29
|
+
function spawnChild(command, args) {
|
|
30
|
+
const opts = {
|
|
31
|
+
stdio: 'inherit',
|
|
32
|
+
env: process.env,
|
|
33
|
+
};
|
|
34
|
+
if (process.platform === 'win32') opts.shell = true;
|
|
35
|
+
return spawn(command, args, opts);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function main() {
|
|
39
|
+
const args = process.argv.slice(2);
|
|
40
|
+
const compiled = CANDIDATES.find((p) => existsSync(p));
|
|
41
|
+
if (compiled) {
|
|
42
|
+
if (compiled.endsWith('.ts')) {
|
|
43
|
+
// Source fallback: invoke tsx via npx so end users do not need to
|
|
44
|
+
// install tsx globally; npx -y fetches it on demand.
|
|
45
|
+
const npxCmd = process.platform === 'win32' ? 'npx.cmd' : 'npx';
|
|
46
|
+
const child = spawnChild(npxCmd, ['-y', 'tsx', compiled, ...args]);
|
|
47
|
+
child.on('exit', (code) => process.exit(code ?? 0));
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
const child = spawnChild(process.execPath, [compiled, ...args]);
|
|
51
|
+
child.on('exit', (code) => process.exit(code ?? 0));
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
console.error('context-gatekeeper-cli: cannot locate CLI entry point. Looked in:');
|
|
55
|
+
for (const p of CANDIDATES) console.error(' -', p);
|
|
56
|
+
console.error('Run `npm run build` to produce dist/.');
|
|
57
|
+
process.exit(1);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
main();
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GDPR Compliance Tools
|
|
3
|
+
* Export and delete user data for GDPR compliance
|
|
4
|
+
*/
|
|
5
|
+
import { type KGEntity, type KGRelation, type KGFact } from '../schema/knowledge-graph.js';
|
|
6
|
+
import { Memory } from '../models/types.js';
|
|
7
|
+
export interface GDPRExport {
|
|
8
|
+
exportDate: string;
|
|
9
|
+
userId: string;
|
|
10
|
+
memories: Memory[];
|
|
11
|
+
sessions: SessionExport[];
|
|
12
|
+
projects: ProjectExport[];
|
|
13
|
+
knowledgeGraph: KGExport;
|
|
14
|
+
vectorIndexes: string[];
|
|
15
|
+
metadata: {
|
|
16
|
+
totalMemories: number;
|
|
17
|
+
totalSessions: number;
|
|
18
|
+
totalProjects: number;
|
|
19
|
+
totalEntities: number;
|
|
20
|
+
totalRelations: number;
|
|
21
|
+
totalFacts: number;
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
interface SessionExport {
|
|
25
|
+
id: string;
|
|
26
|
+
scope: string;
|
|
27
|
+
key: string;
|
|
28
|
+
value: string | null;
|
|
29
|
+
meta: Record<string, unknown>;
|
|
30
|
+
createdAt: string;
|
|
31
|
+
updatedAt: string;
|
|
32
|
+
}
|
|
33
|
+
interface ProjectExport {
|
|
34
|
+
id: string;
|
|
35
|
+
name: string;
|
|
36
|
+
rootPath: string | null;
|
|
37
|
+
createdAt: string;
|
|
38
|
+
}
|
|
39
|
+
interface KGExport {
|
|
40
|
+
entities: KGEntity[];
|
|
41
|
+
relations: KGRelation[];
|
|
42
|
+
facts: KGFact[];
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Export all data for a user (GDPR Article 20 - Right to Data Portability)
|
|
46
|
+
*/
|
|
47
|
+
export declare function exportUserData(userId: string, options?: {
|
|
48
|
+
includeSessions?: boolean;
|
|
49
|
+
includeProjects?: boolean;
|
|
50
|
+
includeKnowledgeGraph?: boolean;
|
|
51
|
+
includeVectorIndexes?: boolean;
|
|
52
|
+
}): GDPRExport;
|
|
53
|
+
/**
|
|
54
|
+
* Delete all data for a user (GDPR Article 17 - Right to Erasure)
|
|
55
|
+
*/
|
|
56
|
+
export interface GDPRDeleteResult {
|
|
57
|
+
deletedMemories: number;
|
|
58
|
+
deletedSessions: number;
|
|
59
|
+
deletedProjects: number;
|
|
60
|
+
deletedEntities: number;
|
|
61
|
+
deletedRelations: number;
|
|
62
|
+
deletedFacts: number;
|
|
63
|
+
errors: string[];
|
|
64
|
+
}
|
|
65
|
+
export declare function deleteUserData(userId: string, options?: {
|
|
66
|
+
deleteSessions?: boolean;
|
|
67
|
+
deleteProjects?: boolean;
|
|
68
|
+
deleteKnowledgeGraph?: boolean;
|
|
69
|
+
retainAnchored?: boolean;
|
|
70
|
+
}): GDPRDeleteResult;
|
|
71
|
+
/**
|
|
72
|
+
* Anonymize user data (alternative to deletion)
|
|
73
|
+
*/
|
|
74
|
+
export declare function anonymizeUserData(userId: string): void;
|
|
75
|
+
/**
|
|
76
|
+
* Get data summary for a user
|
|
77
|
+
*/
|
|
78
|
+
export declare function getUserDataSummary(userId: string): {
|
|
79
|
+
memoryCount: number;
|
|
80
|
+
sessionCount: number;
|
|
81
|
+
projectCount: number;
|
|
82
|
+
totalSize: number;
|
|
83
|
+
};
|
|
84
|
+
/**
|
|
85
|
+
* Check if user has any data
|
|
86
|
+
*/
|
|
87
|
+
export declare function hasUserData(userId: string): boolean;
|
|
88
|
+
/**
|
|
89
|
+
* Generate data processing report
|
|
90
|
+
*/
|
|
91
|
+
export declare function generateDataProcessingReport(): {
|
|
92
|
+
totalMemories: number;
|
|
93
|
+
memoriesByPriority: Record<string, number>;
|
|
94
|
+
memoriesByTier: Record<string, number>;
|
|
95
|
+
totalSessions: number;
|
|
96
|
+
totalProjects: number;
|
|
97
|
+
dataRetentionInfo: {
|
|
98
|
+
oldestMemory: string | null;
|
|
99
|
+
newestMemory: string | null;
|
|
100
|
+
avgMemoryAge: number;
|
|
101
|
+
};
|
|
102
|
+
};
|
|
103
|
+
export {};
|
|
104
|
+
//# sourceMappingURL=gdpr.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gdpr.d.ts","sourceRoot":"","sources":["../../src/api/gdpr.ts"],"names":[],"mappings":"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"}
|
package/dist/api/gdpr.js
ADDED
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GDPR Compliance Tools
|
|
3
|
+
* Export and delete user data for GDPR compliance
|
|
4
|
+
*/
|
|
5
|
+
import { query, run } from '../utils/db.js';
|
|
6
|
+
import { listMemories } from '../schema/memory.js';
|
|
7
|
+
import { listMemorySessions, deleteMemorySession } from '../schema/memory-session.js';
|
|
8
|
+
import { listProjects, deleteProject } from '../schema/project.js';
|
|
9
|
+
import { getKGStats } from '../schema/knowledge-graph.js';
|
|
10
|
+
import { listVectorIndexes } from '../schema/vector-index.js';
|
|
11
|
+
/**
|
|
12
|
+
* Export all data for a user (GDPR Article 20 - Right to Data Portability)
|
|
13
|
+
*/
|
|
14
|
+
export function exportUserData(userId, options = {}) {
|
|
15
|
+
const exportDate = new Date().toISOString();
|
|
16
|
+
// Export memories
|
|
17
|
+
const memories = listMemories(undefined, { userId });
|
|
18
|
+
// Export sessions
|
|
19
|
+
const sessions = [];
|
|
20
|
+
if (options.includeSessions !== false) {
|
|
21
|
+
const sessionRecords = listMemorySessions({ userId });
|
|
22
|
+
sessions.push(...sessionRecords.map(s => ({
|
|
23
|
+
id: s.id,
|
|
24
|
+
scope: s.scope,
|
|
25
|
+
key: s.key,
|
|
26
|
+
value: s.value,
|
|
27
|
+
meta: s.meta,
|
|
28
|
+
createdAt: s.createdAt,
|
|
29
|
+
updatedAt: s.updatedAt
|
|
30
|
+
})));
|
|
31
|
+
}
|
|
32
|
+
// Export projects
|
|
33
|
+
const projects = [];
|
|
34
|
+
if (options.includeProjects !== false) {
|
|
35
|
+
const projectRecords = listProjects();
|
|
36
|
+
projects.push(...projectRecords.map(p => ({
|
|
37
|
+
id: p.id,
|
|
38
|
+
name: p.name,
|
|
39
|
+
rootPath: p.rootPath,
|
|
40
|
+
createdAt: p.createdAt.toISOString()
|
|
41
|
+
})));
|
|
42
|
+
}
|
|
43
|
+
// Export knowledge graph
|
|
44
|
+
const knowledgeGraph = { entities: [], relations: [], facts: [] };
|
|
45
|
+
if (options.includeKnowledgeGraph !== false) {
|
|
46
|
+
const kgStats = getKGStats();
|
|
47
|
+
knowledgeGraph.entities = []; // Would fetch from KG schema
|
|
48
|
+
knowledgeGraph.relations = [];
|
|
49
|
+
knowledgeGraph.facts = [];
|
|
50
|
+
void kgStats; // Used for metadata
|
|
51
|
+
}
|
|
52
|
+
// Export vector indexes
|
|
53
|
+
const vectorIndexes = [];
|
|
54
|
+
if (options.includeVectorIndexes !== false) {
|
|
55
|
+
const indexes = listVectorIndexes();
|
|
56
|
+
vectorIndexes.push(...indexes.map(i => i.name));
|
|
57
|
+
}
|
|
58
|
+
return {
|
|
59
|
+
exportDate,
|
|
60
|
+
userId,
|
|
61
|
+
memories,
|
|
62
|
+
sessions,
|
|
63
|
+
projects,
|
|
64
|
+
knowledgeGraph,
|
|
65
|
+
vectorIndexes,
|
|
66
|
+
metadata: {
|
|
67
|
+
totalMemories: memories.length,
|
|
68
|
+
totalSessions: sessions.length,
|
|
69
|
+
totalProjects: projects.length,
|
|
70
|
+
totalEntities: knowledgeGraph.entities.length,
|
|
71
|
+
totalRelations: knowledgeGraph.relations.length,
|
|
72
|
+
totalFacts: knowledgeGraph.facts.length
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
export function deleteUserData(userId, options = {}) {
|
|
77
|
+
const result = {
|
|
78
|
+
deletedMemories: 0,
|
|
79
|
+
deletedSessions: 0,
|
|
80
|
+
deletedProjects: 0,
|
|
81
|
+
deletedEntities: 0,
|
|
82
|
+
deletedRelations: 0,
|
|
83
|
+
deletedFacts: 0,
|
|
84
|
+
errors: []
|
|
85
|
+
};
|
|
86
|
+
// Delete memories
|
|
87
|
+
try {
|
|
88
|
+
let sql = `UPDATE memories SET deleted = 1, updated_at = datetime('now') WHERE user_id = ? AND deleted = 0`;
|
|
89
|
+
if (options.retainAnchored) {
|
|
90
|
+
sql += ' AND anchored = 0';
|
|
91
|
+
}
|
|
92
|
+
const memResult = run(sql, [userId]);
|
|
93
|
+
result.deletedMemories = memResult.changes;
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
result.errors.push(`Failed to delete memories: ${error}`);
|
|
97
|
+
}
|
|
98
|
+
// Delete sessions
|
|
99
|
+
if (options.deleteSessions !== false) {
|
|
100
|
+
try {
|
|
101
|
+
const sessionRecords = listMemorySessions({ userId });
|
|
102
|
+
for (const session of sessionRecords) {
|
|
103
|
+
try {
|
|
104
|
+
deleteMemorySession(session.id);
|
|
105
|
+
result.deletedSessions++;
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
// Session may already be deleted
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
result.errors.push(`Failed to delete sessions: ${error}`);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
// Delete projects
|
|
117
|
+
if (options.deleteProjects) {
|
|
118
|
+
try {
|
|
119
|
+
const projectRecords = listProjects();
|
|
120
|
+
for (const project of projectRecords) {
|
|
121
|
+
try {
|
|
122
|
+
deleteProject(project.id);
|
|
123
|
+
result.deletedProjects++;
|
|
124
|
+
}
|
|
125
|
+
catch {
|
|
126
|
+
// Project may have dependencies
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
result.errors.push(`Failed to delete projects: ${error}`);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
// Delete knowledge graph data
|
|
135
|
+
if (options.deleteKnowledgeGraph) {
|
|
136
|
+
try {
|
|
137
|
+
// Delete facts
|
|
138
|
+
const factResult = run(`DELETE FROM kg_facts WHERE entity_id IN (SELECT id FROM kg_entities WHERE source_memory_id IN (SELECT id FROM memories WHERE user_id = ?))`, [userId]);
|
|
139
|
+
result.deletedFacts = factResult.changes;
|
|
140
|
+
// Delete relations
|
|
141
|
+
const relationResult = run(`DELETE FROM kg_relations WHERE source_memory_id IN (SELECT id FROM memories WHERE user_id = ?)`, [userId]);
|
|
142
|
+
result.deletedRelations = relationResult.changes;
|
|
143
|
+
// Delete entities
|
|
144
|
+
const entityResult = run(`DELETE FROM kg_entities WHERE source_memory_id IN (SELECT id FROM memories WHERE user_id = ?)`, [userId]);
|
|
145
|
+
result.deletedEntities = entityResult.changes;
|
|
146
|
+
}
|
|
147
|
+
catch (error) {
|
|
148
|
+
result.errors.push(`Failed to delete knowledge graph: ${error}`);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
return result;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Anonymize user data (alternative to deletion)
|
|
155
|
+
*/
|
|
156
|
+
export function anonymizeUserData(userId) {
|
|
157
|
+
const now = new Date().toISOString();
|
|
158
|
+
const anonymousId = `anonymous-${Date.now()}`;
|
|
159
|
+
// Anonymize memories
|
|
160
|
+
run(`UPDATE memories SET user_id = ?, updated_by = ?, updated_at = ? WHERE user_id = ?`, [anonymousId, 'gdpr-anonymization', now, userId]);
|
|
161
|
+
// Anonymize sessions
|
|
162
|
+
run(`UPDATE memory_sessions SET user_id = ?, updated_by = ?, updated_at = ? WHERE user_id = ?`, [anonymousId, 'gdpr-anonymization', now, userId]);
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Get data summary for a user
|
|
166
|
+
*/
|
|
167
|
+
export function getUserDataSummary(userId) {
|
|
168
|
+
const memories = listMemories(undefined, { userId });
|
|
169
|
+
const sessions = listMemorySessions({ userId });
|
|
170
|
+
const projects = listProjects();
|
|
171
|
+
// Estimate size
|
|
172
|
+
let totalSize = 0;
|
|
173
|
+
for (const memory of memories) {
|
|
174
|
+
totalSize += memory.content.length;
|
|
175
|
+
}
|
|
176
|
+
return {
|
|
177
|
+
memoryCount: memories.length,
|
|
178
|
+
sessionCount: sessions.length,
|
|
179
|
+
projectCount: projects.length,
|
|
180
|
+
totalSize
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Check if user has any data
|
|
185
|
+
*/
|
|
186
|
+
export function hasUserData(userId) {
|
|
187
|
+
const memories = listMemories(undefined, { userId });
|
|
188
|
+
return memories.length > 0;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Generate data processing report
|
|
192
|
+
*/
|
|
193
|
+
export function generateDataProcessingReport() {
|
|
194
|
+
// Count memories
|
|
195
|
+
const memoryCount = query(`SELECT COUNT(*) as count FROM memories WHERE deleted = 0`)[0]?.count ?? 0;
|
|
196
|
+
// Count by priority
|
|
197
|
+
const priorityRows = query(`SELECT priority, COUNT(*) as count FROM memories WHERE deleted = 0 GROUP BY priority`);
|
|
198
|
+
const memoriesByPriority = {};
|
|
199
|
+
for (const row of priorityRows) {
|
|
200
|
+
memoriesByPriority[row.priority] = row.count;
|
|
201
|
+
}
|
|
202
|
+
// Count sessions
|
|
203
|
+
const sessionCount = query(`SELECT COUNT(*) as count FROM memory_sessions WHERE deleted = 0`)[0]?.count ?? 0;
|
|
204
|
+
// Count projects
|
|
205
|
+
const projectCount = query(`SELECT COUNT(*) as count FROM projects`)[0]?.count ?? 0;
|
|
206
|
+
// Memory age info
|
|
207
|
+
const ageRows = query(`SELECT MIN(created_at) as oldest, MAX(created_at) as newest FROM memories WHERE deleted = 0`);
|
|
208
|
+
const oldestMemory = ageRows[0]?.oldest;
|
|
209
|
+
const newestMemory = ageRows[0]?.newest;
|
|
210
|
+
let avgMemoryAge = 0;
|
|
211
|
+
if (oldestMemory && newestMemory) {
|
|
212
|
+
const oldest = new Date(oldestMemory).getTime();
|
|
213
|
+
const newest = new Date(newestMemory).getTime();
|
|
214
|
+
avgMemoryAge = (newest - oldest) / (1000 * 60 * 60 * 24); // days
|
|
215
|
+
}
|
|
216
|
+
return {
|
|
217
|
+
totalMemories: memoryCount,
|
|
218
|
+
memoriesByPriority,
|
|
219
|
+
memoriesByTier: {}, // Would query from memory_tiers
|
|
220
|
+
totalSessions: sessionCount,
|
|
221
|
+
totalProjects: projectCount,
|
|
222
|
+
dataRetentionInfo: {
|
|
223
|
+
oldestMemory,
|
|
224
|
+
newestMemory,
|
|
225
|
+
avgMemoryAge
|
|
226
|
+
}
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
//# sourceMappingURL=gdpr.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gdpr.js","sourceRoot":"","sources":["../../src/api/gdpr.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface HealthStatus {
|
|
2
|
+
status: 'healthy' | 'degraded' | 'unhealthy';
|
|
3
|
+
details: Record<string, unknown>;
|
|
4
|
+
checkedAt: string;
|
|
5
|
+
}
|
|
6
|
+
export interface HealthCheckInput {
|
|
7
|
+
database?: boolean;
|
|
8
|
+
llm?: boolean;
|
|
9
|
+
embedding?: boolean;
|
|
10
|
+
fts?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export type HealthCheckFunction = (options?: HealthCheckInput) => Promise<HealthStatus>;
|
|
13
|
+
//# sourceMappingURL=health-check.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health-check.d.ts","sourceRoot":"","sources":["../../src/api/health-check.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,WAAW,CAAC;IAC7C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,CAAC,EAAE,gBAAgB,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health-check.js","sourceRoot":"","sources":["../../src/api/health-check.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { MemoryService } from '../services/memory.js';
|
|
2
|
+
export type { MemoryService } from '../services/memory.js';
|
|
3
|
+
export { exportUserData, deleteUserData, anonymizeUserData, getUserDataSummary, hasUserData, generateDataProcessingReport, type GDPRExport, type GDPRDeleteResult } from './gdpr.js';
|
|
4
|
+
export { getMultiAgentSharingService } from '../services/multi-agent-sharing.js';
|
|
5
|
+
export { encrypt, decrypt, encryptWithKey, decryptWithKeyId, generateEncryptionKey, deriveKeyFromPassword, type EncryptedData } from '../utils/encryption.js';
|
|
6
|
+
export declare function createMemoryService(): MemoryService;
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,YAAY,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,WAAW,EAAE,4BAA4B,EAAE,KAAK,UAAU,EAAE,KAAK,gBAAgB,EAAE,MAAM,WAAW,CAAC;AACrL,OAAO,EAAE,2BAA2B,EAAE,MAAM,oCAAoC,CAAC;AACjF,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,KAAK,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE9J,wBAAgB,mBAAmB,IAAI,aAAa,CAEnD"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { MemoryService } from '../services/memory.js';
|
|
2
|
+
export { exportUserData, deleteUserData, anonymizeUserData, getUserDataSummary, hasUserData, generateDataProcessingReport } from './gdpr.js';
|
|
3
|
+
export { getMultiAgentSharingService } from '../services/multi-agent-sharing.js';
|
|
4
|
+
export { encrypt, decrypt, encryptWithKey, decryptWithKeyId, generateEncryptionKey, deriveKeyFromPassword } from '../utils/encryption.js';
|
|
5
|
+
export function createMemoryService() {
|
|
6
|
+
return new MemoryService();
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAGtD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,WAAW,EAAE,4BAA4B,EAA0C,MAAM,WAAW,CAAC;AACrL,OAAO,EAAE,2BAA2B,EAAE,MAAM,oCAAoC,CAAC;AACjF,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,qBAAqB,EAAsB,MAAM,wBAAwB,CAAC;AAE9J,MAAM,UAAU,mBAAmB;IACjC,OAAO,IAAI,aAAa,EAAE,CAAC;AAC7B,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export interface AuditEvent {
|
|
2
|
+
id: string;
|
|
3
|
+
timestamp: string;
|
|
4
|
+
operation: string;
|
|
5
|
+
targetKey: string;
|
|
6
|
+
durationMs: number;
|
|
7
|
+
success: boolean;
|
|
8
|
+
reason?: string;
|
|
9
|
+
metadata?: Record<string, unknown>;
|
|
10
|
+
}
|
|
11
|
+
export type AuditEventEmitter = (event: AuditEvent) => void;
|
|
12
|
+
export type { MemorySessionRecord } from '../schema/memory-session.js';
|
|
13
|
+
export declare function onAuditEvent(emitter: AuditEventEmitter): () => void;
|
|
14
|
+
export declare function emitAuditEvent(event: Omit<AuditEvent, 'id' | 'timestamp'>): void;
|
|
15
|
+
export declare function withAudit<T>(operation: string, targetKey: string, fn: () => T, metadata?: Record<string, unknown>): T;
|
|
16
|
+
export declare function withAuditAsync<T>(operation: string, targetKey: string, fn: () => Promise<T>, metadata?: Record<string, unknown>): Promise<T>;
|
|
17
|
+
export interface HealthStatus {
|
|
18
|
+
status: 'healthy' | 'degraded' | 'unhealthy';
|
|
19
|
+
details: Record<string, unknown>;
|
|
20
|
+
checkedAt: string;
|
|
21
|
+
}
|
|
22
|
+
export interface HealthCheckInput {
|
|
23
|
+
database?: boolean;
|
|
24
|
+
llm?: boolean;
|
|
25
|
+
embedding?: boolean;
|
|
26
|
+
fts?: boolean;
|
|
27
|
+
}
|
|
28
|
+
export declare function createHealthCheck(input: {
|
|
29
|
+
getDbHealth: () => boolean;
|
|
30
|
+
getFtsHealth: () => boolean;
|
|
31
|
+
getLlmHealth?: () => Promise<boolean>;
|
|
32
|
+
}): Promise<(options?: HealthCheckInput) => Promise<HealthStatus>>;
|
|
33
|
+
export interface MetricsCollector {
|
|
34
|
+
incrementCounter(name: string, labels?: Record<string, string>): void;
|
|
35
|
+
recordHistogram(name: string, value: number, labels?: Record<string, string>): void;
|
|
36
|
+
getSnapshot(): Record<string, unknown>;
|
|
37
|
+
}
|
|
38
|
+
export declare function createMetricsCollector(): MetricsCollector;
|
|
39
|
+
//# sourceMappingURL=observability.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observability.d.ts","sourceRoot":"","sources":["../../src/api/observability.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,MAAM,iBAAiB,GAAG,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;AAE5D,YAAY,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAIvE,wBAAgB,YAAY,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,IAAI,CAGnE;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,WAAW,CAAC,GAAG,IAAI,CAchF;AAED,wBAAgB,SAAS,CAAC,CAAC,EACzB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,EAAE,EAAE,MAAM,CAAC,EACX,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,CAAC,CAwBH;AAED,wBAAsB,cAAc,CAAC,CAAC,EACpC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,CAAC,CAAC,CAwBZ;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,WAAW,CAAC;IAC7C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,wBAAsB,iBAAiB,CAAC,KAAK,EAAE;IAC7C,WAAW,EAAE,MAAM,OAAO,CAAC;IAC3B,YAAY,EAAE,MAAM,OAAO,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;CACvC,GAAG,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,gBAAgB,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC,CAiCjE;AAED,MAAM,WAAW,gBAAgB;IAC/B,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IACtE,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IACpF,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxC;AAED,wBAAgB,sBAAsB,IAAI,gBAAgB,CAoCzD"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
// Observability types and emitters for session and memory operations
|
|
2
|
+
const emitters = new Set();
|
|
3
|
+
export function onAuditEvent(emitter) {
|
|
4
|
+
emitters.add(emitter);
|
|
5
|
+
return () => emitters.delete(emitter);
|
|
6
|
+
}
|
|
7
|
+
export function emitAuditEvent(event) {
|
|
8
|
+
const full = {
|
|
9
|
+
...event,
|
|
10
|
+
id: `evt-${Date.now()}-${Math.random().toString(36).slice(2, 7)}`,
|
|
11
|
+
timestamp: new Date().toISOString()
|
|
12
|
+
};
|
|
13
|
+
for (const emitter of emitters) {
|
|
14
|
+
try {
|
|
15
|
+
emitter(full);
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
// silent
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export function withAudit(operation, targetKey, fn, metadata) {
|
|
23
|
+
const start = Date.now();
|
|
24
|
+
try {
|
|
25
|
+
const result = fn();
|
|
26
|
+
emitAuditEvent({
|
|
27
|
+
operation,
|
|
28
|
+
targetKey,
|
|
29
|
+
durationMs: Date.now() - start,
|
|
30
|
+
success: true,
|
|
31
|
+
metadata
|
|
32
|
+
});
|
|
33
|
+
return result;
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
emitAuditEvent({
|
|
37
|
+
operation,
|
|
38
|
+
targetKey,
|
|
39
|
+
durationMs: Date.now() - start,
|
|
40
|
+
success: false,
|
|
41
|
+
reason: error instanceof Error ? error.message : String(error),
|
|
42
|
+
metadata
|
|
43
|
+
});
|
|
44
|
+
throw error;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
export async function withAuditAsync(operation, targetKey, fn, metadata) {
|
|
48
|
+
const start = Date.now();
|
|
49
|
+
try {
|
|
50
|
+
const result = await fn();
|
|
51
|
+
emitAuditEvent({
|
|
52
|
+
operation,
|
|
53
|
+
targetKey,
|
|
54
|
+
durationMs: Date.now() - start,
|
|
55
|
+
success: true,
|
|
56
|
+
metadata
|
|
57
|
+
});
|
|
58
|
+
return result;
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
emitAuditEvent({
|
|
62
|
+
operation,
|
|
63
|
+
targetKey,
|
|
64
|
+
durationMs: Date.now() - start,
|
|
65
|
+
success: false,
|
|
66
|
+
reason: error instanceof Error ? error.message : String(error),
|
|
67
|
+
metadata
|
|
68
|
+
});
|
|
69
|
+
throw error;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
export async function createHealthCheck(input) {
|
|
73
|
+
return async function healthCheck(options = {}) {
|
|
74
|
+
const checks = {
|
|
75
|
+
database: true,
|
|
76
|
+
llm: true,
|
|
77
|
+
embedding: true,
|
|
78
|
+
fts: true,
|
|
79
|
+
...options
|
|
80
|
+
};
|
|
81
|
+
const results = {};
|
|
82
|
+
if (checks.database) {
|
|
83
|
+
results.database = input.getDbHealth();
|
|
84
|
+
}
|
|
85
|
+
if (checks.fts) {
|
|
86
|
+
results.fts = input.getFtsHealth();
|
|
87
|
+
}
|
|
88
|
+
if (checks.llm && input.getLlmHealth) {
|
|
89
|
+
results.llm = await input.getLlmHealth();
|
|
90
|
+
}
|
|
91
|
+
const allHealthy = Object.values(results).every(Boolean);
|
|
92
|
+
const anyHealthy = Object.values(results).some(Boolean);
|
|
93
|
+
return {
|
|
94
|
+
status: allHealthy ? 'healthy' : anyHealthy ? 'degraded' : 'unhealthy',
|
|
95
|
+
details: results,
|
|
96
|
+
checkedAt: new Date().toISOString()
|
|
97
|
+
};
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
export function createMetricsCollector() {
|
|
101
|
+
const counters = new Map();
|
|
102
|
+
const histograms = new Map();
|
|
103
|
+
return {
|
|
104
|
+
incrementCounter(name, labels) {
|
|
105
|
+
const key = JSON.stringify({ name, labels });
|
|
106
|
+
counters.set(key, (counters.get(key) ?? 0) + 1);
|
|
107
|
+
},
|
|
108
|
+
recordHistogram(name, value, labels) {
|
|
109
|
+
const key = JSON.stringify({ name, labels });
|
|
110
|
+
if (!histograms.has(key)) {
|
|
111
|
+
histograms.set(key, []);
|
|
112
|
+
}
|
|
113
|
+
histograms.get(key).push(value);
|
|
114
|
+
},
|
|
115
|
+
getSnapshot() {
|
|
116
|
+
const snapshot = {
|
|
117
|
+
counters: Object.fromEntries(counters),
|
|
118
|
+
histograms: Object.fromEntries(Array.from(histograms.entries()).map(([k, v]) => [
|
|
119
|
+
k,
|
|
120
|
+
{
|
|
121
|
+
count: v.length,
|
|
122
|
+
min: Math.min(...v),
|
|
123
|
+
max: Math.max(...v),
|
|
124
|
+
avg: v.reduce((a, b) => a + b, 0) / v.length
|
|
125
|
+
}
|
|
126
|
+
]))
|
|
127
|
+
};
|
|
128
|
+
return snapshot;
|
|
129
|
+
}
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=observability.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observability.js","sourceRoot":"","sources":["../../src/api/observability.ts"],"names":[],"mappings":"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"}
|