@vibecodr/cli 0.2.10 → 1.0.0-rc.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 (256) hide show
  1. package/CHANGELOG.md +53 -18
  2. package/MIGRATION.md +73 -0
  3. package/README.md +89 -72
  4. package/dist/auth/official-client.d.ts +6 -0
  5. package/dist/auth/official-client.d.ts.map +1 -0
  6. package/dist/auth/official-client.js +1 -0
  7. package/dist/auth/official-client.js.map +1 -0
  8. package/dist/auth/token-manager.d.ts +40 -0
  9. package/dist/auth/token-manager.d.ts.map +1 -0
  10. package/dist/auth/token-manager.js +1 -2
  11. package/dist/auth/token-manager.js.map +1 -0
  12. package/dist/bin/vc-tools.d.ts +3 -0
  13. package/dist/bin/vc-tools.d.ts.map +1 -0
  14. package/dist/bin/vc-tools.js +7 -0
  15. package/dist/bin/vc-tools.js.map +1 -0
  16. package/dist/bin/vibecodr-mcp.d.ts +3 -0
  17. package/dist/bin/vibecodr-mcp.d.ts.map +1 -0
  18. package/dist/bin/vibecodr-mcp.js +37 -0
  19. package/dist/bin/vibecodr-mcp.js.map +1 -0
  20. package/dist/cli/errors.d.ts +28 -0
  21. package/dist/cli/errors.d.ts.map +1 -0
  22. package/dist/cli/errors.js +1 -0
  23. package/dist/cli/errors.js.map +1 -0
  24. package/dist/cli/output.d.ts +16 -0
  25. package/dist/cli/output.d.ts.map +1 -0
  26. package/dist/cli/output.js +1 -0
  27. package/dist/cli/output.js.map +1 -0
  28. package/dist/cli/parse.d.ts +18 -0
  29. package/dist/cli/parse.d.ts.map +1 -0
  30. package/dist/cli/parse.js +1 -0
  31. package/dist/cli/parse.js.map +1 -0
  32. package/dist/clients/base.d.ts +20 -0
  33. package/dist/clients/base.d.ts.map +1 -0
  34. package/dist/clients/base.js +1 -0
  35. package/dist/clients/base.js.map +1 -0
  36. package/dist/clients/claude-code.d.ts +5 -0
  37. package/dist/clients/claude-code.d.ts.map +1 -0
  38. package/dist/clients/claude-code.js +88 -0
  39. package/dist/clients/claude-code.js.map +1 -0
  40. package/dist/clients/claude-desktop.d.ts +5 -0
  41. package/dist/clients/claude-desktop.d.ts.map +1 -0
  42. package/dist/clients/claude-desktop.js +97 -0
  43. package/dist/clients/claude-desktop.js.map +1 -0
  44. package/dist/clients/codex.d.ts +5 -0
  45. package/dist/clients/codex.d.ts.map +1 -0
  46. package/dist/clients/codex.js +1 -0
  47. package/dist/clients/codex.js.map +1 -0
  48. package/dist/clients/cursor.d.ts +5 -0
  49. package/dist/clients/cursor.d.ts.map +1 -0
  50. package/dist/clients/cursor.js +1 -1
  51. package/dist/clients/cursor.js.map +1 -0
  52. package/dist/clients/vscode.d.ts +5 -0
  53. package/dist/clients/vscode.d.ts.map +1 -0
  54. package/dist/clients/vscode.js +5 -1
  55. package/dist/clients/vscode.js.map +1 -0
  56. package/dist/clients/windsurf.d.ts +5 -0
  57. package/dist/clients/windsurf.d.ts.map +1 -0
  58. package/dist/clients/windsurf.js +1 -0
  59. package/dist/clients/windsurf.js.map +1 -0
  60. package/dist/commands/call.d.ts +9 -0
  61. package/dist/commands/call.d.ts.map +1 -0
  62. package/dist/commands/call.js +1 -0
  63. package/dist/commands/call.js.map +1 -0
  64. package/dist/commands/config.d.ts +3 -0
  65. package/dist/commands/config.d.ts.map +1 -0
  66. package/dist/commands/config.js +1 -0
  67. package/dist/commands/config.js.map +1 -0
  68. package/dist/commands/context.d.ts +15 -0
  69. package/dist/commands/context.d.ts.map +1 -0
  70. package/dist/commands/context.js +2 -5
  71. package/dist/commands/context.js.map +1 -0
  72. package/dist/commands/doctor.d.ts +3 -0
  73. package/dist/commands/doctor.d.ts.map +1 -0
  74. package/dist/commands/doctor.js +2 -1
  75. package/dist/commands/doctor.js.map +1 -0
  76. package/dist/commands/help.d.ts +3 -0
  77. package/dist/commands/help.d.ts.map +1 -0
  78. package/dist/commands/help.js +1 -0
  79. package/dist/commands/help.js.map +1 -0
  80. package/dist/commands/install.d.ts +3 -0
  81. package/dist/commands/install.d.ts.map +1 -0
  82. package/dist/commands/install.js +23 -5
  83. package/dist/commands/install.js.map +1 -0
  84. package/dist/commands/login.d.ts +3 -0
  85. package/dist/commands/login.d.ts.map +1 -0
  86. package/dist/commands/login.js +1 -0
  87. package/dist/commands/login.js.map +1 -0
  88. package/dist/commands/logout.d.ts +3 -0
  89. package/dist/commands/logout.d.ts.map +1 -0
  90. package/dist/commands/logout.js +1 -0
  91. package/dist/commands/logout.js.map +1 -0
  92. package/dist/commands/pulse-publish.d.ts +3 -0
  93. package/dist/commands/pulse-publish.d.ts.map +1 -0
  94. package/dist/commands/pulse-publish.js +1 -0
  95. package/dist/commands/pulse-publish.js.map +1 -0
  96. package/dist/commands/pulse-setup.d.ts +3 -0
  97. package/dist/commands/pulse-setup.d.ts.map +1 -0
  98. package/dist/commands/pulse-setup.js +5 -3
  99. package/dist/commands/pulse-setup.js.map +1 -0
  100. package/dist/commands/pulse.d.ts +3 -0
  101. package/dist/commands/pulse.d.ts.map +1 -0
  102. package/dist/commands/pulse.js +1 -0
  103. package/dist/commands/pulse.js.map +1 -0
  104. package/dist/commands/status.d.ts +3 -0
  105. package/dist/commands/status.d.ts.map +1 -0
  106. package/dist/commands/status.js +1 -0
  107. package/dist/commands/status.js.map +1 -0
  108. package/dist/commands/tools.d.ts +3 -0
  109. package/dist/commands/tools.d.ts.map +1 -0
  110. package/dist/commands/tools.js +1 -0
  111. package/dist/commands/tools.js.map +1 -0
  112. package/dist/commands/uninstall.d.ts +3 -0
  113. package/dist/commands/uninstall.d.ts.map +1 -0
  114. package/dist/commands/uninstall.js +12 -4
  115. package/dist/commands/uninstall.js.map +1 -0
  116. package/dist/commands/upload.d.ts +3 -0
  117. package/dist/commands/upload.d.ts.map +1 -0
  118. package/dist/commands/upload.js +1 -0
  119. package/dist/commands/upload.js.map +1 -0
  120. package/dist/commands/whoami.d.ts +3 -0
  121. package/dist/commands/whoami.d.ts.map +1 -0
  122. package/dist/commands/whoami.js +82 -0
  123. package/dist/commands/whoami.js.map +1 -0
  124. package/dist/core/interactive-input.d.ts +7 -0
  125. package/dist/core/interactive-input.d.ts.map +1 -0
  126. package/dist/core/interactive-input.js +1 -0
  127. package/dist/core/interactive-input.js.map +1 -0
  128. package/dist/core/mcp-client.d.ts +17 -0
  129. package/dist/core/mcp-client.d.ts.map +1 -0
  130. package/dist/core/mcp-client.js +1 -0
  131. package/dist/core/mcp-client.js.map +1 -0
  132. package/dist/core/redaction.d.ts +2 -0
  133. package/dist/core/redaction.d.ts.map +1 -0
  134. package/dist/core/redaction.js +36 -2
  135. package/dist/core/redaction.js.map +1 -0
  136. package/dist/core/renderers.d.ts +8 -0
  137. package/dist/core/renderers.d.ts.map +1 -0
  138. package/dist/core/renderers.js +1 -0
  139. package/dist/core/renderers.js.map +1 -0
  140. package/dist/doctor/run.d.ts +10 -0
  141. package/dist/doctor/run.d.ts.map +1 -0
  142. package/dist/doctor/run.js +12 -3
  143. package/dist/doctor/run.js.map +1 -0
  144. package/dist/legacy/cli/errors.d.ts +9 -0
  145. package/dist/legacy/cli/errors.d.ts.map +1 -0
  146. package/dist/legacy/cli/errors.js +23 -0
  147. package/dist/legacy/cli/errors.js.map +1 -0
  148. package/dist/legacy/cli/install.d.ts +24 -0
  149. package/dist/legacy/cli/install.d.ts.map +1 -0
  150. package/dist/legacy/cli/install.js +307 -0
  151. package/dist/legacy/cli/install.js.map +1 -0
  152. package/dist/legacy/cli/output.d.ts +17 -0
  153. package/dist/legacy/cli/output.d.ts.map +1 -0
  154. package/dist/legacy/cli/output.js +36 -0
  155. package/dist/legacy/cli/output.js.map +1 -0
  156. package/dist/legacy/cli/parser.d.ts +33 -0
  157. package/dist/legacy/cli/parser.d.ts.map +1 -0
  158. package/dist/legacy/cli/parser.js +177 -0
  159. package/dist/legacy/cli/parser.js.map +1 -0
  160. package/dist/legacy/cli/run.d.ts +11 -0
  161. package/dist/legacy/cli/run.d.ts.map +1 -0
  162. package/dist/legacy/cli/run.js +2947 -0
  163. package/dist/legacy/cli/run.js.map +1 -0
  164. package/dist/legacy/config/credential-store.d.ts +8 -0
  165. package/dist/legacy/config/credential-store.d.ts.map +1 -0
  166. package/dist/legacy/config/credential-store.js +52 -0
  167. package/dist/legacy/config/credential-store.js.map +1 -0
  168. package/dist/legacy/config/store.d.ts +63 -0
  169. package/dist/legacy/config/store.d.ts.map +1 -0
  170. package/dist/legacy/config/store.js +311 -0
  171. package/dist/legacy/config/store.js.map +1 -0
  172. package/dist/legacy/core/api-client.d.ts +45 -0
  173. package/dist/legacy/core/api-client.d.ts.map +1 -0
  174. package/dist/legacy/core/api-client.js +204 -0
  175. package/dist/legacy/core/api-client.js.map +1 -0
  176. package/dist/legacy/core/contracts.d.ts +488 -0
  177. package/dist/legacy/core/contracts.d.ts.map +1 -0
  178. package/dist/legacy/core/contracts.js +386 -0
  179. package/dist/legacy/core/contracts.js.map +1 -0
  180. package/dist/legacy/core/goal-coverage.d.ts +15 -0
  181. package/dist/legacy/core/goal-coverage.d.ts.map +1 -0
  182. package/dist/legacy/core/goal-coverage.js +169 -0
  183. package/dist/legacy/core/goal-coverage.js.map +1 -0
  184. package/dist/legacy/core/redaction.d.ts +4 -0
  185. package/dist/legacy/core/redaction.d.ts.map +1 -0
  186. package/dist/legacy/core/redaction.js +121 -0
  187. package/dist/legacy/core/redaction.js.map +1 -0
  188. package/dist/legacy/core/validators.d.ts +8 -0
  189. package/dist/legacy/core/validators.d.ts.map +1 -0
  190. package/dist/legacy/core/validators.js +102 -0
  191. package/dist/legacy/core/validators.js.map +1 -0
  192. package/dist/legacy/core/version.d.ts +3 -0
  193. package/dist/legacy/core/version.d.ts.map +1 -0
  194. package/dist/legacy/core/version.js +3 -0
  195. package/dist/legacy/core/version.js.map +1 -0
  196. package/dist/legacy/index.d.ts +8 -0
  197. package/dist/legacy/index.d.ts.map +1 -0
  198. package/dist/legacy/index.js +8 -0
  199. package/dist/legacy/index.js.map +1 -0
  200. package/dist/platform/browser.d.ts +7 -0
  201. package/dist/platform/browser.d.ts.map +1 -0
  202. package/dist/platform/browser.js +1 -0
  203. package/dist/platform/browser.js.map +1 -0
  204. package/dist/platform/exec.d.ts +3 -0
  205. package/dist/platform/exec.d.ts.map +1 -0
  206. package/dist/platform/exec.js +10 -1
  207. package/dist/platform/exec.js.map +1 -0
  208. package/dist/platform/paths.d.ts +9 -0
  209. package/dist/platform/paths.d.ts.map +1 -0
  210. package/dist/platform/paths.js +13 -0
  211. package/dist/platform/paths.js.map +1 -0
  212. package/dist/platform/prompt.d.ts +5 -0
  213. package/dist/platform/prompt.d.ts.map +1 -0
  214. package/dist/platform/prompt.js +1 -0
  215. package/dist/platform/prompt.js.map +1 -0
  216. package/dist/storage/config-store.d.ts +15 -0
  217. package/dist/storage/config-store.d.ts.map +1 -0
  218. package/dist/storage/config-store.js +1 -0
  219. package/dist/storage/config-store.js.map +1 -0
  220. package/dist/storage/file-lock.d.ts +7 -0
  221. package/dist/storage/file-lock.d.ts.map +1 -0
  222. package/dist/storage/file-lock.js +1 -0
  223. package/dist/storage/file-lock.js.map +1 -0
  224. package/dist/storage/install-manifest.d.ts +12 -0
  225. package/dist/storage/install-manifest.d.ts.map +1 -0
  226. package/dist/storage/install-manifest.js +1 -0
  227. package/dist/storage/install-manifest.js.map +1 -0
  228. package/dist/storage/secret-store.d.ts +36 -0
  229. package/dist/storage/secret-store.d.ts.map +1 -0
  230. package/dist/storage/secret-store.js +1 -0
  231. package/dist/storage/secret-store.js.map +1 -0
  232. package/dist/types/auth.d.ts +55 -0
  233. package/dist/types/auth.d.ts.map +1 -0
  234. package/dist/types/auth.js +1 -0
  235. package/dist/types/auth.js.map +1 -0
  236. package/dist/types/config.d.ts +29 -0
  237. package/dist/types/config.d.ts.map +1 -0
  238. package/dist/types/config.js +1 -0
  239. package/dist/types/config.js.map +1 -0
  240. package/dist/types/install.d.ts +26 -0
  241. package/dist/types/install.d.ts.map +1 -0
  242. package/dist/types/install.js +1 -0
  243. package/dist/types/install.js.map +1 -0
  244. package/docs/API-CONTRACT.md +606 -0
  245. package/docs/CLOUDFLARE-PRIMITIVE-FIT.md +212 -0
  246. package/docs/RELEASE-CHECKLIST.md +297 -0
  247. package/docs/SECURITY.md +227 -0
  248. package/docs/VALIDATION-MATRIX.md +58 -0
  249. package/docs/commands.md +49 -29
  250. package/docs/legacy/AGENT-TOOLKIT-RFC.md +1395 -0
  251. package/docs/legacy/CLI-GUIDELINES-AUDIT.md +95 -0
  252. package/docs/legacy/COMPLETION-AUDIT.md +542 -0
  253. package/docs/legacy/vc-tools-finetune.md +982 -0
  254. package/docs/legacy/vc-tools-goal-browser-run-containers.md +465 -0
  255. package/docs/legacy/vc-tools-goal-original.md +249 -0
  256. package/package.json +37 -8
