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,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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"}
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=health-check.js.map
@@ -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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"}