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 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Print a status table showing which supported agents have a config
3
+ * file on disk and whether context-gatekeeper is already wired into it.
4
+ */
5
+
6
+ import { detectAll, AgentDetection, AgentName, SUPPORTED_AGENTS } from './detect.ts';
7
+
8
+ const PAD = (s: string | number, n: number): string => String(s).padEnd(n);
9
+
10
+ export function renderStatusTable(detections: AgentDetection[]): string {
11
+ const headers = ['Agent', 'Scope', 'Config Path', 'Status'];
12
+ const rows: string[][] = detections.map((d) => [
13
+ d.agent,
14
+ d.scope,
15
+ d.configPath,
16
+ describe(d),
17
+ ]);
18
+
19
+ const widths = headers.map((h, i) =>
20
+ Math.max(h.length, ...rows.map((r) => String(r[i]).length)),
21
+ );
22
+
23
+ const sep = widths.map((w) => '-'.repeat(w)).join(' ');
24
+ const out: string[] = [];
25
+ out.push(headers.map((h, i) => PAD(h, widths[i])).join(' '));
26
+ out.push(sep);
27
+ for (const r of rows) {
28
+ out.push(r.map((cell, i) => PAD(cell, widths[i])).join(' '));
29
+ }
30
+ return out.join('\n');
31
+ }
32
+
33
+ function describe(d: AgentDetection): string {
34
+ if (!d.exists) return 'not detected';
35
+ return d.installed ? 'installed' : 'available';
36
+ }
37
+
38
+ export function printStatus(detections: AgentDetection[] = detectAll()): void {
39
+ // Sort for predictable output: known agent order.
40
+ const order = new Map<AgentName, number>(SUPPORTED_AGENTS.map((a, i) => [a, i]));
41
+ const sorted = [...detections].sort(
42
+ (a, b) => (order.get(a.agent) ?? 99) - (order.get(b.agent) ?? 99),
43
+ );
44
+ console.log(renderStatusTable(sorted));
45
+ const installed = sorted.filter((d) => d.installed).length;
46
+ const available = sorted.filter((d) => d.exists && !d.installed).length;
47
+ console.log(`\n${installed} installed, ${available} available, ${sorted.length - installed - available} not detected`);
48
+ }
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Remove the context-gatekeeper entry from an agent's config file.
3
+ * If the removal leaves the file with no remaining MCP servers, the
4
+ * file itself is deleted.
5
+ */
6
+ import { AgentName, Scope } from './detect.ts';
7
+ export interface UninstallResult {
8
+ agent: AgentName;
9
+ configPath: string;
10
+ scope: Scope;
11
+ status: 'removed' | 'skipped' | 'error';
12
+ message?: string;
13
+ }
14
+ export declare function uninstallAgent(agent: AgentName, options?: {
15
+ scope?: Scope;
16
+ cwd?: string;
17
+ }): UninstallResult;
18
+ export declare function uninstallAgents(agents: AgentName[], options?: {
19
+ scope?: Scope;
20
+ cwd?: string;
21
+ }): UninstallResult[];
22
+ //# sourceMappingURL=uninstall.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["uninstall.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,SAAS,EAAe,KAAK,EAAoC,MAAM,aAAa,CAAC;AAG9F,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,SAAS,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,KAAK,CAAC;IACb,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AA8DD,wBAAgB,cAAc,CAC5B,KAAK,EAAE,SAAS,EAChB,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,KAAK,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAO,GAC5C,eAAe,CA+DjB;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,SAAS,EAAE,EACnB,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,KAAK,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAO,GAC5C,eAAe,EAAE,CAMnB"}
@@ -0,0 +1,141 @@
1
+ /**
2
+ * Remove the context-gatekeeper entry from an agent's config file.
3
+ * If the removal leaves the file with no remaining MCP servers, the
4
+ * file itself is deleted.
5
+ */
6
+ import { unlinkSync, writeFileSync, renameSync, existsSync, readFileSync } from 'node:fs';
7
+ import { detectAgent, SUPPORTED_AGENTS } from './detect.ts';
8
+ import { GATEKEEPER_KEY } from './config-gen.ts';
9
+ function readJsonObject(filePath) {
10
+ if (!existsSync(filePath))
11
+ return null;
12
+ try {
13
+ const raw = readFileSync(filePath, 'utf8').trim();
14
+ if (raw.length === 0)
15
+ return {};
16
+ const parsed = JSON.parse(raw);
17
+ if (parsed === null || typeof parsed !== 'object' || Array.isArray(parsed))
18
+ return null;
19
+ return parsed;
20
+ }
21
+ catch {
22
+ return null;
23
+ }
24
+ }
25
+ function writeJson(filePath, value) {
26
+ const tmp = `${filePath}.tmp-${process.pid}-${Date.now()}`;
27
+ writeFileSync(tmp, JSON.stringify(value, null, 2) + '\n', 'utf8');
28
+ renameSync(tmp, filePath);
29
+ }
30
+ function hasAnyMcpServers(value) {
31
+ const servers = value.mcpServers;
32
+ if (servers && Object.keys(servers).length > 0)
33
+ return true;
34
+ const exp = value.experimental;
35
+ if (exp?.modelContextProtocolServers && exp.modelContextProtocolServers.length > 0)
36
+ return true;
37
+ return false;
38
+ }
39
+ /**
40
+ * Strip the context-gatekeeper entry from a parsed config object.
41
+ * Returns the (possibly modified) object and a flag indicating whether
42
+ * any change was made.
43
+ */
44
+ function stripEntry(agent, value) {
45
+ if (agent === 'continue') {
46
+ const exp = value.experimental ?? {};
47
+ const arr = exp.modelContextProtocolServers ?? [];
48
+ const filtered = arr.filter((e) => e.name !== GATEKEEPER_KEY);
49
+ if (filtered.length === arr.length)
50
+ return { value, changed: false };
51
+ const nextExp = { ...exp, modelContextProtocolServers: filtered };
52
+ if (filtered.length === 0) {
53
+ const { experimental: _drop, ...rest } = value;
54
+ return { value: rest, changed: true };
55
+ }
56
+ return { value: { ...value, experimental: nextExp }, changed: true };
57
+ }
58
+ const servers = value.mcpServers ?? {};
59
+ if (!(GATEKEEPER_KEY in servers))
60
+ return { value, changed: false };
61
+ const nextServers = { ...servers };
62
+ delete nextServers[GATEKEEPER_KEY];
63
+ if (Object.keys(nextServers).length === 0) {
64
+ const { mcpServers: _drop, ...rest } = value;
65
+ return { value: rest, changed: true };
66
+ }
67
+ return { value: { ...value, mcpServers: nextServers }, changed: true };
68
+ }
69
+ export function uninstallAgent(agent, options = {}) {
70
+ // Claude Desktop has no project-level config; skip rather than touching
71
+ // the global path the user did not intend to modify.
72
+ if (options.scope === 'project' && agent === 'claude-desktop') {
73
+ return {
74
+ agent,
75
+ configPath: '(project scope not supported)',
76
+ scope: 'global',
77
+ status: 'skipped',
78
+ message: 'Claude Desktop is global-only; omit --local to uninstall',
79
+ };
80
+ }
81
+ const detection = detectAgent(agent, options);
82
+ if (!detection.exists) {
83
+ return {
84
+ agent,
85
+ configPath: detection.configPath,
86
+ scope: detection.scope,
87
+ status: 'skipped',
88
+ message: 'config file does not exist',
89
+ };
90
+ }
91
+ const value = readJsonObject(detection.configPath);
92
+ if (value === null) {
93
+ return {
94
+ agent,
95
+ configPath: detection.configPath,
96
+ scope: detection.scope,
97
+ status: 'error',
98
+ message: 'config file is not a JSON object',
99
+ };
100
+ }
101
+ try {
102
+ const { value: next, changed } = stripEntry(agent, value);
103
+ if (!changed) {
104
+ return {
105
+ agent,
106
+ configPath: detection.configPath,
107
+ scope: detection.scope,
108
+ status: 'skipped',
109
+ message: 'context-gatekeeper entry not present',
110
+ };
111
+ }
112
+ if (!hasAnyMcpServers(next) && Object.keys(next).length === 0) {
113
+ unlinkSync(detection.configPath);
114
+ }
115
+ else {
116
+ writeJson(detection.configPath, next);
117
+ }
118
+ return {
119
+ agent,
120
+ configPath: detection.configPath,
121
+ scope: detection.scope,
122
+ status: 'removed',
123
+ };
124
+ }
125
+ catch (err) {
126
+ return {
127
+ agent,
128
+ configPath: detection.configPath,
129
+ scope: detection.scope,
130
+ status: 'error',
131
+ message: err.message,
132
+ };
133
+ }
134
+ }
135
+ export function uninstallAgents(agents, options = {}) {
136
+ const targets = agents.length > 0
137
+ ? agents.map((a) => detectAgent(a, options))
138
+ : SUPPORTED_AGENTS.map((a) => detectAgent(a, options));
139
+ return targets.map((d) => uninstallAgent(d.agent, options));
140
+ }
141
+ //# sourceMappingURL=uninstall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uninstall.js","sourceRoot":"","sources":["uninstall.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,157 @@
1
+ /**
2
+ * Remove the context-gatekeeper entry from an agent's config file.
3
+ * If the removal leaves the file with no remaining MCP servers, the
4
+ * file itself is deleted.
5
+ */
6
+
7
+ import { unlinkSync, writeFileSync, renameSync, existsSync, readFileSync } from 'node:fs';
8
+
9
+ import { AgentName, detectAgent, Scope, AgentDetection, SUPPORTED_AGENTS } from './detect.ts';
10
+ import { GATEKEEPER_KEY } from './config-gen.ts';
11
+
12
+ export interface UninstallResult {
13
+ agent: AgentName;
14
+ configPath: string;
15
+ scope: Scope;
16
+ status: 'removed' | 'skipped' | 'error';
17
+ message?: string;
18
+ }
19
+
20
+ function readJsonObject(filePath: string): Record<string, unknown> | null {
21
+ if (!existsSync(filePath)) return null;
22
+ try {
23
+ const raw = readFileSync(filePath, 'utf8').trim();
24
+ if (raw.length === 0) return {};
25
+ const parsed = JSON.parse(raw);
26
+ if (parsed === null || typeof parsed !== 'object' || Array.isArray(parsed)) return null;
27
+ return parsed as Record<string, unknown>;
28
+ } catch {
29
+ return null;
30
+ }
31
+ }
32
+
33
+ function writeJson(filePath: string, value: Record<string, unknown>): void {
34
+ const tmp = `${filePath}.tmp-${process.pid}-${Date.now()}`;
35
+ writeFileSync(tmp, JSON.stringify(value, null, 2) + '\n', 'utf8');
36
+ renameSync(tmp, filePath);
37
+ }
38
+
39
+ function hasAnyMcpServers(value: Record<string, unknown>): boolean {
40
+ const servers = value.mcpServers as Record<string, unknown> | undefined;
41
+ if (servers && Object.keys(servers).length > 0) return true;
42
+ const exp = value.experimental as { modelContextProtocolServers?: unknown[] } | undefined;
43
+ if (exp?.modelContextProtocolServers && exp.modelContextProtocolServers.length > 0) return true;
44
+ return false;
45
+ }
46
+
47
+ /**
48
+ * Strip the context-gatekeeper entry from a parsed config object.
49
+ * Returns the (possibly modified) object and a flag indicating whether
50
+ * any change was made.
51
+ */
52
+ function stripEntry(agent: AgentName, value: Record<string, unknown>): {
53
+ value: Record<string, unknown>;
54
+ changed: boolean;
55
+ } {
56
+ if (agent === 'continue') {
57
+ const exp = (value.experimental as Record<string, unknown> | undefined) ?? {};
58
+ const arr = (exp.modelContextProtocolServers as Array<Record<string, unknown>> | undefined) ?? [];
59
+ const filtered = arr.filter((e) => e.name !== GATEKEEPER_KEY);
60
+ if (filtered.length === arr.length) return { value, changed: false };
61
+ const nextExp = { ...exp, modelContextProtocolServers: filtered };
62
+ if (filtered.length === 0) {
63
+ const { experimental: _drop, ...rest } = value;
64
+ return { value: rest, changed: true };
65
+ }
66
+ return { value: { ...value, experimental: nextExp }, changed: true };
67
+ }
68
+
69
+ const servers = (value.mcpServers as Record<string, unknown> | undefined) ?? {};
70
+ if (!(GATEKEEPER_KEY in servers)) return { value, changed: false };
71
+ const nextServers = { ...servers };
72
+ delete nextServers[GATEKEEPER_KEY];
73
+ if (Object.keys(nextServers).length === 0) {
74
+ const { mcpServers: _drop, ...rest } = value;
75
+ return { value: rest, changed: true };
76
+ }
77
+ return { value: { ...value, mcpServers: nextServers }, changed: true };
78
+ }
79
+
80
+ export function uninstallAgent(
81
+ agent: AgentName,
82
+ options: { scope?: Scope; cwd?: string } = {},
83
+ ): UninstallResult {
84
+ // Claude Desktop has no project-level config; skip rather than touching
85
+ // the global path the user did not intend to modify.
86
+ if (options.scope === 'project' && agent === 'claude-desktop') {
87
+ return {
88
+ agent,
89
+ configPath: '(project scope not supported)',
90
+ scope: 'global',
91
+ status: 'skipped',
92
+ message: 'Claude Desktop is global-only; omit --local to uninstall',
93
+ };
94
+ }
95
+ const detection = detectAgent(agent, options);
96
+ if (!detection.exists) {
97
+ return {
98
+ agent,
99
+ configPath: detection.configPath,
100
+ scope: detection.scope,
101
+ status: 'skipped',
102
+ message: 'config file does not exist',
103
+ };
104
+ }
105
+ const value = readJsonObject(detection.configPath);
106
+ if (value === null) {
107
+ return {
108
+ agent,
109
+ configPath: detection.configPath,
110
+ scope: detection.scope,
111
+ status: 'error',
112
+ message: 'config file is not a JSON object',
113
+ };
114
+ }
115
+ try {
116
+ const { value: next, changed } = stripEntry(agent, value);
117
+ if (!changed) {
118
+ return {
119
+ agent,
120
+ configPath: detection.configPath,
121
+ scope: detection.scope,
122
+ status: 'skipped',
123
+ message: 'context-gatekeeper entry not present',
124
+ };
125
+ }
126
+ if (!hasAnyMcpServers(next) && Object.keys(next).length === 0) {
127
+ unlinkSync(detection.configPath);
128
+ } else {
129
+ writeJson(detection.configPath, next);
130
+ }
131
+ return {
132
+ agent,
133
+ configPath: detection.configPath,
134
+ scope: detection.scope,
135
+ status: 'removed',
136
+ };
137
+ } catch (err) {
138
+ return {
139
+ agent,
140
+ configPath: detection.configPath,
141
+ scope: detection.scope,
142
+ status: 'error',
143
+ message: (err as Error).message,
144
+ };
145
+ }
146
+ }
147
+
148
+ export function uninstallAgents(
149
+ agents: AgentName[],
150
+ options: { scope?: Scope; cwd?: string } = {},
151
+ ): UninstallResult[] {
152
+ const targets: AgentDetection[] =
153
+ agents.length > 0
154
+ ? agents.map((a) => detectAgent(a, options))
155
+ : SUPPORTED_AGENTS.map((a) => detectAgent(a, options));
156
+ return targets.map((d) => uninstallAgent(d.agent, options));
157
+ }
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * context-gatekeeper install helper CLI.
4
+ *
5
+ * Subcommands:
6
+ * install [agent ...] - merge the MCP entry into one or more agents' configs
7
+ * uninstall [agent ...] - remove the MCP entry from one or more agents' configs
8
+ * status - print a table of detected agents and install state
9
+ * help - print usage
10
+ *
11
+ * Examples:
12
+ * npx context-gatekeeper install --all
13
+ * npx context-gatekeeper install cursor claude-code
14
+ * npx context-gatekeeper uninstall --all
15
+ * npx context-gatekeeper status
16
+ *
17
+ * Exit codes:
18
+ * 0 - success
19
+ * 1 - one or more operations failed (or were skipped, for uninstall)
20
+ * 2 - invalid usage
21
+ */
22
+ export {};
23
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;GAmBG"}
@@ -0,0 +1,166 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * context-gatekeeper install helper CLI.
4
+ *
5
+ * Subcommands:
6
+ * install [agent ...] - merge the MCP entry into one or more agents' configs
7
+ * uninstall [agent ...] - remove the MCP entry from one or more agents' configs
8
+ * status - print a table of detected agents and install state
9
+ * help - print usage
10
+ *
11
+ * Examples:
12
+ * npx context-gatekeeper install --all
13
+ * npx context-gatekeeper install cursor claude-code
14
+ * npx context-gatekeeper uninstall --all
15
+ * npx context-gatekeeper status
16
+ *
17
+ * Exit codes:
18
+ * 0 - success
19
+ * 1 - one or more operations failed (or were skipped, for uninstall)
20
+ * 2 - invalid usage
21
+ */
22
+ import { installAgents } from './cli/install.ts';
23
+ import { uninstallAgents } from './cli/uninstall.ts';
24
+ import { printStatus } from './cli/status.ts';
25
+ import { detectAll, isValidAgent, SUPPORTED_AGENTS } from './cli/detect.ts';
26
+ const HELP = `context-gatekeeper installer
27
+
28
+ Usage:
29
+ context-gatekeeper install [agent ...] [--all] [--local]
30
+ context-gatekeeper uninstall [agent ...] [--all] [--local]
31
+ context-gatekeeper status [--local]
32
+ context-gatekeeper help
33
+
34
+ Agents:
35
+ ${SUPPORTED_AGENTS.join(', ')}
36
+
37
+ Options:
38
+ --all target every supported agent (default for uninstall when none given)
39
+ --local write to project-local config (./.cursor/mcp.json, etc.) instead of global
40
+ (Claude Desktop is always global-only)
41
+
42
+ Examples:
43
+ context-gatekeeper install --all
44
+ context-gatekeeper install cursor claude-code
45
+ context-gatekeeper uninstall cursor
46
+ context-gatekeeper status
47
+ `;
48
+ function parseArgs(argv) {
49
+ const [command = 'help', ...rest] = argv;
50
+ const positional = [];
51
+ const flags = new Set();
52
+ const flagValues = new Map();
53
+ for (let i = 0; i < rest.length; i++) {
54
+ const a = rest[i];
55
+ if (a.startsWith('--')) {
56
+ const eq = a.indexOf('=');
57
+ if (eq >= 0) {
58
+ const name = a.slice(2, eq);
59
+ const value = a.slice(eq + 1);
60
+ flags.add(name);
61
+ flagValues.set(name, value);
62
+ }
63
+ else {
64
+ const name = a.slice(2);
65
+ const next = rest[i + 1];
66
+ if (next !== undefined && !next.startsWith('--') && TAKES_VALUE.has(name)) {
67
+ flags.add(name);
68
+ flagValues.set(name, next);
69
+ i++;
70
+ }
71
+ else {
72
+ flags.add(name);
73
+ }
74
+ }
75
+ }
76
+ else {
77
+ positional.push(a);
78
+ }
79
+ }
80
+ return { command, positional, flags, flagValues };
81
+ }
82
+ const TAKES_VALUE = new Set(['cwd']);
83
+ function resolveAgents(positional, allFlag) {
84
+ if (allFlag)
85
+ return [...SUPPORTED_AGENTS];
86
+ if (positional.length === 0)
87
+ return [];
88
+ const invalid = positional.filter((a) => !isValidAgent(a));
89
+ if (invalid.length > 0) {
90
+ console.error(`Unknown agent(s): ${invalid.join(', ')}`);
91
+ console.error(`Available: ${SUPPORTED_AGENTS.join(', ')}`);
92
+ process.exit(2);
93
+ }
94
+ return positional;
95
+ }
96
+ function reportInstall(results) {
97
+ let failed = 0;
98
+ for (const r of results) {
99
+ const tag = r.status === 'error' ? 'ERROR' : r.status.toUpperCase().padEnd(9);
100
+ console.log(`[${tag}] ${r.agent.padEnd(15)} ${r.configPath}`);
101
+ if (r.message)
102
+ console.log(` ${r.message}`);
103
+ if (r.status === 'error')
104
+ failed++;
105
+ }
106
+ return failed === 0 ? 0 : 1;
107
+ }
108
+ function reportUninstall(results) {
109
+ let failed = 0;
110
+ for (const r of results) {
111
+ const tag = r.status === 'error' ? 'ERROR' : r.status.toUpperCase().padEnd(9);
112
+ console.log(`[${tag}] ${r.agent.padEnd(15)} ${r.configPath}`);
113
+ if (r.message)
114
+ console.log(` ${r.message}`);
115
+ if (r.status === 'error')
116
+ failed++;
117
+ }
118
+ return failed === 0 ? 0 : 1;
119
+ }
120
+ function main(argv) {
121
+ const { command, positional, flags, flagValues } = parseArgs(argv);
122
+ const scope = flags.has('local') ? 'project' : 'global';
123
+ const allFlag = flags.has('all');
124
+ const cwd = flagValues.get('cwd');
125
+ const opts = cwd ? { scope, cwd } : { scope };
126
+ switch (command) {
127
+ case 'help':
128
+ case '--help':
129
+ case '-h': {
130
+ console.log(HELP);
131
+ return 0;
132
+ }
133
+ case 'install': {
134
+ const agents = resolveAgents(positional, allFlag);
135
+ if (agents.length === 0) {
136
+ console.error('No agents specified. Use --all or pass agent names.');
137
+ console.error(`Available: ${SUPPORTED_AGENTS.join(', ')}`);
138
+ return 2;
139
+ }
140
+ const results = installAgents(agents, opts);
141
+ return reportInstall(results);
142
+ }
143
+ case 'uninstall': {
144
+ const agents = resolveAgents(positional, allFlag);
145
+ if (agents.length === 0) {
146
+ console.error('No agents specified. Use --all or pass agent names.');
147
+ console.error(`Available: ${SUPPORTED_AGENTS.join(', ')}`);
148
+ return 2;
149
+ }
150
+ const results = uninstallAgents(agents, opts);
151
+ return reportUninstall(results);
152
+ }
153
+ case 'status': {
154
+ printStatus(detectAll(opts));
155
+ return 0;
156
+ }
157
+ default: {
158
+ console.error(`Unknown command: ${command}`);
159
+ console.log(HELP);
160
+ return 2;
161
+ }
162
+ }
163
+ }
164
+ const exitCode = main(process.argv.slice(2));
165
+ process.exit(exitCode);
166
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["cli.ts"],"names":[],"mappings":"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"}