xtctx 0.3.2 → 0.11.3

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 (308) hide show
  1. package/CHANGELOG.md +317 -122
  2. package/LICENSE +21 -21
  3. package/README.md +154 -121
  4. package/dist/src/cli/disconnect.d.ts +8 -0
  5. package/dist/src/cli/disconnect.d.ts.map +1 -0
  6. package/dist/src/cli/disconnect.js +42 -0
  7. package/dist/src/cli/disconnect.js.map +1 -0
  8. package/dist/src/cli/hook.d.ts +7 -0
  9. package/dist/src/cli/hook.d.ts.map +1 -0
  10. package/dist/src/cli/hook.js +32 -0
  11. package/dist/src/cli/hook.js.map +1 -0
  12. package/dist/src/cli/index.d.ts.map +1 -1
  13. package/dist/src/cli/index.js +86 -33
  14. package/dist/src/cli/index.js.map +1 -1
  15. package/dist/src/cli/setup.d.ts +8 -0
  16. package/dist/src/cli/setup.d.ts.map +1 -0
  17. package/dist/src/cli/setup.js +76 -0
  18. package/dist/src/cli/setup.js.map +1 -0
  19. package/dist/src/cli/status.d.ts +7 -0
  20. package/dist/src/cli/status.d.ts.map +1 -0
  21. package/dist/src/cli/status.js +133 -0
  22. package/dist/src/cli/status.js.map +1 -0
  23. package/dist/src/config/disconnect.d.ts +34 -0
  24. package/dist/src/config/disconnect.d.ts.map +1 -0
  25. package/dist/src/config/disconnect.js +386 -0
  26. package/dist/src/config/disconnect.js.map +1 -0
  27. package/dist/src/config/managed-block.d.ts +29 -0
  28. package/dist/src/config/managed-block.d.ts.map +1 -0
  29. package/dist/src/config/managed-block.js +67 -0
  30. package/dist/src/config/managed-block.js.map +1 -0
  31. package/dist/src/config/mcp-config.d.ts +93 -0
  32. package/dist/src/config/mcp-config.d.ts.map +1 -0
  33. package/dist/src/config/mcp-config.js +556 -0
  34. package/dist/src/config/mcp-config.js.map +1 -0
  35. package/dist/src/config/setup.d.ts +39 -0
  36. package/dist/src/config/setup.d.ts.map +1 -0
  37. package/dist/src/config/setup.js +379 -0
  38. package/dist/src/config/setup.js.map +1 -0
  39. package/dist/src/config/skills.d.ts +73 -0
  40. package/dist/src/config/skills.d.ts.map +1 -0
  41. package/dist/src/config/skills.js +427 -0
  42. package/dist/src/config/skills.js.map +1 -0
  43. package/dist/src/handoff/embeddings.d.ts +26 -0
  44. package/dist/src/handoff/embeddings.d.ts.map +1 -0
  45. package/dist/src/handoff/embeddings.js +132 -0
  46. package/dist/src/handoff/embeddings.js.map +1 -0
  47. package/dist/src/handoff/sqlite-index.d.ts +52 -0
  48. package/dist/src/handoff/sqlite-index.d.ts.map +1 -0
  49. package/dist/src/handoff/sqlite-index.js +905 -0
  50. package/dist/src/handoff/sqlite-index.js.map +1 -0
  51. package/dist/src/handoff/types.d.ts +63 -0
  52. package/dist/src/handoff/types.d.ts.map +1 -0
  53. package/dist/src/handoff/types.js +2 -0
  54. package/dist/src/handoff/types.js.map +1 -0
  55. package/dist/src/handoff/vector.d.ts +4 -0
  56. package/dist/src/handoff/vector.d.ts.map +1 -0
  57. package/dist/src/handoff/vector.js +31 -0
  58. package/dist/src/handoff/vector.js.map +1 -0
  59. package/dist/src/mcp/server.d.ts +3 -20
  60. package/dist/src/mcp/server.d.ts.map +1 -1
  61. package/dist/src/mcp/server.js +90 -205
  62. package/dist/src/mcp/server.js.map +1 -1
  63. package/dist/src/mcp/tools/continuity.d.ts +21 -0
  64. package/dist/src/mcp/tools/continuity.d.ts.map +1 -0
  65. package/dist/src/mcp/tools/continuity.js +55 -0
  66. package/dist/src/mcp/tools/continuity.js.map +1 -0
  67. package/dist/src/mcp/tools/manifest.d.ts +40 -0
  68. package/dist/src/mcp/tools/manifest.d.ts.map +1 -0
  69. package/dist/src/mcp/tools/manifest.js +105 -0
  70. package/dist/src/mcp/tools/manifest.js.map +1 -0
  71. package/dist/src/mcp/tools/sessions.d.ts +18 -31
  72. package/dist/src/mcp/tools/sessions.d.ts.map +1 -1
  73. package/dist/src/mcp/tools/sessions.js +109 -16
  74. package/dist/src/mcp/tools/sessions.js.map +1 -1
  75. package/dist/src/runtime/services.d.ts +11 -38
  76. package/dist/src/runtime/services.d.ts.map +1 -1
  77. package/dist/src/runtime/services.js +61 -200
  78. package/dist/src/runtime/services.js.map +1 -1
  79. package/dist/src/scrapers/antigravity.d.ts +52 -0
  80. package/dist/src/scrapers/antigravity.d.ts.map +1 -0
  81. package/dist/src/scrapers/antigravity.js +869 -0
  82. package/dist/src/scrapers/antigravity.js.map +1 -0
  83. package/dist/src/scrapers/base.d.ts +53 -1
  84. package/dist/src/scrapers/base.d.ts.map +1 -1
  85. package/dist/src/scrapers/base.js +93 -4
  86. package/dist/src/scrapers/base.js.map +1 -1
  87. package/dist/src/scrapers/claude-code.d.ts +37 -6
  88. package/dist/src/scrapers/claude-code.d.ts.map +1 -1
  89. package/dist/src/scrapers/claude-code.js +214 -40
  90. package/dist/src/scrapers/claude-code.js.map +1 -1
  91. package/dist/src/scrapers/codex.d.ts +36 -6
  92. package/dist/src/scrapers/codex.d.ts.map +1 -1
  93. package/dist/src/scrapers/codex.js +283 -60
  94. package/dist/src/scrapers/codex.js.map +1 -1
  95. package/dist/src/scrapers/copilot-cli.d.ts +34 -0
  96. package/dist/src/scrapers/copilot-cli.d.ts.map +1 -0
  97. package/dist/src/scrapers/copilot-cli.js +342 -0
  98. package/dist/src/scrapers/copilot-cli.js.map +1 -0
  99. package/dist/src/scrapers/copilot.d.ts +41 -8
  100. package/dist/src/scrapers/copilot.d.ts.map +1 -1
  101. package/dist/src/scrapers/copilot.js +256 -118
  102. package/dist/src/scrapers/copilot.js.map +1 -1
  103. package/dist/src/scrapers/cursor.d.ts +24 -9
  104. package/dist/src/scrapers/cursor.d.ts.map +1 -1
  105. package/dist/src/scrapers/cursor.js +259 -152
  106. package/dist/src/scrapers/cursor.js.map +1 -1
  107. package/dist/src/scrapers/index.d.ts +23 -0
  108. package/dist/src/scrapers/index.d.ts.map +1 -0
  109. package/dist/src/scrapers/index.js +22 -0
  110. package/dist/src/scrapers/index.js.map +1 -0
  111. package/dist/src/scrapers/opencode.d.ts +37 -0
  112. package/dist/src/scrapers/opencode.d.ts.map +1 -0
  113. package/dist/src/scrapers/opencode.js +277 -0
  114. package/dist/src/scrapers/opencode.js.map +1 -0
  115. package/dist/src/scrapers/registry.d.ts +1 -0
  116. package/dist/src/scrapers/registry.d.ts.map +1 -1
  117. package/dist/src/scrapers/registry.js +3 -0
  118. package/dist/src/scrapers/registry.js.map +1 -1
  119. package/dist/src/tools/sources.d.ts +28 -0
  120. package/dist/src/tools/sources.d.ts.map +1 -0
  121. package/dist/src/tools/sources.js +149 -0
  122. package/dist/src/tools/sources.js.map +1 -0
  123. package/dist/src/types/config.d.ts +24 -37
  124. package/dist/src/types/config.d.ts.map +1 -1
  125. package/dist/src/types/index.d.ts +0 -2
  126. package/dist/src/types/index.d.ts.map +1 -1
  127. package/dist/src/types/index.js +0 -2
  128. package/dist/src/types/index.js.map +1 -1
  129. package/dist/src/types/scraper.d.ts +34 -5
  130. package/dist/src/types/scraper.d.ts.map +1 -1
  131. package/dist/src/utils/atomic-file.d.ts +8 -0
  132. package/dist/src/utils/atomic-file.d.ts.map +1 -0
  133. package/dist/src/utils/atomic-file.js +15 -0
  134. package/dist/src/utils/atomic-file.js.map +1 -0
  135. package/dist/src/utils/errors.d.ts +7 -0
  136. package/dist/src/utils/errors.d.ts.map +1 -0
  137. package/dist/src/utils/errors.js +16 -0
  138. package/dist/src/utils/errors.js.map +1 -0
  139. package/dist/src/utils/package-info.d.ts +11 -0
  140. package/dist/src/utils/package-info.d.ts.map +1 -0
  141. package/dist/src/utils/package-info.js +30 -0
  142. package/dist/src/utils/package-info.js.map +1 -0
  143. package/dist/src/utils/project-scope.d.ts +19 -0
  144. package/dist/src/utils/project-scope.d.ts.map +1 -0
  145. package/dist/src/utils/project-scope.js +61 -0
  146. package/dist/src/utils/project-scope.js.map +1 -0
  147. package/package.json +70 -66
  148. package/dist/src/api/routes/config.d.ts +0 -4
  149. package/dist/src/api/routes/config.d.ts.map +0 -1
  150. package/dist/src/api/routes/config.js +0 -61
  151. package/dist/src/api/routes/config.js.map +0 -1
  152. package/dist/src/api/routes/knowledge.d.ts +0 -4
  153. package/dist/src/api/routes/knowledge.d.ts.map +0 -1
  154. package/dist/src/api/routes/knowledge.js +0 -40
  155. package/dist/src/api/routes/knowledge.js.map +0 -1
  156. package/dist/src/api/routes/search.d.ts +0 -7
  157. package/dist/src/api/routes/search.d.ts.map +0 -1
  158. package/dist/src/api/routes/search.js +0 -108
  159. package/dist/src/api/routes/search.js.map +0 -1
  160. package/dist/src/api/routes/sources.d.ts +0 -12
  161. package/dist/src/api/routes/sources.d.ts.map +0 -1
  162. package/dist/src/api/routes/sources.js +0 -70
  163. package/dist/src/api/routes/sources.js.map +0 -1
  164. package/dist/src/api/server.d.ts +0 -26
  165. package/dist/src/api/server.d.ts.map +0 -1
  166. package/dist/src/api/server.js +0 -312
  167. package/dist/src/api/server.js.map +0 -1
  168. package/dist/src/cli/ingest.d.ts +0 -6
  169. package/dist/src/cli/ingest.d.ts.map +0 -1
  170. package/dist/src/cli/ingest.js +0 -11
  171. package/dist/src/cli/ingest.js.map +0 -1
  172. package/dist/src/cli/init.d.ts +0 -6
  173. package/dist/src/cli/init.d.ts.map +0 -1
  174. package/dist/src/cli/init.js +0 -105
  175. package/dist/src/cli/init.js.map +0 -1
  176. package/dist/src/cli/serve.d.ts +0 -7
  177. package/dist/src/cli/serve.d.ts.map +0 -1
  178. package/dist/src/cli/serve.js +0 -100
  179. package/dist/src/cli/serve.js.map +0 -1
  180. package/dist/src/cli/sync.d.ts +0 -5
  181. package/dist/src/cli/sync.d.ts.map +0 -1
  182. package/dist/src/cli/sync.js +0 -13
  183. package/dist/src/cli/sync.js.map +0 -1
  184. package/dist/src/compaction/pipeline.d.ts +0 -19
  185. package/dist/src/compaction/pipeline.d.ts.map +0 -1
  186. package/dist/src/compaction/pipeline.js +0 -37
  187. package/dist/src/compaction/pipeline.js.map +0 -1
  188. package/dist/src/compaction/providers/cli.d.ts +0 -13
  189. package/dist/src/compaction/providers/cli.d.ts.map +0 -1
  190. package/dist/src/compaction/providers/cli.js +0 -60
  191. package/dist/src/compaction/providers/cli.js.map +0 -1
  192. package/dist/src/compaction/rule-based.d.ts +0 -8
  193. package/dist/src/compaction/rule-based.d.ts.map +0 -1
  194. package/dist/src/compaction/rule-based.js +0 -120
  195. package/dist/src/compaction/rule-based.js.map +0 -1
  196. package/dist/src/config/loader.d.ts +0 -12
  197. package/dist/src/config/loader.d.ts.map +0 -1
  198. package/dist/src/config/loader.js +0 -76
  199. package/dist/src/config/loader.js.map +0 -1
  200. package/dist/src/config/mappings/claude-code.d.ts +0 -3
  201. package/dist/src/config/mappings/claude-code.d.ts.map +0 -1
  202. package/dist/src/config/mappings/claude-code.js +0 -31
  203. package/dist/src/config/mappings/claude-code.js.map +0 -1
  204. package/dist/src/config/mappings/codex.d.ts +0 -3
  205. package/dist/src/config/mappings/codex.d.ts.map +0 -1
  206. package/dist/src/config/mappings/codex.js +0 -31
  207. package/dist/src/config/mappings/codex.js.map +0 -1
  208. package/dist/src/config/mappings/copilot.d.ts +0 -3
  209. package/dist/src/config/mappings/copilot.d.ts.map +0 -1
  210. package/dist/src/config/mappings/copilot.js +0 -33
  211. package/dist/src/config/mappings/copilot.js.map +0 -1
  212. package/dist/src/config/mappings/cursor.d.ts +0 -3
  213. package/dist/src/config/mappings/cursor.d.ts.map +0 -1
  214. package/dist/src/config/mappings/cursor.js +0 -29
  215. package/dist/src/config/mappings/cursor.js.map +0 -1
  216. package/dist/src/config/sync.d.ts +0 -13
  217. package/dist/src/config/sync.d.ts.map +0 -1
  218. package/dist/src/config/sync.js +0 -96
  219. package/dist/src/config/sync.js.map +0 -1
  220. package/dist/src/ingestion/coordinator.d.ts +0 -37
  221. package/dist/src/ingestion/coordinator.d.ts.map +0 -1
  222. package/dist/src/ingestion/coordinator.js +0 -127
  223. package/dist/src/ingestion/coordinator.js.map +0 -1
  224. package/dist/src/ingestion/daemon.d.ts +0 -17
  225. package/dist/src/ingestion/daemon.d.ts.map +0 -1
  226. package/dist/src/ingestion/daemon.js +0 -35
  227. package/dist/src/ingestion/daemon.js.map +0 -1
  228. package/dist/src/ingestion/watcher.d.ts +0 -19
  229. package/dist/src/ingestion/watcher.d.ts.map +0 -1
  230. package/dist/src/ingestion/watcher.js +0 -70
  231. package/dist/src/ingestion/watcher.js.map +0 -1
  232. package/dist/src/knowledge/autotag.d.ts +0 -3
  233. package/dist/src/knowledge/autotag.d.ts.map +0 -1
  234. package/dist/src/knowledge/autotag.js +0 -24
  235. package/dist/src/knowledge/autotag.js.map +0 -1
  236. package/dist/src/knowledge/dedup.d.ts +0 -7
  237. package/dist/src/knowledge/dedup.d.ts.map +0 -1
  238. package/dist/src/knowledge/dedup.js +0 -15
  239. package/dist/src/knowledge/dedup.js.map +0 -1
  240. package/dist/src/knowledge/repository.d.ts +0 -12
  241. package/dist/src/knowledge/repository.d.ts.map +0 -1
  242. package/dist/src/knowledge/repository.js +0 -74
  243. package/dist/src/knowledge/repository.js.map +0 -1
  244. package/dist/src/mcp/tools/config.d.ts +0 -36
  245. package/dist/src/mcp/tools/config.d.ts.map +0 -1
  246. package/dist/src/mcp/tools/config.js +0 -54
  247. package/dist/src/mcp/tools/config.js.map +0 -1
  248. package/dist/src/mcp/tools/knowledge.d.ts +0 -17
  249. package/dist/src/mcp/tools/knowledge.d.ts.map +0 -1
  250. package/dist/src/mcp/tools/knowledge.js +0 -46
  251. package/dist/src/mcp/tools/knowledge.js.map +0 -1
  252. package/dist/src/mcp/tools/search.d.ts +0 -22
  253. package/dist/src/mcp/tools/search.d.ts.map +0 -1
  254. package/dist/src/mcp/tools/search.js +0 -30
  255. package/dist/src/mcp/tools/search.js.map +0 -1
  256. package/dist/src/mcp/tools/write.d.ts +0 -38
  257. package/dist/src/mcp/tools/write.d.ts.map +0 -1
  258. package/dist/src/mcp/tools/write.js +0 -97
  259. package/dist/src/mcp/tools/write.js.map +0 -1
  260. package/dist/src/runtime/ingestion.d.ts +0 -17
  261. package/dist/src/runtime/ingestion.d.ts.map +0 -1
  262. package/dist/src/runtime/ingestion.js +0 -106
  263. package/dist/src/runtime/ingestion.js.map +0 -1
  264. package/dist/src/scrapers/gemini.d.ts +0 -17
  265. package/dist/src/scrapers/gemini.d.ts.map +0 -1
  266. package/dist/src/scrapers/gemini.js +0 -245
  267. package/dist/src/scrapers/gemini.js.map +0 -1
  268. package/dist/src/store/embeddings.d.ts +0 -9
  269. package/dist/src/store/embeddings.d.ts.map +0 -1
  270. package/dist/src/store/embeddings.js +0 -28
  271. package/dist/src/store/embeddings.js.map +0 -1
  272. package/dist/src/store/lance.d.ts +0 -25
  273. package/dist/src/store/lance.d.ts.map +0 -1
  274. package/dist/src/store/lance.js +0 -74
  275. package/dist/src/store/lance.js.map +0 -1
  276. package/dist/src/store/search.d.ts +0 -18
  277. package/dist/src/store/search.d.ts.map +0 -1
  278. package/dist/src/store/search.js +0 -55
  279. package/dist/src/store/search.js.map +0 -1
  280. package/dist/src/types/compaction.d.ts +0 -29
  281. package/dist/src/types/compaction.d.ts.map +0 -1
  282. package/dist/src/types/compaction.js +0 -2
  283. package/dist/src/types/compaction.js.map +0 -1
  284. package/dist/src/types/context.d.ts +0 -33
  285. package/dist/src/types/context.d.ts.map +0 -1
  286. package/dist/src/types/context.js +0 -18
  287. package/dist/src/types/context.js.map +0 -1
  288. package/dist/src/utils/retry.d.ts +0 -11
  289. package/dist/src/utils/retry.d.ts.map +0 -1
  290. package/dist/src/utils/retry.js +0 -46
  291. package/dist/src/utils/retry.js.map +0 -1
  292. package/dist/src/utils/shutdown.d.ts +0 -25
  293. package/dist/src/utils/shutdown.d.ts.map +0 -1
  294. package/dist/src/utils/shutdown.js +0 -56
  295. package/dist/src/utils/shutdown.js.map +0 -1
  296. package/dist/web/apple-touch-icon.png +0 -0
  297. package/dist/web/assets/index-Nuadr5ox.css +0 -1
  298. package/dist/web/assets/index-aA0u8eXA.js +0 -3504
  299. package/dist/web/assets/primeicons-C6QP2o4f.woff2 +0 -0
  300. package/dist/web/assets/primeicons-DMOk5skT.eot +0 -0
  301. package/dist/web/assets/primeicons-Dr5RGzOO.svg +0 -345
  302. package/dist/web/assets/primeicons-MpK4pl85.ttf +0 -0
  303. package/dist/web/assets/primeicons-WjwUDZjB.woff +0 -0
  304. package/dist/web/favicon.ico +0 -0
  305. package/dist/web/favicon.svg +0 -21
  306. package/dist/web/index.html +0 -21
  307. package/dist/web/site.webmanifest +0 -19
  308. package/dist/web/vite.svg +0 -1