@@ -1,4 +1,29 @@
1
1
  const REDACTED = "[redacted]";
2
+ const SAFE_OPERATOR_KEYS = new Set([
3
+ "artifactid",
4
+ "browsermsused",
5
+ "cachedtokens",
6
+ "capability",
7
+ "completiontokens",
8
+ "contenttype",
9
+ "credentialtype",
10
+ "errorcode",
11
+ "errorkey",
12
+ "inputtokens",
13
+ "jobid",
14
+ "operationid",
15
+ "outputtokens",
16
+ "prompttokens",
17
+ "requestid",
18
+ "runid",
19
+ "stage",
20
+ "status",
21
+ "tokencount",
22
+ "tokenkind",
23
+ "tokensused",
24
+ "totaltokens",
25
+ "traceid"
26
+ ]);
2
27
  const SENSITIVE_KEY_PATTERNS = [
3
28
  /^authorization$/i,
4
29
  /^cookie$/i,
@@ -6,7 +31,8 @@ const SENSITIVE_KEY_PATTERNS = [
6
31
  /(^|[-_])token$/i,
7
32
  /(^|[-_])secret($|[-_])/i,
8
33
  /password/i,
9
- /credential/i,
34
+ /^credential$/i,
35
+ /^credentials$/i,
10
36
  /^api[-_]?key$/i,
11
37
  /(^|[-_])api[-_]?key$/i,
12
38
  /^private[-_]?key$/i,
@@ -17,7 +43,9 @@ const SENSITIVE_KEY_PATTERNS = [
17
43
  /^fileBase64$/i,
18
44
  /^code$/i,
19
45
  /^content$/i,
20
- /^descriptor$/i
46
+ /^descriptor$/i,
47
+ /^descriptorSetup$/i,
48
+ /^setupTasks$/i
21
49
  ];
22
50
  const SENSITIVE_STRING_PATTERNS = [
23
51
  /\bBearer\s+[A-Za-z0-9._~+/=-]+/i,
@@ -27,8 +55,13 @@ const SENSITIVE_STRING_PATTERNS = [
27
55
  /\b(token|secret|api[-_ ]?key)\s*[:=]\s*\S+/i
28
56
  ];
29
57
  function isSensitiveKey(key) {
58
+ if (SAFE_OPERATOR_KEYS.has(normalizeKey(key)))
59
+ return false;
30
60
  return SENSITIVE_KEY_PATTERNS.some((pattern) => pattern.test(key));
31
61
  }
62
+ function normalizeKey(key) {
63
+ return key.replace(/[^a-z0-9]/gi, "").toLowerCase();
64
+ }
32
65
  function isCanonicalOperationDiagnosticsCode(path) {
33
66
  if (path.length < 4)
34
67
  return false;
@@ -54,3 +87,4 @@ export function redactForOutput(value, keyHint, path = []) {
54
87
  }
55
88
  return output;
56
89
  }
90
+ //# sourceMappingURL=redaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redaction.js","sourceRoot":"","sources":["../../src/core/redaction.ts"],"names":[],"mappings":"AAAA,MAAM,QAAQ,GAAG,YAAY,CAAC;AAE9B,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC;IACjC,YAAY;IACZ,eAAe;IACf,cAAc;IACd,YAAY;IACZ,kBAAkB;IAClB,aAAa;IACb,gBAAgB;IAChB,WAAW;IACX,UAAU;IACV,aAAa;IACb,OAAO;IACP,aAAa;IACb,cAAc;IACd,cAAc;IACd,WAAW;IACX,OAAO;IACP,OAAO;IACP,QAAQ;IACR,YAAY;IACZ,WAAW;IACX,YAAY;IACZ,aAAa;IACb,SAAS;CACV,CAAC,CAAC;AAEH,MAAM,sBAAsB,GAAG;IAC7B,kBAAkB;IAClB,WAAW;IACX,eAAe;IACf,iBAAiB;IACjB,yBAAyB;IACzB,WAAW;IACX,eAAe;IACf,gBAAgB;IAChB,gBAAgB;IAChB,uBAAuB;IACvB,oBAAoB;IACpB,sBAAsB;IACtB,qBAAqB;IACrB,sBAAsB;IACtB,cAAc;IACd,eAAe;IACf,SAAS;IACT,YAAY;IACZ,eAAe;IACf,oBAAoB;IACpB,eAAe;CAChB,CAAC;AAEF,MAAM,yBAAyB,GAAG;IAChC,iCAAiC;IACjC,8BAA8B;IAC9B,wBAAwB;IACxB,uBAAuB;IACvB,6CAA6C;CAC9C,CAAC;AAEF,SAAS,cAAc,CAAC,GAAW;IACjC,IAAI,kBAAkB,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAC5D,OAAO,sBAAsB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,YAAY,CAAC,GAAW;IAC/B,OAAO,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;AACtD,CAAC;AAED,SAAS,mCAAmC,CAAC,IAAuB;IAClE,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAClC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5B,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,mBAAmB;WACjC,IAAI,CAAC,CAAC,CAAC,KAAK,WAAW;WACvB,IAAI,CAAC,CAAC,CAAC,KAAK,aAAa;WACzB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAc,EAAE,OAAgB,EAAE,OAA0B,EAAE;IAC5F,IAAI,OAAO,IAAI,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,mCAAmC,CAAC,IAAI,CAAC;QAAE,OAAO,QAAQ,CAAC;IACtG,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;IAC7F,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,yBAAyB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QAClG,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACtD,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC,EAAE,CAAC;QAC7E,MAAM,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,8 @@
1
+ export declare function formatJson(value: unknown): string;
2
+ export declare function summarizeToolSchema(inputSchema: Record<string, unknown> | undefined): {
3
+ required: string[];
4
+ optional: string[];
5
+ skeleton: Record<string, unknown>;
6
+ };
7
+ export declare function renderToolResult(result: unknown): string;
8
+ //# sourceMappingURL=renderers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderers.d.ts","sourceRoot":"","sources":["../../src/core/renderers.ts"],"names":[],"mappings":"AAAA,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEjD;AAED,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG;IACrF,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC,CAcA;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAkBxD"}
@@ -32,3 +32,4 @@ export function renderToolResult(result) {
32
32
  return formatJson(typed.structuredContent);
33
33
  return formatJson(result);
34
34
  }
35
+ //# sourceMappingURL=renderers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderers.js","sourceRoot":"","sources":["../../src/core/renderers.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,UAAU,CAAC,KAAc;IACvC,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,WAAgD;IAKlF,MAAM,WAAW,GAAG,WAAW,EAAE,CAAC,UAAU,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;QACzC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC;QAC3E,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,aAAa,GAAG,WAAW,EAAE,CAAC,YAAY,CAAC,CAAC;IAClD,MAAM,UAAU,GAAG,OAAO,aAAa,KAAK,QAAQ,IAAI,aAAa;QACnE,CAAC,CAAC,aAAwD;QAC1D,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,CACjC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CACxK,CAAC;IACF,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IACpF,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAe;IAC9C,MAAM,KAAK,GAAG,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,CAAC,CAAC,MAIpD,CAAC,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QACjC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YACjC,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,MAAM,IAAI,IAAI,IAAK,IAA0B,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBACtG,MAAM,IAAI,GAAI,IAA2B,CAAC,IAAI,CAAC;gBAC/C,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE;oBAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;IACH,CAAC;IACD,IAAI,KAAK,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5C,IAAI,KAAK,CAAC,iBAAiB,KAAK,SAAS;QAAE,OAAO,UAAU,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACtF,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { SecretStore } from "../storage/secret-store.js";
2
+ import { TokenManager } from "../auth/token-manager.js";
3
+ import type { GlobalOptions } from "../types/config.js";
4
+ export interface DoctorCheck {
5
+ id: string;
6
+ status: "pass" | "warn" | "fail";
7
+ summary: string;
8
+ }
9
+ export declare function runDoctor(globalOptions: GlobalOptions, tokenManager: TokenManager, secretStore: SecretStore, targetClient?: string): Promise<DoctorCheck[]>;
10
+ //# sourceMappingURL=run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/doctor/run.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAKxD,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;CACjB;AA6CD,wBAAsB,SAAS,CAAC,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CA+FjK"}
@@ -1,9 +1,7 @@
1
1
  import { access } from "node:fs/promises";
2
2
  import { constants as fsConstants } from "node:fs";
3
3
  import { dirname, resolve } from "node:path";
4
- import { SecretStore } from "../storage/secret-store.js";
5
- import { TokenManager } from "../auth/token-manager.js";
6
- import { codexConfigPath, cursorUserConfigPath, vscodeWorkspaceConfigPath, windsurfLegacyConfigPath, windsurfUserConfigPath } from "../platform/paths.js";
4
+ import { claudeDesktopConfigPath, codexConfigPath, cursorUserConfigPath, vscodeWorkspaceConfigPath, windsurfLegacyConfigPath, windsurfUserConfigPath } from "../platform/paths.js";
7
5
  import { browserLauncherAvailable } from "../platform/browser.js";
8
6
  import { commandExists } from "../platform/exec.js";
9
7
  function detectBrowserLauncher() {
@@ -128,5 +126,16 @@ export async function runDoctor(globalOptions, tokenManager, secretStore, target
128
126
  summary: `Legacy Windsurf plugin path: ${windsurfLegacyConfigPath()}`
129
127
  });
130
128
  }
129
+ if (targetClient === "claude-desktop") {
130
+ checks.push(await configLocationCheck(claudeDesktopConfigPath(), "claude-desktop-config"));
131
+ checks.push({
132
+ id: "npx-available",
133
+ status: commandExists("npx") ? "pass" : "warn",
134
+ summary: commandExists("npx")
135
+ ? "npx is on PATH (required for the mcp-remote stdio proxy used by Claude Desktop)."
136
+ : "npx is not on PATH. Install Node.js so Claude Desktop can launch the mcp-remote stdio proxy."
137
+ });
138
+ }
131
139
  return checks;
132
140
  }
141
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/doctor/run.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export type CliExitCode = 1 | 2 | 3 | 4 | 5 | 6;
2
+ export declare class CliError extends Error {
3
+ readonly code: string;
4
+ readonly exitCode: CliExitCode;
5
+ readonly details?: unknown;
6
+ constructor(code: string, message: string, exitCode?: CliExitCode, details?: unknown);
7
+ }
8
+ export declare function toCliError(error: unknown): CliError;
9
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/legacy/cli/errors.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,WAAW,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAEhD,qBAAa,QAAS,SAAQ,KAAK;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC/B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;gBAEf,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,GAAE,WAAe,EAAE,OAAO,CAAC,EAAE,OAAO;CAOxF;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,QAAQ,CAUnD"}
@@ -0,0 +1,23 @@
1
+ import { redactSecrets } from "../core/redaction.js";
2
+ export class CliError extends Error {
3
+ code;
4
+ exitCode;
5
+ details;
6
+ constructor(code, message, exitCode = 1, details) {
7
+ super(redactSecrets(message));
8
+ this.name = "CliError";
9
+ this.code = code;
10
+ this.exitCode = exitCode;
11
+ this.details = details;
12
+ }
13
+ }
14
+ export function toCliError(error) {
15
+ if (error instanceof CliError) {
16
+ return error;
17
+ }
18
+ if (error instanceof Error) {
19
+ return new CliError("unexpected.failure", redactSecrets(error.message), 1);
20
+ }
21
+ return new CliError("unexpected.failure", "An unexpected failure occurred.", 1);
22
+ }
23
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/legacy/cli/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAIrD,MAAM,OAAO,QAAS,SAAQ,KAAK;IACxB,IAAI,CAAS;IACb,QAAQ,CAAc;IACtB,OAAO,CAAW;IAE3B,YAAY,IAAY,EAAE,OAAe,EAAE,WAAwB,CAAC,EAAE,OAAiB;QACrF,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;QAC9B,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF;AAED,MAAM,UAAU,UAAU,CAAC,KAAc;IACvC,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,IAAI,QAAQ,CAAC,oBAAoB,EAAE,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7E,CAAC;IAED,OAAO,IAAI,QAAQ,CAAC,oBAAoB,EAAE,iCAAiC,EAAE,CAAC,CAAC,CAAC;AAClF,CAAC"}
@@ -0,0 +1,24 @@
1
+ export type ClientId = "codex" | "cursor" | "vscode" | "windsurf" | "claude-desktop" | "claude-code";
2
+ export declare const INSTALLABLE_CLIENTS: ClientId[];
3
+ export interface InstallRequest {
4
+ client: ClientId;
5
+ serverUrl: string;
6
+ serverName: string;
7
+ installDir?: string | undefined;
8
+ overwrite?: boolean | undefined;
9
+ dryRun?: boolean | undefined;
10
+ cwd?: string | undefined;
11
+ env?: NodeJS.ProcessEnv | undefined;
12
+ }
13
+ export type InstallMethod = "file" | "cli";
14
+ export interface InstallResult {
15
+ client: ClientId;
16
+ method: InstallMethod;
17
+ changed: boolean;
18
+ location: string;
19
+ nextStep: string;
20
+ backupPath?: string | undefined;
21
+ }
22
+ export declare function isInstallableClient(value: string): value is ClientId;
23
+ export declare function installClient(request: InstallRequest): Promise<InstallResult>;
24
+ //# sourceMappingURL=install.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../src/legacy/cli/install.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,QAAQ,GAChB,OAAO,GACP,QAAQ,GACR,QAAQ,GACR,UAAU,GACV,gBAAgB,GAChB,aAAa,CAAC;AAElB,eAAO,MAAM,mBAAmB,EAAE,QAAQ,EAOzC,CAAC;AAEF,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,QAAQ,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAChC,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC;CACrC;AAED,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,KAAK,CAAC;AAE3C,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,QAAQ,CAAC;IACjB,MAAM,EAAE,aAAa,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,QAAQ,CAEpE;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAqBnF"}
@@ -0,0 +1,307 @@
1
+ import { spawn, spawnSync } from "node:child_process";
2
+ import { promises as fs } from "node:fs";
3
+ import os from "node:os";
4
+ import path from "node:path";
5
+ import { CliError } from "./errors.js";
6
+ export const INSTALLABLE_CLIENTS = [
7
+ "codex",
8
+ "cursor",
9
+ "vscode",
10
+ "windsurf",
11
+ "claude-desktop",
12
+ "claude-code"
13
+ ];
14
+ export function isInstallableClient(value) {
15
+ return INSTALLABLE_CLIENTS.includes(value);
16
+ }
17
+ export async function installClient(request) {
18
+ switch (request.client) {
19
+ case "codex":
20
+ return installCodex(request);
21
+ case "cursor":
22
+ return installCursor(request);
23
+ case "vscode":
24
+ return installVsCode(request);
25
+ case "windsurf":
26
+ return installWindsurf(request);
27
+ case "claude-desktop":
28
+ return installClaudeDesktop(request);
29
+ case "claude-code":
30
+ return installClaudeCode(request);
31
+ default:
32
+ throw new CliError("install.unsupported_client", `Automatic install is not supported for client "${String(request.client)}". Supported: ${INSTALLABLE_CLIENTS.join(", ")}.`, 2);
33
+ }
34
+ }
35
+ async function installCodex(request) {
36
+ if (!request.dryRun && commandExists("codex", request.env)) {
37
+ try {
38
+ await runCli("codex", ["mcp", "add", request.serverName, "--url", request.serverUrl], request.env);
39
+ return {
40
+ client: "codex",
41
+ method: "cli",
42
+ changed: true,
43
+ location: "codex mcp add",
44
+ nextStep: "Restart Codex or start a new session to load the Agent Computer."
45
+ };
46
+ }
47
+ catch (error) {
48
+ throw new CliError("install.codex_cli_failed", `codex mcp add failed: ${formatErrorMessage(error)}. Re-run with --print to copy the config manually, or install/repair the codex CLI.`, 5);
49
+ }
50
+ }
51
+ if (request.dryRun) {
52
+ return {
53
+ client: "codex",
54
+ method: "cli",
55
+ changed: false,
56
+ location: "codex mcp add",
57
+ nextStep: "Dry run: would call codex mcp add to register the Agent Computer."
58
+ };
59
+ }
60
+ throw new CliError("install.codex_cli_missing", "Codex CLI is not on PATH. Install Codex first, then re-run vc-tools agent connect --client codex, or use --print to copy the MCP config manually.", 5);
61
+ }
62
+ async function installClaudeCode(request) {
63
+ if (!request.dryRun && commandExists("claude", request.env)) {
64
+ try {
65
+ await runCli("claude", ["mcp", "add", "--transport", "http", request.serverName, request.serverUrl], request.env);
66
+ return {
67
+ client: "claude-code",
68
+ method: "cli",
69
+ changed: true,
70
+ location: "claude mcp add",
71
+ nextStep: "Start a new Claude Code session in this workspace to load the Agent Computer."
72
+ };
73
+ }
74
+ catch (error) {
75
+ throw new CliError("install.claude_code_cli_failed", `claude mcp add failed: ${formatErrorMessage(error)}. Re-run with --print to copy the config manually, or repair the claude CLI.`, 5);
76
+ }
77
+ }
78
+ if (request.dryRun) {
79
+ return {
80
+ client: "claude-code",
81
+ method: "cli",
82
+ changed: false,
83
+ location: "claude mcp add",
84
+ nextStep: "Dry run: would call claude mcp add to register the Agent Computer."
85
+ };
86
+ }
87
+ throw new CliError("install.claude_code_cli_missing", "Claude Code CLI is not on PATH. Install Claude Code first, then re-run vc-tools agent connect --client claude-code, or use --print to copy the MCP config manually.", 5);
88
+ }
89
+ async function mergeJsonConfig(request, location, options) {
90
+ const current = await readJsonFile(location);
91
+ const root = isPlainObject(current[options.rootKey]) ? current[options.rootKey] : {};
92
+ const existing = root[request.serverName];
93
+ const nextEntry = options.entryShape(request.serverUrl);
94
+ if (isPlainObject(existing) && JSON.stringify(existing) !== JSON.stringify(nextEntry) && !request.overwrite) {
95
+ throw new CliError("install.conflict", `${request.client} already has an MCP entry named "${request.serverName}" with a different value at ${location}. Re-run with --overwrite to replace it, or pass --name <other> to register under a different name.`, 5);
96
+ }
97
+ const nextRoot = { ...root, [request.serverName]: nextEntry };
98
+ const next = { ...current, [options.rootKey]: nextRoot };
99
+ const beforeText = Object.keys(current).length === 0 ? "" : JSON.stringify(current, null, 2);
100
+ const afterText = JSON.stringify(next, null, 2) + "\n";
101
+ if (beforeText && beforeText + "\n" === afterText) {
102
+ return { changed: false };
103
+ }
104
+ if (request.dryRun) {
105
+ return { changed: true };
106
+ }
107
+ let backupPath;
108
+ if (beforeText.length > 0) {
109
+ backupPath = `${location}.vc-tools.bak`;
110
+ await fs.writeFile(backupPath, beforeText + "\n", { encoding: "utf8", mode: 0o600 });
111
+ }
112
+ await fs.mkdir(path.dirname(location), { recursive: true, mode: 0o700 });
113
+ await atomicWrite(location, afterText);
114
+ return { changed: true, backupPath };
115
+ }
116
+ async function installCursor(request) {
117
+ const location = request.installDir
118
+ ? path.join(request.installDir, "mcp.json")
119
+ : path.join(homeDir(request.env), ".cursor", "mcp.json");
120
+ const result = await mergeJsonConfig(request, location, {
121
+ rootKey: "mcpServers",
122
+ entryShape: (serverUrl) => ({ url: serverUrl })
123
+ });
124
+ return {
125
+ client: "cursor",
126
+ method: "file",
127
+ changed: result.changed,
128
+ location,
129
+ backupPath: result.backupPath,
130
+ nextStep: "Open Cursor (or restart it) and ask the agent to use the Vibecodr Agent Computer."
131
+ };
132
+ }
133
+ async function installWindsurf(request) {
134
+ const location = request.installDir
135
+ ? path.join(request.installDir, "mcp_config.json")
136
+ : path.join(homeDir(request.env), ".codeium", "windsurf", "mcp_config.json");
137
+ const result = await mergeJsonConfig(request, location, {
138
+ rootKey: "mcpServers",
139
+ entryShape: (serverUrl) => ({ serverUrl })
140
+ });
141
+ return {
142
+ client: "windsurf",
143
+ method: "file",
144
+ changed: result.changed,
145
+ location,
146
+ backupPath: result.backupPath,
147
+ nextStep: "Restart Windsurf so it picks up the updated MCP config."
148
+ };
149
+ }
150
+ async function installVsCode(request) {
151
+ if (!request.installDir && !request.dryRun && commandExists("code", request.env)) {
152
+ const payload = JSON.stringify({ name: request.serverName, type: "http", url: request.serverUrl });
153
+ try {
154
+ await runCli("code", ["--add-mcp", payload], request.env);
155
+ return {
156
+ client: "vscode",
157
+ method: "cli",
158
+ changed: true,
159
+ location: "code --add-mcp",
160
+ nextStep: "Reload VS Code MCP servers (Command Palette: MCP: Reload Servers) to load the Agent Computer."
161
+ };
162
+ }
163
+ catch {
164
+ // fall through to workspace file merge below
165
+ }
166
+ }
167
+ const workspaceRoot = request.installDir ?? request.cwd ?? process.cwd();
168
+ const location = path.join(workspaceRoot, ".vscode", "mcp.json");
169
+ const result = await mergeJsonConfig(request, location, {
170
+ rootKey: "servers",
171
+ entryShape: (serverUrl) => ({ type: "http", url: serverUrl })
172
+ });
173
+ return {
174
+ client: "vscode",
175
+ method: "file",
176
+ changed: result.changed,
177
+ location,
178
+ backupPath: result.backupPath,
179
+ nextStep: "Reload the VS Code window (or run MCP: Reload Servers) to pick up the new server."
180
+ };
181
+ }
182
+ async function installClaudeDesktop(request) {
183
+ const location = request.installDir
184
+ ? path.join(request.installDir, "claude_desktop_config.json")
185
+ : claudeDesktopConfigPath(request.env);
186
+ const result = await mergeJsonConfig(request, location, {
187
+ rootKey: "mcpServers",
188
+ entryShape: (serverUrl) => ({
189
+ command: "npx",
190
+ args: ["mcp-remote", serverUrl]
191
+ })
192
+ });
193
+ const nextStepLines = [
194
+ "Restart Claude Desktop. The config uses the mcp-remote stdio proxy because Claude Desktop does not load remote HTTP MCP servers directly; npx must be on PATH (install Node.js if needed).",
195
+ "Alternatively, add the Agent Computer via Claude Desktop Settings -> Connectors -> Add custom connector and paste the MCP URL."
196
+ ];
197
+ if (process.platform !== "darwin" && process.platform !== "win32" && !request.installDir) {
198
+ nextStepLines.unshift("Note: Anthropic does not ship an official Claude Desktop build for Linux. This config was written to the path used by community repackages; if you are not running such a build, install Claude Code instead and re-run vc-tools agent connect --client claude-code.");
199
+ }
200
+ return {
201
+ client: "claude-desktop",
202
+ method: "file",
203
+ changed: result.changed,
204
+ location,
205
+ backupPath: result.backupPath,
206
+ nextStep: nextStepLines.join(" ")
207
+ };
208
+ }
209
+ function claudeDesktopConfigPath(env) {
210
+ const home = homeDir(env);
211
+ if (process.platform === "darwin") {
212
+ return path.join(home, "Library", "Application Support", "Claude", "claude_desktop_config.json");
213
+ }
214
+ if (process.platform === "win32") {
215
+ const appData = firstNonEmpty(env?.APPDATA, process.env.APPDATA) ?? path.join(home, "AppData", "Roaming");
216
+ return path.join(appData, "Claude", "claude_desktop_config.json");
217
+ }
218
+ // Linux: Claude Desktop is not officially shipped by Anthropic. Community repackages
219
+ // (e.g., aaddrick/claude-desktop-debian) use the standard XDG config location.
220
+ // Treat empty XDG_CONFIG_HOME as unset (POSIX guidance) and fall back to ~/.config.
221
+ const xdgConfigHome = firstNonEmpty(env?.XDG_CONFIG_HOME, process.env.XDG_CONFIG_HOME) ?? path.join(home, ".config");
222
+ return path.join(xdgConfigHome, "Claude", "claude_desktop_config.json");
223
+ }
224
+ function firstNonEmpty(...values) {
225
+ for (const value of values) {
226
+ if (typeof value === "string" && value.length > 0) {
227
+ return value;
228
+ }
229
+ }
230
+ return undefined;
231
+ }
232
+ function homeDir(env) {
233
+ return firstNonEmpty(env?.HOME, env?.USERPROFILE) ?? os.homedir();
234
+ }
235
+ async function readJsonFile(location) {
236
+ try {
237
+ const raw = await fs.readFile(location, "utf8");
238
+ if (raw.trim().length === 0) {
239
+ return {};
240
+ }
241
+ try {
242
+ const parsed = JSON.parse(raw);
243
+ return isPlainObject(parsed) ? parsed : {};
244
+ }
245
+ catch (error) {
246
+ throw new CliError("install.config_parse", `Existing config at ${location} is not valid JSON. Repair it before re-running vc-tools agent connect --install.`, 5, { cause: formatErrorMessage(error) });
247
+ }
248
+ }
249
+ catch (error) {
250
+ if (error.code === "ENOENT") {
251
+ return {};
252
+ }
253
+ throw error;
254
+ }
255
+ }
256
+ async function atomicWrite(location, content) {
257
+ const tempPath = `${location}.${process.pid}.${Date.now()}.tmp`;
258
+ await fs.writeFile(tempPath, content, { encoding: "utf8", mode: 0o600 });
259
+ await fs.rename(tempPath, location);
260
+ }
261
+ function isPlainObject(value) {
262
+ return typeof value === "object" && value !== null && !Array.isArray(value);
263
+ }
264
+ function commandExists(command, env) {
265
+ const checker = process.platform === "win32" ? whereExe(env) : "which";
266
+ try {
267
+ const result = spawnSync(checker, [command], { stdio: "ignore", env: env ?? process.env });
268
+ return result.status === 0;
269
+ }
270
+ catch {
271
+ return false;
272
+ }
273
+ }
274
+ function whereExe(env) {
275
+ const systemRoot = (env?.SystemRoot ?? process.env.SystemRoot ?? "C:\\Windows").trim();
276
+ return path.join(systemRoot, "System32", "where.exe");
277
+ }
278
+ function runCli(command, args, env) {
279
+ return new Promise((resolve, reject) => {
280
+ // On Windows, npm-installed CLIs (codex, claude, code) are .cmd/.bat shims that
281
+ // Node.js spawn cannot launch directly without a shell. On POSIX they are real
282
+ // executables and shell: false is correct.
283
+ const useShell = process.platform === "win32";
284
+ const child = spawn(command, args, {
285
+ stdio: "ignore",
286
+ env: env ?? process.env,
287
+ shell: useShell,
288
+ windowsHide: true
289
+ });
290
+ child.once("error", reject);
291
+ child.once("exit", (code) => {
292
+ if (code === 0) {
293
+ resolve();
294
+ }
295
+ else {
296
+ reject(new Error(`${command} exited with code ${code}`));
297
+ }
298
+ });
299
+ });
300
+ }
301
+ function formatErrorMessage(error) {
302
+ if (error instanceof Error) {
303
+ return error.message;
304
+ }
305
+ return String(error);
306
+ }
307
+ //# sourceMappingURL=install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/legacy/cli/install.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { Writable } from "node:stream";
2
+ import type { CliError } from "./errors.js";
3
+ export interface CommandResult {
4
+ message?: string;
5
+ data?: unknown;
6
+ warnings?: string[];
7
+ humanData?: "show" | "hide";
8
+ }
9
+ export interface OutputOptions {
10
+ json: boolean;
11
+ quiet: boolean;
12
+ stdout: Writable;
13
+ stderr: Writable;
14
+ }
15
+ export declare function writeResult(result: CommandResult, options: OutputOptions): void;
16
+ export declare function writeError(error: CliError, options: OutputOptions): void;
17
+ //# sourceMappingURL=output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../../src/legacy/cli/output.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,QAAQ,CAAC;IACjB,MAAM,EAAE,QAAQ,CAAC;CAClB;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAoB/E;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAexE"}
@@ -0,0 +1,36 @@
1
+ import { redactObject, redactSecrets } from "../core/redaction.js";
2
+ export function writeResult(result, options) {
3
+ const warnings = result.warnings ?? [];
4
+ const redactedWarnings = warnings.map((warning) => redactSecrets(warning));
5
+ if (options.json) {
6
+ options.stdout.write(`${JSON.stringify({ ok: true, data: redactObject(result.data ?? {}), warnings: redactedWarnings }, null, 2)}\n`);
7
+ return;
8
+ }
9
+ if (!options.quiet) {
10
+ if (result.message) {
11
+ options.stdout.write(`${redactSecrets(result.message)}\n`);
12
+ }
13
+ if (result.data !== undefined && result.humanData !== "hide") {
14
+ options.stdout.write(`${JSON.stringify(redactObject(result.data), null, 2)}\n`);
15
+ }
16
+ }
17
+ for (const warning of redactedWarnings) {
18
+ options.stderr.write(`Warning: ${warning}\n`);
19
+ }
20
+ }
21
+ export function writeError(error, options) {
22
+ if (options.json) {
23
+ options.stderr.write(`${JSON.stringify({
24
+ ok: false,
25
+ error: {
26
+ code: error.code,
27
+ message: error.message,
28
+ status: error.exitCode,
29
+ details: redactObject(error.details)
30
+ }
31
+ }, null, 2)}\n`);
32
+ return;
33
+ }
34
+ options.stderr.write(`Error (${error.code}): ${error.message}\n`);
35
+ }
36
+ //# sourceMappingURL=output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../../../src/legacy/cli/output.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAiBnE,MAAM,UAAU,WAAW,CAAC,MAAqB,EAAE,OAAsB;IACvE,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;IACvC,MAAM,gBAAgB,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3E,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,gBAAgB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QACtI,OAAO;IACT,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACnB,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC7D,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,IAAI,MAAM,CAAC,SAAS,KAAK,MAAM,EAAE,CAAC;YAC7D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAClF,CAAC;IACH,CAAC;IAED,KAAK,MAAM,OAAO,IAAI,gBAAgB,EAAE,CAAC;QACvC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,OAAO,IAAI,CAAC,CAAC;IAChD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAe,EAAE,OAAsB;IAChE,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;YACrC,EAAE,EAAE,KAAK;YACT,KAAK,EAAE;gBACL,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,MAAM,EAAE,KAAK,CAAC,QAAQ;gBACtB,OAAO,EAAE,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC;aACrC;SACF,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QACjB,OAAO;IACT,CAAC;IAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;AACpE,CAAC"}