@@ -0,0 +1,556 @@
1
+ import { readFile, rm } from "node:fs/promises";
2
+ import { homedir } from "node:os";
3
+ import { join } from "node:path";
4
+ import { isDeepStrictEqual } from "node:util";
5
+ import { parse as parseToml, stringify as stringifyToml } from "@iarna/toml";
6
+ import { writeFileAtomic } from "../utils/atomic-file.js";
7
+ import { errorMessage } from "../utils/errors.js";
8
+ /**
9
+ * Tools with native MCP configuration support.
10
+ *
11
+ * Tools NOT listed here receive MCP connection details embedded in their
12
+ * managed-block instructions file via `renderMcpServersMarkdown`.
13
+ */
14
+ const NATIVE_MCP_TOOLS = {
15
+ // Claude Code — `.mcp.json` at project root, `mcpServers` key, stdio entries.
16
+ // Keep both aliases because older local setup files may refer to `claude`,
17
+ // while the current scraper/tool id is `claude-code`.
18
+ claude: {
19
+ projectPath: (root) => join(root, ".mcp.json"),
20
+ },
21
+ "claude-code": {
22
+ projectPath: (root) => join(root, ".mcp.json"),
23
+ },
24
+ // Cursor — `.cursor/mcp.json` at project root, same JSON shape.
25
+ cursor: {
26
+ projectPath: (root) => join(root, ".cursor", "mcp.json"),
27
+ },
28
+ // VS Code GitHub Copilot — `.vscode/mcp.json`. Note: the root key is
29
+ // `servers`, not `mcpServers` (per VS Code's MCP configuration reference).
30
+ copilot: {
31
+ projectPath: (root) => join(root, ".vscode", "mcp.json"),
32
+ rootKey: "servers",
33
+ },
34
+ // Codex CLI — TOML at `.codex/config.toml` (project) or `~/.codex/config.toml`
35
+ // (global). Server entries live under `[mcp_servers.<name>]` tables. Codex's
36
+ // TOML format uses `command` + `args` + `env` and does NOT include a `type`
37
+ // field (stdio is implicit).
38
+ codex: {
39
+ format: "toml",
40
+ projectPath: (root) => join(root, ".codex", "config.toml"),
41
+ globalPath: (home) => join(home, ".codex", "config.toml"),
42
+ rootKey: "mcp_servers",
43
+ buildEntry: buildCodexEntry,
44
+ },
45
+ // Google Antigravity — JSON at `~/.gemini/antigravity/mcp_config.json`.
46
+ // App-level config under the Gemini state directory; entries omit `type`.
47
+ antigravity: {
48
+ globalPath: (home) => join(home, ".gemini", "antigravity", "mcp_config.json"),
49
+ buildEntry: buildAntigravityEntry,
50
+ },
51
+ // opencode (sst/opencode-ai) — JSON at `opencode.json` (project) or
52
+ // `~/.config/opencode/opencode.json` (global). Top-level `mcp` key. Entries
53
+ // use `type: "local" | "remote"`, `command` as a combined ARRAY of
54
+ // strings (executable + args together), `enabled: true`, and `environment`
55
+ // (not `env`) for env vars on local servers. Remote uses `url` + `headers`.
56
+ opencode: {
57
+ projectPath: (root) => join(root, "opencode.json"),
58
+ globalPath: (home) => join(home, ".config", "opencode", "opencode.json"),
59
+ rootKey: "mcp",
60
+ buildEntry: buildOpencodeEntry,
61
+ },
62
+ // GitHub Copilot CLI (the standalone `~/.copilot/`-rooted CLI, distinct
63
+ // from VS Code Copilot) — JSON at `~/.copilot/mcp-config.json`. User-level
64
+ // only; project-level MCP for Copilot CLI lives in `.mcp.json` at the
65
+ // project root, which is already written by the `claude` / `claude-code`
66
+ // renderers above (one file, two consumers).
67
+ "copilot-cli": {
68
+ globalPath: (home) => join(home, ".copilot", "mcp-config.json"),
69
+ buildEntry: buildCopilotCliEntry,
70
+ },
71
+ };
72
+ export function hasNativeMcpSupport(tool) {
73
+ return tool in NATIVE_MCP_TOOLS;
74
+ }
75
+ export function isGlobalOnlyMcpTool(tool) {
76
+ const renderer = NATIVE_MCP_TOOLS[tool];
77
+ return Boolean(renderer?.globalPath && !renderer.projectPath);
78
+ }
79
+ /**
80
+ * Sync MCP server configs into native formats for tools that support them.
81
+ *
82
+ * For each enabled tool with a renderer:
83
+ * - Prefer the project-scoped path if the renderer provides one
84
+ * - Fall back to the user-scoped path if project is unset (Copilot CLI)
85
+ * - Skip duplicate writes when two renderer aliases resolve to the same
86
+ * file path (claude + claude-code both write `.mcp.json`)
87
+ */
88
+ export async function syncToolMcpConfigs(projectRoot, servers, enabledTools, options = {}) {
89
+ if (servers.length === 0) {
90
+ return { results: [], servers_loaded: 0 };
91
+ }
92
+ const home = options.homeDir ?? homedir();
93
+ const results = [];
94
+ const writtenPaths = new Set();
95
+ for (const tool of enabledTools) {
96
+ const renderer = NATIVE_MCP_TOOLS[tool];
97
+ if (!renderer)
98
+ continue;
99
+ // Choose path: project preferred, fall back to global. Tools without
100
+ // a project path (Copilot CLI) write to global only.
101
+ let configPath = null;
102
+ let scope = "project";
103
+ if (renderer.projectPath) {
104
+ configPath = renderer.projectPath(projectRoot);
105
+ scope = "project";
106
+ }
107
+ else if (renderer.globalPath) {
108
+ configPath = renderer.globalPath(home);
109
+ scope = "global";
110
+ }
111
+ if (!configPath)
112
+ continue;
113
+ if (writtenPaths.has(configPath)) {
114
+ results.push({
115
+ tool,
116
+ path: configPath,
117
+ scope,
118
+ updated: false,
119
+ created: false,
120
+ skipped: true,
121
+ });
122
+ continue;
123
+ }
124
+ writtenPaths.add(configPath);
125
+ const result = await writeMcpConfig(tool, configPath, scope, renderer, servers);
126
+ results.push(result);
127
+ }
128
+ return { results, servers_loaded: servers.length };
129
+ }
130
+ export async function removeMcpServerConfigs(projectRoot, serverName, tools, options = {}) {
131
+ const home = options.homeDir ?? homedir();
132
+ const results = [];
133
+ const writtenPaths = new Set();
134
+ for (const tool of tools) {
135
+ const renderer = NATIVE_MCP_TOOLS[tool];
136
+ if (!renderer)
137
+ continue;
138
+ const target = resolveConfigTarget(projectRoot, home, renderer);
139
+ if (!target)
140
+ continue;
141
+ if (writtenPaths.has(target.path)) {
142
+ results.push({
143
+ tool,
144
+ path: target.path,
145
+ scope: target.scope,
146
+ removed: false,
147
+ skipped: true,
148
+ });
149
+ continue;
150
+ }
151
+ writtenPaths.add(target.path);
152
+ results.push(await removeMcpConfig(tool, target.path, target.scope, renderer, serverName));
153
+ }
154
+ return { results };
155
+ }
156
+ // ---------------------------------------------------------------------------
157
+ // Generic writer + merge
158
+ // ---------------------------------------------------------------------------
159
+ async function writeMcpConfig(tool, configPath, scope, renderer, servers) {
160
+ try {
161
+ const format = renderer.format ?? "json";
162
+ const rootKey = renderer.rootKey ?? "mcpServers";
163
+ const buildEntry = renderer.buildEntry ?? defaultBuildEntry;
164
+ let existingContent = null;
165
+ try {
166
+ existingContent = await readFile(configPath, "utf-8");
167
+ }
168
+ catch (error) {
169
+ if (!isMissingFile(error)) {
170
+ return failedMcpSync(tool, configPath, scope, `Failed to read existing MCP config: ${errorMessage(error)}`);
171
+ }
172
+ }
173
+ let existing = null;
174
+ let hadComments = false;
175
+ if (existingContent !== null) {
176
+ try {
177
+ existing = parseConfig(existingContent, format);
178
+ }
179
+ catch (error) {
180
+ // VS Code-family configs are JSONC in practice: retry with comments
181
+ // stripped before declaring the file unparsable.
182
+ if (format === "json") {
183
+ try {
184
+ existing = JSON.parse(stripJsonComments(existingContent));
185
+ hadComments = true;
186
+ }
187
+ catch {
188
+ return failedMcpSync(tool, configPath, scope, `Failed to parse existing MCP config; leaving it unchanged: ${errorMessage(error)}`);
189
+ }
190
+ }
191
+ else {
192
+ return failedMcpSync(tool, configPath, scope, `Failed to parse existing MCP config; leaving it unchanged: ${errorMessage(error)}`);
193
+ }
194
+ }
195
+ }
196
+ const serverEntries = buildServerEntries(servers, buildEntry);
197
+ const merged = mergeUnderRootKey(existing, rootKey, serverEntries);
198
+ const content = serializeConfig(merged, format);
199
+ if (existingContent !== null && normalizeNewlines(existingContent) === normalizeNewlines(content)) {
200
+ return {
201
+ tool,
202
+ path: configPath,
203
+ scope,
204
+ updated: false,
205
+ created: false,
206
+ skipped: true,
207
+ };
208
+ }
209
+ if (hadComments) {
210
+ // Rewriting would destroy the user's comments. If our entries are
211
+ // already present and identical the file is effectively up to date;
212
+ // otherwise leave it alone and say what to do.
213
+ if (existing && entriesUpToDate(existing, rootKey, serverEntries)) {
214
+ return { tool, path: configPath, scope, updated: false, created: false, skipped: true };
215
+ }
216
+ return {
217
+ tool,
218
+ path: configPath,
219
+ scope,
220
+ updated: false,
221
+ created: false,
222
+ skipped: true,
223
+ warning: `MCP config at ${configPath} contains comments, which xtctx will not rewrite. ` +
224
+ `Add the xtctx server entry manually or remove the comments so xtctx can manage it.`,
225
+ };
226
+ }
227
+ await writeFileAtomic(configPath, content);
228
+ return {
229
+ tool,
230
+ path: configPath,
231
+ scope,
232
+ updated: existing !== null,
233
+ created: existing === null,
234
+ skipped: false,
235
+ };
236
+ }
237
+ catch (error) {
238
+ return failedMcpSync(tool, configPath, scope, `Failed to write MCP config: ${errorMessage(error)}`);
239
+ }
240
+ }
241
+ function parseConfig(raw, format) {
242
+ if (format === "toml") {
243
+ return parseToml(raw);
244
+ }
245
+ return JSON.parse(raw);
246
+ }
247
+ /** Remove // and /* *\/ comments outside strings (JSONC tolerance). */
248
+ function stripJsonComments(raw) {
249
+ let out = "";
250
+ let inString = false;
251
+ let escaped = false;
252
+ for (let index = 0; index < raw.length; index += 1) {
253
+ const char = raw[index];
254
+ if (inString) {
255
+ out += char;
256
+ if (escaped) {
257
+ escaped = false;
258
+ }
259
+ else if (char === "\\") {
260
+ escaped = true;
261
+ }
262
+ else if (char === '"') {
263
+ inString = false;
264
+ }
265
+ continue;
266
+ }
267
+ if (char === '"') {
268
+ inString = true;
269
+ out += char;
270
+ continue;
271
+ }
272
+ if (char === "/" && raw[index + 1] === "/") {
273
+ while (index < raw.length && raw[index] !== "\n")
274
+ index += 1;
275
+ out += "\n";
276
+ continue;
277
+ }
278
+ if (char === "/" && raw[index + 1] === "*") {
279
+ index += 2;
280
+ while (index < raw.length && !(raw[index] === "*" && raw[index + 1] === "/"))
281
+ index += 1;
282
+ index += 1;
283
+ continue;
284
+ }
285
+ out += char;
286
+ }
287
+ return out;
288
+ }
289
+ function entriesUpToDate(existing, rootKey, serverEntries) {
290
+ const root = existing[rootKey];
291
+ if (!root || typeof root !== "object" || Array.isArray(root)) {
292
+ return false;
293
+ }
294
+ return Object.entries(serverEntries).every(([name, entry]) => isDeepStrictEqual(root[name], entry));
295
+ }
296
+ function serializeConfig(value, format) {
297
+ if (format === "toml") {
298
+ // @iarna/toml emits a final newline already; normalise to single trailing.
299
+ return stringifyToml(value).replace(/\n*$/, "\n");
300
+ }
301
+ return JSON.stringify(value, null, 2) + "\n";
302
+ }
303
+ function buildServerEntries(servers, buildEntry) {
304
+ const result = {};
305
+ for (const server of servers) {
306
+ result[server.name] = buildEntry(server);
307
+ }
308
+ return result;
309
+ }
310
+ function mergeUnderRootKey(existing, rootKey, serverEntries) {
311
+ if (!existing) {
312
+ return { [rootKey]: serverEntries };
313
+ }
314
+ const existingEntries = isRecord(existing[rootKey]) ? existing[rootKey] : {};
315
+ return {
316
+ ...existing,
317
+ [rootKey]: { ...existingEntries, ...serverEntries },
318
+ };
319
+ }
320
+ function isRecord(value) {
321
+ return !!value && typeof value === "object" && !Array.isArray(value);
322
+ }
323
+ function isMissingFile(error) {
324
+ return Boolean(error && typeof error === "object" && error.code === "ENOENT");
325
+ }
326
+ function failedMcpSync(tool, configPath, scope, warning) {
327
+ return {
328
+ tool,
329
+ path: configPath,
330
+ scope,
331
+ updated: false,
332
+ created: false,
333
+ skipped: false,
334
+ warning,
335
+ failed: true,
336
+ };
337
+ }
338
+ // ---------------------------------------------------------------------------
339
+ // Per-tool entry builders
340
+ // ---------------------------------------------------------------------------
341
+ /**
342
+ * Default Claude-Code-style entry shape.
343
+ *
344
+ * { type: "stdio" | "sse" | "streamable-http", command, args, env, url }
345
+ *
346
+ * Used by Claude Code, Cursor, and (with rootKey override) VS Code Copilot.
347
+ */
348
+ function defaultBuildEntry(server) {
349
+ const entry = {};
350
+ if (server.transport === "sse" || server.transport === "streamable-http") {
351
+ entry.type = server.transport;
352
+ if (server.url)
353
+ entry.url = server.url;
354
+ }
355
+ else {
356
+ entry.type = "stdio";
357
+ entry.command = server.command;
358
+ if (server.args?.length)
359
+ entry.args = server.args;
360
+ }
361
+ if (server.env && Object.keys(server.env).length > 0) {
362
+ entry.env = { ...server.env };
363
+ }
364
+ return entry;
365
+ }
366
+ /**
367
+ * Codex TOML entry. No `type` field (stdio is implicit). Renders as:
368
+ *
369
+ * [mcp_servers.xtctx]
370
+ * command = "npx"
371
+ * args = ["-y", "xtctx"]
372
+ */
373
+ function buildCodexEntry(server) {
374
+ const entry = {};
375
+ if (server.transport === "sse" || server.transport === "streamable-http") {
376
+ if (server.url)
377
+ entry.url = server.url;
378
+ }
379
+ else {
380
+ entry.command = server.command;
381
+ if (server.args?.length)
382
+ entry.args = server.args;
383
+ }
384
+ if (server.env && Object.keys(server.env).length > 0) {
385
+ entry.env = { ...server.env };
386
+ }
387
+ return entry;
388
+ }
389
+ /**
390
+ * Antigravity MCP entry shape. Same as Codex (no `type` field) but JSON.
391
+ *
392
+ * "mcpServers": {
393
+ * "xtctx": { "command": "npx", "args": [...] }
394
+ * }
395
+ */
396
+ function buildAntigravityEntry(server) {
397
+ return buildCodexEntry(server);
398
+ }
399
+ /**
400
+ * opencode entry shape (sst/opencode-ai).
401
+ *
402
+ * "mcp": {
403
+ * "xtctx": {
404
+ * "type": "local",
405
+ * "command": ["npx", "-y", "xtctx"],
406
+ * "enabled": true
407
+ * }
408
+ * }
409
+ *
410
+ * Note that opencode's `command` is a combined array (executable + args),
411
+ * env vars use the key `environment`, and remote servers use `type: "remote"`
412
+ * + `url` + optional `headers`.
413
+ */
414
+ function buildOpencodeEntry(server) {
415
+ if (server.transport === "sse" || server.transport === "streamable-http") {
416
+ const remote = {
417
+ type: "remote",
418
+ url: server.url ?? "",
419
+ enabled: true,
420
+ };
421
+ if (server.env && Object.keys(server.env).length > 0) {
422
+ remote.headers = { ...server.env };
423
+ }
424
+ return remote;
425
+ }
426
+ const command = [server.command, ...(server.args ?? [])];
427
+ const local = {
428
+ type: "local",
429
+ command,
430
+ enabled: true,
431
+ };
432
+ if (server.env && Object.keys(server.env).length > 0) {
433
+ local.environment = { ...server.env };
434
+ }
435
+ return local;
436
+ }
437
+ /**
438
+ * GitHub Copilot CLI entry shape (`~/.copilot/mcp-config.json`).
439
+ *
440
+ * "mcpServers": {
441
+ * "xtctx": {
442
+ * "type": "local",
443
+ * "command": "npx",
444
+ * "args": ["-y", "xtctx"],
445
+ * "tools": ["*"]
446
+ * }
447
+ * }
448
+ *
449
+ * Copilot CLI uses `type: "local" | "http"` and a `tools` allowlist
450
+ * (`["*"]` = allow all tools the server exposes). The defaults grant
451
+ * full access; tighten by editing the file post-sync if needed.
452
+ */
453
+ function buildCopilotCliEntry(server) {
454
+ if (server.transport === "sse" || server.transport === "streamable-http") {
455
+ const http = {
456
+ type: "http",
457
+ url: server.url ?? "",
458
+ tools: ["*"],
459
+ };
460
+ if (server.env && Object.keys(server.env).length > 0) {
461
+ http.env = { ...server.env };
462
+ }
463
+ return http;
464
+ }
465
+ const local = {
466
+ type: "local",
467
+ command: server.command,
468
+ args: server.args ?? [],
469
+ tools: ["*"],
470
+ };
471
+ if (server.env && Object.keys(server.env).length > 0) {
472
+ local.env = { ...server.env };
473
+ }
474
+ return local;
475
+ }
476
+ // ---------------------------------------------------------------------------
477
+ // Misc helpers
478
+ // ---------------------------------------------------------------------------
479
+ function normalizeNewlines(input) {
480
+ return input.replace(/\r\n/g, "\n");
481
+ }
482
+ async function removeMcpConfig(tool, configPath, scope, renderer, serverName) {
483
+ try {
484
+ const format = renderer.format ?? "json";
485
+ const rootKey = renderer.rootKey ?? "mcpServers";
486
+ let existingContent;
487
+ try {
488
+ existingContent = await readFile(configPath, "utf-8");
489
+ }
490
+ catch {
491
+ return {
492
+ tool,
493
+ path: configPath,
494
+ scope,
495
+ removed: false,
496
+ skipped: true,
497
+ };
498
+ }
499
+ const existing = parseConfig(existingContent, format);
500
+ const existingEntries = isRecord(existing[rootKey]) ? { ...existing[rootKey] } : {};
501
+ if (!(serverName in existingEntries)) {
502
+ return {
503
+ tool,
504
+ path: configPath,
505
+ scope,
506
+ removed: false,
507
+ skipped: true,
508
+ };
509
+ }
510
+ delete existingEntries[serverName];
511
+ const updated = { ...existing, [rootKey]: existingEntries };
512
+ // If removing our entry leaves a project file that is nothing but an
513
+ // empty xtctx container, setup created it and disconnect owns removing it
514
+ // — leaving `{"mcp":{}}` behind is litter, not preservation. User-global
515
+ // app configs are left in place: they belong to the tool, not to us.
516
+ const onlyEmptyContainer = scope === "project" &&
517
+ Object.keys(existingEntries).length === 0 &&
518
+ Object.keys(updated).length === 1 &&
519
+ Object.prototype.hasOwnProperty.call(updated, rootKey);
520
+ if (onlyEmptyContainer) {
521
+ await rm(configPath, { force: true });
522
+ return { tool, path: configPath, scope, removed: true, skipped: false };
523
+ }
524
+ const content = serializeConfig(updated, format);
525
+ if (normalizeNewlines(existingContent) !== normalizeNewlines(content)) {
526
+ await writeFileAtomic(configPath, content);
527
+ }
528
+ return {
529
+ tool,
530
+ path: configPath,
531
+ scope,
532
+ removed: true,
533
+ skipped: false,
534
+ };
535
+ }
536
+ catch (error) {
537
+ return {
538
+ tool,
539
+ path: configPath,
540
+ scope,
541
+ removed: false,
542
+ skipped: false,
543
+ warning: `Failed to remove MCP config: ${errorMessage(error)}`,
544
+ };
545
+ }
546
+ }
547
+ function resolveConfigTarget(projectRoot, home, renderer) {
548
+ if (renderer.projectPath) {
549
+ return { path: renderer.projectPath(projectRoot), scope: "project" };
550
+ }
551
+ if (renderer.globalPath) {
552
+ return { path: renderer.globalPath(home), scope: "global" };
553
+ }
554
+ return null;
555
+ }
556
+ //# sourceMappingURL=mcp-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-config.js","sourceRoot":"","sources":["../../../src/config/mcp-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import { type McpServerDefinition } from "./mcp-config.js";
2
+ export interface SetupOptions {
3
+ projectPath?: string;
4
+ yes?: boolean;
5
+ repair?: boolean;
6
+ homeDir?: string;
7
+ selectedSkillIds?: string[];
8
+ includeGlobalMcp?: boolean;
9
+ }
10
+ export interface SetupResult {
11
+ projectRoot: string;
12
+ configPath: string;
13
+ writes: Array<{
14
+ path: string;
15
+ kind: string;
16
+ changed: boolean;
17
+ }>;
18
+ warnings: string[];
19
+ /** Hard failures (unreadable/unwritable configs); setup exits nonzero. */
20
+ failures: string[];
21
+ }
22
+ export interface PlannedSetupWrite {
23
+ path: string;
24
+ kind: string;
25
+ }
26
+ export declare function runSetup(options?: SetupOptions): Promise<SetupResult>;
27
+ export declare function setupProject(options?: SetupOptions): Promise<SetupResult>;
28
+ export declare function describeSetupPlan(projectPath?: string, selectedSkillIds?: string[], includeGlobalMcp?: boolean): {
29
+ projectRoot: string;
30
+ writes: PlannedSetupWrite[];
31
+ };
32
+ export declare function inspectManagedFile(filePath: string): Promise<{
33
+ exists: boolean;
34
+ blockCount: number;
35
+ staleReferences: string[];
36
+ }>;
37
+ export declare function xtctxServerDefinition(): McpServerDefinition;
38
+ export declare function pathExists(filePath: string): Promise<boolean>;
39
+ //# sourceMappingURL=setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/config/setup.ts"],"names":[],"mappings":"AAUA,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,iBAAiB,CAAC;AASzB,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAChE,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,0EAA0E;IAC1E,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AASD,wBAAsB,QAAQ,CAAC,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,CAI/E;AAED,wBAAsB,YAAY,CAAC,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,CAuFnF;AAED,wBAAgB,iBAAiB,CAC/B,WAAW,CAAC,EAAE,MAAM,EACpB,gBAAgB,GAAE,MAAM,EAAsB,EAC9C,gBAAgB,UAAQ,GACvB;IACD,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,iBAAiB,EAAE,CAAC;CAC7B,CA0CA;AAkBD,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IAClE,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B,CAAC,CAWD;AAED,wBAAgB,qBAAqB,IAAI,mBAAmB,CAO3D;AAuQD,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOnE"}