@claudetools/cli 0.13.12 → 0.13.15

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 (368) hide show
  1. package/dist/__tests__/factories.d.ts +173 -0
  2. package/dist/__tests__/factories.d.ts.map +1 -0
  3. package/dist/__tests__/factories.js +150 -0
  4. package/dist/__tests__/factories.js.map +1 -0
  5. package/dist/__tests__/helpers.d.ts +36 -0
  6. package/dist/__tests__/helpers.d.ts.map +1 -0
  7. package/dist/__tests__/helpers.js +52 -0
  8. package/dist/__tests__/helpers.js.map +1 -0
  9. package/dist/analytics/index.d.ts +14 -0
  10. package/dist/analytics/index.d.ts.map +1 -0
  11. package/dist/analytics/index.js +259 -0
  12. package/dist/analytics/index.js.map +1 -0
  13. package/dist/analytics/session.d.ts +17 -0
  14. package/dist/analytics/session.d.ts.map +1 -0
  15. package/dist/analytics/session.js +130 -0
  16. package/dist/analytics/session.js.map +1 -0
  17. package/dist/analytics/token-tracker.d.ts +48 -0
  18. package/dist/analytics/token-tracker.d.ts.map +1 -0
  19. package/dist/analytics/token-tracker.js +269 -0
  20. package/dist/analytics/token-tracker.js.map +1 -0
  21. package/dist/analytics/tracker.d.ts +33 -0
  22. package/dist/analytics/tracker.d.ts.map +1 -0
  23. package/dist/analytics/tracker.js +210 -0
  24. package/dist/analytics/tracker.js.map +1 -0
  25. package/dist/api-keys/index.d.ts +15 -0
  26. package/dist/api-keys/index.d.ts.map +1 -0
  27. package/dist/api-keys/index.js +228 -0
  28. package/dist/api-keys/index.js.map +1 -0
  29. package/dist/auth/config.d.ts +15 -0
  30. package/dist/auth/config.d.ts.map +1 -0
  31. package/dist/auth/config.js +67 -0
  32. package/dist/auth/config.js.map +1 -0
  33. package/dist/auth/index.d.ts +8 -0
  34. package/dist/auth/index.d.ts.map +1 -0
  35. package/dist/auth/index.js +299 -0
  36. package/dist/auth/index.js.map +1 -0
  37. package/dist/auth/keychain.d.ts +21 -0
  38. package/dist/auth/keychain.d.ts.map +1 -0
  39. package/dist/auth/keychain.js +256 -0
  40. package/dist/auth/keychain.js.map +1 -0
  41. package/dist/billing/index.d.ts +7 -0
  42. package/dist/billing/index.d.ts.map +1 -0
  43. package/dist/billing/index.js +233 -0
  44. package/dist/billing/index.js.map +1 -0
  45. package/dist/cli.js +291 -43
  46. package/dist/cli.js.map +1 -1
  47. package/dist/commands/hook.d.ts +12 -0
  48. package/dist/commands/hook.d.ts.map +1 -0
  49. package/dist/commands/hook.js +190 -0
  50. package/dist/commands/hook.js.map +1 -0
  51. package/dist/commands/keys.d.ts +4 -0
  52. package/dist/commands/keys.d.ts.map +1 -0
  53. package/dist/commands/keys.js +43 -0
  54. package/dist/commands/keys.js.map +1 -0
  55. package/dist/commands/mcp.d.ts +4 -0
  56. package/dist/commands/mcp.d.ts.map +1 -0
  57. package/dist/commands/mcp.js +43 -0
  58. package/dist/commands/mcp.js.map +1 -0
  59. package/dist/commands/project.d.ts +4 -0
  60. package/dist/commands/project.d.ts.map +1 -0
  61. package/dist/commands/project.js +68 -0
  62. package/dist/commands/project.js.map +1 -0
  63. package/dist/commands/skill.d.ts +4 -0
  64. package/dist/commands/skill.d.ts.map +1 -0
  65. package/dist/commands/skill.js +37 -0
  66. package/dist/commands/skill.js.map +1 -0
  67. package/dist/commands/stacks.d.ts +4 -0
  68. package/dist/commands/stacks.d.ts.map +1 -0
  69. package/dist/commands/stacks.js +103 -0
  70. package/dist/commands/stacks.js.map +1 -0
  71. package/dist/commands/stats.d.ts +4 -0
  72. package/dist/commands/stats.d.ts.map +1 -0
  73. package/dist/commands/stats.js +6 -0
  74. package/dist/commands/stats.js.map +1 -0
  75. package/dist/commands/sync.d.ts +4 -0
  76. package/dist/commands/sync.d.ts.map +1 -0
  77. package/dist/commands/sync.js +60 -0
  78. package/dist/commands/sync.js.map +1 -0
  79. package/dist/commands/update.d.ts +4 -0
  80. package/dist/commands/update.d.ts.map +1 -0
  81. package/dist/commands/update.js +63 -0
  82. package/dist/commands/update.js.map +1 -0
  83. package/dist/daemon/client.d.ts +107 -0
  84. package/dist/daemon/client.d.ts.map +1 -0
  85. package/dist/daemon/client.js +250 -0
  86. package/dist/daemon/client.js.map +1 -0
  87. package/dist/daemon/health.d.ts +38 -0
  88. package/dist/daemon/health.d.ts.map +1 -0
  89. package/dist/daemon/health.js +212 -0
  90. package/dist/daemon/health.js.map +1 -0
  91. package/dist/daemon/index.d.ts +34 -0
  92. package/dist/daemon/index.d.ts.map +1 -0
  93. package/dist/daemon/index.js +197 -0
  94. package/dist/daemon/index.js.map +1 -0
  95. package/dist/daemon/protocol.d.ts +144 -0
  96. package/dist/daemon/protocol.d.ts.map +1 -0
  97. package/dist/daemon/protocol.js +5 -0
  98. package/dist/daemon/protocol.js.map +1 -0
  99. package/dist/gamification/index.d.ts +13 -0
  100. package/dist/gamification/index.d.ts.map +1 -0
  101. package/dist/gamification/index.js +120 -0
  102. package/dist/gamification/index.js.map +1 -0
  103. package/dist/gamification/types.d.ts +34 -0
  104. package/dist/gamification/types.d.ts.map +1 -0
  105. package/dist/gamification/types.js +5 -0
  106. package/dist/gamification/types.js.map +1 -0
  107. package/dist/hooks/index.d.ts +65 -0
  108. package/dist/hooks/index.d.ts.map +1 -0
  109. package/dist/hooks/index.js +403 -0
  110. package/dist/hooks/index.js.map +1 -0
  111. package/dist/lib/api.d.ts +29 -0
  112. package/dist/lib/api.d.ts.map +1 -0
  113. package/dist/lib/api.js +213 -0
  114. package/dist/lib/api.js.map +1 -0
  115. package/dist/lib/browser.d.ts +6 -0
  116. package/dist/lib/browser.d.ts.map +1 -0
  117. package/dist/lib/browser.js +14 -0
  118. package/dist/lib/browser.js.map +1 -0
  119. package/dist/lib/channel-config.d.ts +10 -0
  120. package/dist/lib/channel-config.d.ts.map +1 -0
  121. package/dist/lib/channel-config.js +48 -0
  122. package/dist/lib/channel-config.js.map +1 -0
  123. package/dist/lib/command-runner.d.ts +16 -0
  124. package/dist/lib/command-runner.d.ts.map +1 -0
  125. package/dist/lib/command-runner.js +59 -0
  126. package/dist/lib/command-runner.js.map +1 -0
  127. package/dist/lib/command-utils.d.ts +22 -0
  128. package/dist/lib/command-utils.d.ts.map +1 -0
  129. package/dist/lib/command-utils.js +88 -0
  130. package/dist/lib/command-utils.js.map +1 -0
  131. package/dist/lib/error-handler.d.ts +13 -0
  132. package/dist/lib/error-handler.d.ts.map +1 -0
  133. package/dist/lib/error-handler.js +70 -0
  134. package/dist/lib/error-handler.js.map +1 -0
  135. package/dist/lib/errors.d.ts +35 -0
  136. package/dist/lib/errors.d.ts.map +1 -0
  137. package/dist/lib/errors.js +70 -0
  138. package/dist/lib/errors.js.map +1 -0
  139. package/dist/lib/exit.d.ts +10 -0
  140. package/dist/lib/exit.d.ts.map +1 -0
  141. package/dist/lib/exit.js +21 -0
  142. package/dist/lib/exit.js.map +1 -0
  143. package/dist/lib/formatters.d.ts +65 -0
  144. package/dist/lib/formatters.d.ts.map +1 -0
  145. package/dist/lib/formatters.js +180 -0
  146. package/dist/lib/formatters.js.map +1 -0
  147. package/dist/lib/hybrid-data.d.ts +47 -0
  148. package/dist/lib/hybrid-data.d.ts.map +1 -0
  149. package/dist/lib/hybrid-data.js +326 -0
  150. package/dist/lib/hybrid-data.js.map +1 -0
  151. package/dist/lib/local-store.d.ts +113 -0
  152. package/dist/lib/local-store.d.ts.map +1 -0
  153. package/dist/lib/local-store.js +220 -0
  154. package/dist/lib/local-store.js.map +1 -0
  155. package/dist/lib/machine-id.d.ts +8 -0
  156. package/dist/lib/machine-id.d.ts.map +1 -0
  157. package/dist/lib/machine-id.js +39 -0
  158. package/dist/lib/machine-id.js.map +1 -0
  159. package/dist/lib/network.d.ts +15 -0
  160. package/dist/lib/network.d.ts.map +1 -0
  161. package/dist/lib/network.js +46 -0
  162. package/dist/lib/network.js.map +1 -0
  163. package/dist/lib/theme.d.ts +77 -0
  164. package/dist/lib/theme.d.ts.map +1 -0
  165. package/dist/lib/theme.js +137 -0
  166. package/dist/lib/theme.js.map +1 -0
  167. package/dist/lib/tool-availability.d.ts +13 -0
  168. package/dist/lib/tool-availability.d.ts.map +1 -0
  169. package/dist/lib/tool-availability.js +48 -0
  170. package/dist/lib/tool-availability.js.map +1 -0
  171. package/dist/lib/update-checker.d.ts +21 -0
  172. package/dist/lib/update-checker.d.ts.map +1 -0
  173. package/dist/lib/update-checker.js +110 -0
  174. package/dist/lib/update-checker.js.map +1 -0
  175. package/dist/lib/validation.d.ts +30 -0
  176. package/dist/lib/validation.d.ts.map +1 -0
  177. package/dist/lib/validation.js +82 -0
  178. package/dist/lib/validation.js.map +1 -0
  179. package/dist/lib/validators.d.ts +18 -0
  180. package/dist/lib/validators.d.ts.map +1 -0
  181. package/dist/lib/validators.js +30 -0
  182. package/dist/lib/validators.js.map +1 -0
  183. package/dist/marketplace/api.d.ts +24 -0
  184. package/dist/marketplace/api.d.ts.map +1 -0
  185. package/dist/marketplace/api.js +92 -0
  186. package/dist/marketplace/api.js.map +1 -0
  187. package/dist/marketplace/index.d.ts +13 -0
  188. package/dist/marketplace/index.d.ts.map +1 -0
  189. package/dist/marketplace/index.js +155 -0
  190. package/dist/marketplace/index.js.map +1 -0
  191. package/dist/marketplace/installer.d.ts +18 -0
  192. package/dist/marketplace/installer.d.ts.map +1 -0
  193. package/dist/marketplace/installer.js +184 -0
  194. package/dist/marketplace/installer.js.map +1 -0
  195. package/dist/mcp/api.d.ts +93 -0
  196. package/dist/mcp/api.d.ts.map +1 -0
  197. package/dist/mcp/api.js +106 -0
  198. package/dist/mcp/api.js.map +1 -0
  199. package/dist/mcp/config.d.ts +72 -0
  200. package/dist/mcp/config.d.ts.map +1 -0
  201. package/dist/mcp/config.js +156 -0
  202. package/dist/mcp/config.js.map +1 -0
  203. package/dist/mcp/index.d.ts +54 -0
  204. package/dist/mcp/index.d.ts.map +1 -0
  205. package/dist/mcp/index.js +381 -0
  206. package/dist/mcp/index.js.map +1 -0
  207. package/dist/mcp/prompt.clean.d.ts +25 -0
  208. package/dist/mcp/prompt.clean.d.ts.map +1 -0
  209. package/dist/mcp/prompt.clean.js +206 -0
  210. package/dist/mcp/prompt.clean.js.map +1 -0
  211. package/dist/mcp/prompt.d.ts +52 -0
  212. package/dist/mcp/prompt.d.ts.map +1 -0
  213. package/dist/mcp/prompt.js +210 -0
  214. package/dist/mcp/prompt.js.map +1 -0
  215. package/dist/mcp/secrets.clean.d.ts +18 -0
  216. package/dist/mcp/secrets.clean.d.ts.map +1 -0
  217. package/dist/mcp/secrets.clean.js +357 -0
  218. package/dist/mcp/secrets.clean.js.map +1 -0
  219. package/dist/mcp/secrets.d.ts +46 -0
  220. package/dist/mcp/secrets.d.ts.map +1 -0
  221. package/dist/mcp/secrets.js +339 -0
  222. package/dist/mcp/secrets.js.map +1 -0
  223. package/dist/memory/index.d.ts +14 -0
  224. package/dist/memory/index.d.ts.map +1 -0
  225. package/dist/memory/index.js +98 -0
  226. package/dist/memory/index.js.map +1 -0
  227. package/dist/onboard/agents-md-builder.d.ts.map +1 -1
  228. package/dist/onboard/agents-md-builder.js +45 -0
  229. package/dist/onboard/agents-md-builder.js.map +1 -1
  230. package/dist/onboard/claude-inference.d.ts.map +1 -1
  231. package/dist/onboard/claude-inference.js +31 -5
  232. package/dist/onboard/claude-inference.js.map +1 -1
  233. package/dist/onboard/context7-fetcher.d.ts +1 -1
  234. package/dist/onboard/context7-fetcher.d.ts.map +1 -1
  235. package/dist/onboard/context7-fetcher.js +50 -16
  236. package/dist/onboard/context7-fetcher.js.map +1 -1
  237. package/dist/onboard/docs-builder.d.ts.map +1 -1
  238. package/dist/onboard/docs-builder.js +523 -50
  239. package/dist/onboard/docs-builder.js.map +1 -1
  240. package/dist/onboard/index.d.ts.map +1 -1
  241. package/dist/onboard/index.js +74 -25
  242. package/dist/onboard/index.js.map +1 -1
  243. package/dist/onboard/stack-detector.d.ts.map +1 -1
  244. package/dist/onboard/stack-detector.js +5 -55
  245. package/dist/onboard/stack-detector.js.map +1 -1
  246. package/dist/project/constants.d.ts +21 -0
  247. package/dist/project/constants.d.ts.map +1 -0
  248. package/dist/project/constants.js +21 -0
  249. package/dist/project/constants.js.map +1 -0
  250. package/dist/project/format.d.ts +16 -0
  251. package/dist/project/format.d.ts.map +1 -0
  252. package/dist/project/format.js +40 -0
  253. package/dist/project/format.js.map +1 -0
  254. package/dist/project/git.d.ts +28 -0
  255. package/dist/project/git.d.ts.map +1 -0
  256. package/dist/project/git.js +93 -0
  257. package/dist/project/git.js.map +1 -0
  258. package/dist/project/index.d.ts +36 -0
  259. package/dist/project/index.d.ts.map +1 -0
  260. package/dist/project/index.js +272 -0
  261. package/dist/project/index.js.map +1 -0
  262. package/dist/project/mapper.d.ts +27 -0
  263. package/dist/project/mapper.d.ts.map +1 -0
  264. package/dist/project/mapper.js +64 -0
  265. package/dist/project/mapper.js.map +1 -0
  266. package/dist/project/storage.d.ts +71 -0
  267. package/dist/project/storage.d.ts.map +1 -0
  268. package/dist/project/storage.js +274 -0
  269. package/dist/project/storage.js.map +1 -0
  270. package/dist/project/sync-bridge.d.ts +33 -0
  271. package/dist/project/sync-bridge.d.ts.map +1 -0
  272. package/dist/project/sync-bridge.js +155 -0
  273. package/dist/project/sync-bridge.js.map +1 -0
  274. package/dist/project/types.d.ts +107 -0
  275. package/dist/project/types.d.ts.map +1 -0
  276. package/dist/project/types.js +77 -0
  277. package/dist/project/types.js.map +1 -0
  278. package/dist/publish/index.d.ts +4 -0
  279. package/dist/publish/index.d.ts.map +1 -0
  280. package/dist/publish/index.js +92 -0
  281. package/dist/publish/index.js.map +1 -0
  282. package/dist/setup.d.ts.map +1 -1
  283. package/dist/setup.js +29 -10
  284. package/dist/setup.js.map +1 -1
  285. package/dist/skills/index.d.ts +51 -0
  286. package/dist/skills/index.d.ts.map +1 -0
  287. package/dist/skills/index.js +509 -0
  288. package/dist/skills/index.js.map +1 -0
  289. package/dist/stacks/check.d.ts +2 -0
  290. package/dist/stacks/check.d.ts.map +1 -0
  291. package/dist/stacks/check.js +144 -0
  292. package/dist/stacks/check.js.map +1 -0
  293. package/dist/stacks/diff.d.ts +11 -0
  294. package/dist/stacks/diff.d.ts.map +1 -0
  295. package/dist/stacks/diff.js +123 -0
  296. package/dist/stacks/diff.js.map +1 -0
  297. package/dist/stacks/index.d.ts +17 -0
  298. package/dist/stacks/index.d.ts.map +1 -0
  299. package/dist/stacks/index.js +525 -0
  300. package/dist/stacks/index.js.map +1 -0
  301. package/dist/stacks/index.refactored.d.ts.map +1 -0
  302. package/dist/stacks/index.refactored.js.map +1 -0
  303. package/dist/stacks/io.d.ts +11 -0
  304. package/dist/stacks/io.d.ts.map +1 -0
  305. package/dist/stacks/io.js +179 -0
  306. package/dist/stacks/io.js.map +1 -0
  307. package/dist/stacks/rollback.d.ts +5 -0
  308. package/dist/stacks/rollback.d.ts.map +1 -0
  309. package/dist/stacks/rollback.js +162 -0
  310. package/dist/stacks/rollback.js.map +1 -0
  311. package/dist/stacks/types.d.ts +70 -0
  312. package/dist/stacks/types.d.ts.map +1 -0
  313. package/dist/stacks/types.js +6 -0
  314. package/dist/stacks/types.js.map +1 -0
  315. package/dist/stacks/utils.d.ts +9 -0
  316. package/dist/stacks/utils.d.ts.map +1 -0
  317. package/dist/stacks/utils.js +11 -0
  318. package/dist/stacks/utils.js.map +1 -0
  319. package/dist/start/index.d.ts +23 -0
  320. package/dist/start/index.d.ts.map +1 -0
  321. package/dist/start/index.js +386 -0
  322. package/dist/start/index.js.map +1 -0
  323. package/dist/sync/index.d.ts +49 -0
  324. package/dist/sync/index.d.ts.map +1 -0
  325. package/dist/sync/index.js +207 -0
  326. package/dist/sync/index.js.map +1 -0
  327. package/dist/sync-engine/__tests__/test-helpers.d.ts +14 -0
  328. package/dist/sync-engine/__tests__/test-helpers.d.ts.map +1 -0
  329. package/dist/sync-engine/__tests__/test-helpers.js +73 -0
  330. package/dist/sync-engine/__tests__/test-helpers.js.map +1 -0
  331. package/dist/sync-engine/client.d.ts +128 -0
  332. package/dist/sync-engine/client.d.ts.map +1 -0
  333. package/dist/sync-engine/client.js +289 -0
  334. package/dist/sync-engine/client.js.map +1 -0
  335. package/dist/sync-engine/health.d.ts +38 -0
  336. package/dist/sync-engine/health.d.ts.map +1 -0
  337. package/dist/sync-engine/health.js +259 -0
  338. package/dist/sync-engine/health.js.map +1 -0
  339. package/dist/sync-engine/index.d.ts +34 -0
  340. package/dist/sync-engine/index.d.ts.map +1 -0
  341. package/dist/sync-engine/index.js +197 -0
  342. package/dist/sync-engine/index.js.map +1 -0
  343. package/dist/sync-engine/protocol.d.ts +153 -0
  344. package/dist/sync-engine/protocol.d.ts.map +1 -0
  345. package/dist/sync-engine/protocol.js +5 -0
  346. package/dist/sync-engine/protocol.js.map +1 -0
  347. package/dist/tasks/index.d.ts +14 -0
  348. package/dist/tasks/index.d.ts.map +1 -0
  349. package/dist/tasks/index.js +109 -0
  350. package/dist/tasks/index.js.map +1 -0
  351. package/dist/team/index.d.ts +12 -0
  352. package/dist/team/index.d.ts.map +1 -0
  353. package/dist/team/index.js +151 -0
  354. package/dist/team/index.js.map +1 -0
  355. package/dist/updater.d.ts +5 -5
  356. package/dist/updater.d.ts.map +1 -1
  357. package/dist/updater.js +24 -88
  358. package/dist/updater.js.map +1 -1
  359. package/dist/usage/index.d.ts +10 -0
  360. package/dist/usage/index.d.ts.map +1 -0
  361. package/dist/usage/index.js +104 -0
  362. package/dist/usage/index.js.map +1 -0
  363. package/dist/webhooks/index.d.ts +7 -0
  364. package/dist/webhooks/index.d.ts.map +1 -0
  365. package/dist/webhooks/index.js +81 -0
  366. package/dist/webhooks/index.js.map +1 -0
  367. package/package.json +26 -15
  368. package/scripts/postinstall.js +282 -0
@@ -0,0 +1,52 @@
1
+ /**
2
+ * MCP Interactive Prompting
3
+ *
4
+ * Handles interactive prompting for MCP server environment variables
5
+ * with support for masked input, optional values, and help URLs.
6
+ */
7
+ /**
8
+ * Environment variable template from MCP manifest
9
+ */
10
+ export interface EnvVarTemplate {
11
+ required: boolean;
12
+ sensitive: boolean;
13
+ description: string;
14
+ helpUrl?: string;
15
+ default?: string;
16
+ }
17
+ /**
18
+ * Collected environment variable value
19
+ */
20
+ export interface EnvVarValue {
21
+ value: string;
22
+ isSecret: boolean;
23
+ }
24
+ /**
25
+ * Prompt for all environment variables from a template
26
+ */
27
+ export declare function promptEnvVars(envTemplate: Record<string, EnvVarTemplate>, _serverName: string): Promise<Record<string, EnvVarValue>>;
28
+ /**
29
+ * Prompt for re-configuration of specific variables
30
+ */
31
+ export declare function promptUpdateEnvVars(envTemplate: Record<string, EnvVarTemplate>, existingSecrets: string[], _serverName: string): Promise<Record<string, EnvVarValue>>;
32
+ /**
33
+ * Confirm an action
34
+ */
35
+ export declare function confirm(message: string, defaultValue?: boolean): Promise<boolean>;
36
+ /**
37
+ * Display a success message
38
+ */
39
+ export declare function showSuccess(message: string): void;
40
+ /**
41
+ * Display an error message
42
+ */
43
+ export declare function showError(message: string): void;
44
+ /**
45
+ * Display an info message
46
+ */
47
+ export declare function showInfo(message: string): void;
48
+ /**
49
+ * Mask a secret value for display
50
+ */
51
+ export declare function maskSecret(value: string): string;
52
+ //# sourceMappingURL=prompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/mcp/prompt.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;CACnB;AAiFD;;GAEG;AACH,wBAAsB,aAAa,CACjC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,EAC3C,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAmDtC;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,EAC3C,eAAe,EAAE,MAAM,EAAE,EACzB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CA+CtC;AAED;;GAEG;AACH,wBAAsB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,UAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAkBrF;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEjD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE/C;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE9C;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKhD"}
@@ -0,0 +1,210 @@
1
+ /**
2
+ * MCP Interactive Prompting
3
+ *
4
+ * Handles interactive prompting for MCP server environment variables
5
+ * with support for masked input, optional values, and help URLs.
6
+ */
7
+ import * as readline from 'readline';
8
+ import chalk from 'chalk';
9
+ /**
10
+ * Create readline interface for terminal input
11
+ */
12
+ function createReadline() {
13
+ return readline.createInterface({
14
+ input: process.stdin,
15
+ output: process.stdout,
16
+ });
17
+ }
18
+ /**
19
+ * Prompt for a single value with optional masking
20
+ */
21
+ async function promptValue(rl, prompt, options = {}) {
22
+ return new Promise((resolve) => {
23
+ if (options.mask) {
24
+ // For masked input, we need to handle it specially
25
+ const stdin = process.stdin;
26
+ const stdout = process.stdout;
27
+ stdout.write(prompt);
28
+ let value = '';
29
+ const wasRaw = stdin.isRaw;
30
+ if (stdin.isTTY) {
31
+ stdin.setRawMode(true);
32
+ }
33
+ stdin.resume();
34
+ const onData = (char) => {
35
+ const c = char.toString('utf8');
36
+ switch (c) {
37
+ case '\n':
38
+ case '\r':
39
+ case '\u0004': // Ctrl-D
40
+ stdin.setRawMode(wasRaw ?? false);
41
+ stdin.pause();
42
+ stdin.removeListener('data', onData);
43
+ stdout.write('\n');
44
+ resolve(value || options.defaultValue || '');
45
+ return;
46
+ case '\u0003': // Ctrl-C
47
+ stdin.setRawMode(wasRaw ?? false);
48
+ process.exit(0);
49
+ case '\u007F': // Backspace
50
+ if (value.length > 0) {
51
+ value = value.slice(0, -1);
52
+ stdout.write('\b \b');
53
+ }
54
+ return;
55
+ default:
56
+ value += c;
57
+ stdout.write('*');
58
+ }
59
+ };
60
+ stdin.on('data', onData);
61
+ }
62
+ else {
63
+ // Normal input
64
+ const displayPrompt = options.defaultValue
65
+ ? `${prompt} [${options.defaultValue}] `
66
+ : prompt;
67
+ rl.question(displayPrompt, (answer) => {
68
+ resolve(answer || options.defaultValue || '');
69
+ });
70
+ }
71
+ });
72
+ }
73
+ /**
74
+ * Prompt for all environment variables from a template
75
+ */
76
+ export async function promptEnvVars(envTemplate, _serverName) {
77
+ const rl = createReadline();
78
+ const values = {};
79
+ console.log();
80
+ console.log(chalk.bold(' This server requires configuration:'));
81
+ console.log();
82
+ try {
83
+ for (const [name, template] of Object.entries(envTemplate)) {
84
+ // Display variable info
85
+ const requiredLabel = template.required ? chalk.red('required') : chalk.dim('optional');
86
+ console.log(` ${chalk.cyan(name)} (${requiredLabel})`);
87
+ if (template.description) {
88
+ console.log(` ${chalk.dim(template.description)}`);
89
+ }
90
+ if (template.helpUrl) {
91
+ console.log(` ${chalk.dim('Get one at:')} ${chalk.blue(template.helpUrl)}`);
92
+ }
93
+ // Prompt for value
94
+ const prompt = template.sensitive ? ' > Enter value: ' : ' > ';
95
+ const value = await promptValue(rl, prompt, {
96
+ mask: template.sensitive,
97
+ defaultValue: template.default,
98
+ });
99
+ // Handle empty values
100
+ if (!value && template.required) {
101
+ console.log(chalk.red(` Error: ${name} is required`));
102
+ rl.close();
103
+ throw new Error(`Required value not provided: ${name}`);
104
+ }
105
+ // Store value if provided
106
+ if (value) {
107
+ values[name] = {
108
+ value,
109
+ isSecret: template.sensitive,
110
+ };
111
+ }
112
+ console.log();
113
+ }
114
+ }
115
+ finally {
116
+ rl.close();
117
+ }
118
+ return values;
119
+ }
120
+ /**
121
+ * Prompt for re-configuration of specific variables
122
+ */
123
+ export async function promptUpdateEnvVars(envTemplate, existingSecrets, _serverName) {
124
+ const rl = createReadline();
125
+ const values = {};
126
+ console.log();
127
+ console.log(chalk.bold(' Update environment variables:'));
128
+ console.log(chalk.dim(' (Press Enter to keep existing value)'));
129
+ console.log();
130
+ try {
131
+ for (const [name, template] of Object.entries(envTemplate)) {
132
+ const hasExisting = existingSecrets.includes(name);
133
+ // Display variable info
134
+ const statusLabel = hasExisting ? chalk.green('configured') : chalk.yellow('not set');
135
+ console.log(` ${chalk.cyan(name)} (${statusLabel})`);
136
+ if (template.description) {
137
+ console.log(` ${chalk.dim(template.description)}`);
138
+ }
139
+ // Prompt for value
140
+ const prompt = hasExisting
141
+ ? ' > New value (or Enter to keep): '
142
+ : template.sensitive
143
+ ? ' > Enter value: '
144
+ : ' > ';
145
+ const value = await promptValue(rl, prompt, {
146
+ mask: template.sensitive,
147
+ });
148
+ // Store value if provided
149
+ if (value) {
150
+ values[name] = {
151
+ value,
152
+ isSecret: template.sensitive,
153
+ };
154
+ }
155
+ console.log();
156
+ }
157
+ }
158
+ finally {
159
+ rl.close();
160
+ }
161
+ return values;
162
+ }
163
+ /**
164
+ * Confirm an action
165
+ */
166
+ export async function confirm(message, defaultValue = false) {
167
+ const rl = createReadline();
168
+ const suffix = defaultValue ? '[Y/n]' : '[y/N]';
169
+ const prompt = `${message} ${suffix} `;
170
+ return new Promise((resolve) => {
171
+ rl.question(prompt, (answer) => {
172
+ rl.close();
173
+ const normalized = answer.toLowerCase().trim();
174
+ if (normalized === '') {
175
+ resolve(defaultValue);
176
+ }
177
+ else {
178
+ resolve(normalized === 'y' || normalized === 'yes');
179
+ }
180
+ });
181
+ });
182
+ }
183
+ /**
184
+ * Display a success message
185
+ */
186
+ export function showSuccess(message) {
187
+ console.log(chalk.green(` ${message}`));
188
+ }
189
+ /**
190
+ * Display an error message
191
+ */
192
+ export function showError(message) {
193
+ console.log(chalk.red(` ${message}`));
194
+ }
195
+ /**
196
+ * Display an info message
197
+ */
198
+ export function showInfo(message) {
199
+ console.log(chalk.dim(` ${message}`));
200
+ }
201
+ /**
202
+ * Mask a secret value for display
203
+ */
204
+ export function maskSecret(value) {
205
+ if (value.length <= 4) {
206
+ return '****';
207
+ }
208
+ return value.slice(0, 2) + '*'.repeat(Math.min(value.length - 4, 8)) + value.slice(-2);
209
+ }
210
+ //# sourceMappingURL=prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/mcp/prompt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * MCP Secrets Management
3
+ *
4
+ * Stores MCP server credentials in system keychain with namespace:
5
+ * mcp/<server-name>/<variable-name>
6
+ *
7
+ * Falls back to encrypted file storage when keychain unavailable.
8
+ */
9
+ export declare function setMcpSecret(server: string, variable: string, value: string): Promise<void>;
10
+ export declare function getMcpSecret(server: string, variable: string): Promise<string | null>;
11
+ export declare function deleteMcpSecret(server: string, variable: string): Promise<void>;
12
+ export declare function deleteMcpSecrets(server: string): Promise<void>;
13
+ export declare function listMcpSecrets(server: string): Promise<string[]>;
14
+ export declare function hasMcpSecret(server: string, variable: string): Promise<boolean>;
15
+ export declare function resolveKeychainRef(ref: string): Promise<string | null>;
16
+ export declare function isKeychainRef(value: string): boolean;
17
+ export declare function buildKeychainRef(server: string, variable: string): string;
18
+ //# sourceMappingURL=secrets.clean.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secrets.clean.d.ts","sourceRoot":"","sources":["../../src/mcp/secrets.clean.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAkGH,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAcjG;AAED,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAgB3F;AAED,wBAAsB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAarF;AAED,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CASpE;AAED,wBAAsB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAYtE;AAED,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAGrF;AAyPD,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAa5E;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEzE"}
@@ -0,0 +1,357 @@
1
+ /**
2
+ * MCP Secrets Management
3
+ *
4
+ * Stores MCP server credentials in system keychain with namespace:
5
+ * mcp/<server-name>/<variable-name>
6
+ *
7
+ * Falls back to encrypted file storage when keychain unavailable.
8
+ */
9
+ import { homedir, hostname, userInfo } from 'os';
10
+ import { join } from 'path';
11
+ import { existsSync, readFileSync, writeFileSync, unlinkSync, mkdirSync, readdirSync, rmSync, } from 'fs';
12
+ import { createCipheriv, createDecipheriv, randomBytes, pbkdf2Sync, createHash } from 'crypto';
13
+ import { execFileSync } from 'child_process';
14
+ // ============ Constants ============
15
+ const SERVICE_NAME = 'claudetools-mcp';
16
+ const CREDENTIALS_DIR = join(homedir(), '.claudetools', 'mcp-secrets');
17
+ const ENCRYPTION_ALGORITHM = 'aes-256-gcm';
18
+ const PBKDF2_ITERATIONS = 100000;
19
+ // ============ Keytar Management ============
20
+ let keytarModule = undefined;
21
+ async function loadKeytar() {
22
+ if (keytarModule === undefined) {
23
+ keytarModule = null;
24
+ try {
25
+ const module = (await import(/* webpackIgnore: true */ 'keytar'));
26
+ keytarModule = module.default || module;
27
+ }
28
+ catch {
29
+ // Keytar not available, will use file fallback
30
+ }
31
+ }
32
+ return keytarModule;
33
+ }
34
+ // ============ Namespace Helpers ============
35
+ /**
36
+ * Validate server/variable name to prevent path traversal in file storage.
37
+ */
38
+ function validateSecretName(name, label) {
39
+ if (!name || name.length === 0) {
40
+ throw new Error(`${label} name must not be empty`);
41
+ }
42
+ if (name.includes('/') || name.includes('\\') || name.includes('..')) {
43
+ throw new Error(`${label} name "${name}" contains invalid characters. ` +
44
+ 'Names must not contain path separators (/, \\) or ".." sequences.');
45
+ }
46
+ if (!/^[a-zA-Z0-9._-]+$/.test(name)) {
47
+ throw new Error(`${label} name "${name}" contains invalid characters. ` +
48
+ 'Only alphanumeric characters, hyphens, underscores, and dots are allowed.');
49
+ }
50
+ }
51
+ function buildAccountName(server, variable) {
52
+ validateSecretName(server, 'Server');
53
+ validateSecretName(variable, 'Variable');
54
+ return `mcp/${server}/${variable}`;
55
+ }
56
+ function buildServerPrefix(server) {
57
+ return `mcp/${server}/`;
58
+ }
59
+ function extractVariableFromAccount(account, prefix) {
60
+ return account.slice(prefix.length);
61
+ }
62
+ // ============ Public API ============
63
+ export async function setMcpSecret(server, variable, value) {
64
+ const account = buildAccountName(server, variable);
65
+ const kt = await loadKeytar();
66
+ if (kt) {
67
+ try {
68
+ await kt.setPassword(SERVICE_NAME, account, value);
69
+ return;
70
+ }
71
+ catch {
72
+ // Fall through to file storage
73
+ }
74
+ }
75
+ await storeToFile(server, variable, value);
76
+ }
77
+ export async function getMcpSecret(server, variable) {
78
+ const account = buildAccountName(server, variable);
79
+ const kt = await loadKeytar();
80
+ if (kt) {
81
+ try {
82
+ const password = await kt.getPassword(SERVICE_NAME, account);
83
+ if (password) {
84
+ return password;
85
+ }
86
+ }
87
+ catch {
88
+ // Fall through to file storage
89
+ }
90
+ }
91
+ return getFromFile(server, variable);
92
+ }
93
+ export async function deleteMcpSecret(server, variable) {
94
+ const account = buildAccountName(server, variable);
95
+ const kt = await loadKeytar();
96
+ if (kt) {
97
+ try {
98
+ await kt.deletePassword(SERVICE_NAME, account);
99
+ }
100
+ catch {
101
+ // Ignore errors
102
+ }
103
+ }
104
+ deleteFromFile(server, variable);
105
+ }
106
+ export async function deleteMcpSecrets(server) {
107
+ validateSecretName(server, 'Server');
108
+ const prefix = buildServerPrefix(server);
109
+ // Delete from keychain
110
+ await deleteKeychainCredentials(prefix);
111
+ // Delete encrypted files
112
+ deleteServerFiles(server);
113
+ }
114
+ export async function listMcpSecrets(server) {
115
+ validateSecretName(server, 'Server');
116
+ const prefix = buildServerPrefix(server);
117
+ const variablesSet = new Set();
118
+ // Collect from keychain
119
+ await collectKeychainVariables(prefix, variablesSet);
120
+ // Collect from files
121
+ collectFileVariables(server, variablesSet);
122
+ return Array.from(variablesSet);
123
+ }
124
+ export async function hasMcpSecret(server, variable) {
125
+ const secret = await getMcpSecret(server, variable);
126
+ return secret !== null;
127
+ }
128
+ // ============ Keychain Operations ============
129
+ async function deleteKeychainCredentials(prefix) {
130
+ const kt = await loadKeytar();
131
+ if (!kt)
132
+ return;
133
+ try {
134
+ const credentials = await kt.findCredentials(SERVICE_NAME);
135
+ const deletePromises = credentials
136
+ .filter((cred) => cred.account.startsWith(prefix))
137
+ .map((cred) => kt.deletePassword(SERVICE_NAME, cred.account));
138
+ await Promise.all(deletePromises);
139
+ }
140
+ catch {
141
+ // Ignore errors
142
+ }
143
+ }
144
+ async function collectKeychainVariables(prefix, variablesSet) {
145
+ const kt = await loadKeytar();
146
+ if (!kt)
147
+ return;
148
+ try {
149
+ const credentials = await kt.findCredentials(SERVICE_NAME);
150
+ credentials
151
+ .filter((cred) => cred.account.startsWith(prefix))
152
+ .forEach((cred) => {
153
+ const variable = extractVariableFromAccount(cred.account, prefix);
154
+ variablesSet.add(variable);
155
+ });
156
+ }
157
+ catch {
158
+ // Ignore errors
159
+ }
160
+ }
161
+ // ============ File Operations ============
162
+ function ensureDir(dir) {
163
+ if (!existsSync(dir)) {
164
+ mkdirSync(dir, { recursive: true, mode: 0o700 });
165
+ }
166
+ }
167
+ function getSecretFilePath(server, variable) {
168
+ return join(CREDENTIALS_DIR, server, `${variable}.enc`);
169
+ }
170
+ async function storeToFile(server, variable, value) {
171
+ const serverDir = join(CREDENTIALS_DIR, server);
172
+ ensureDir(serverDir);
173
+ const encryptedData = encryptValue(value);
174
+ const filePath = getSecretFilePath(server, variable);
175
+ writeFileSync(filePath, JSON.stringify(encryptedData), { mode: 0o600 });
176
+ }
177
+ function getFromFile(server, variable) {
178
+ try {
179
+ const filePath = getSecretFilePath(server, variable);
180
+ if (!existsSync(filePath)) {
181
+ return null;
182
+ }
183
+ const content = readFileSync(filePath, 'utf-8');
184
+ const data = JSON.parse(content);
185
+ if (data.version !== 1) {
186
+ return null;
187
+ }
188
+ return decryptValue(data);
189
+ }
190
+ catch {
191
+ return null;
192
+ }
193
+ }
194
+ function deleteFromFile(server, variable) {
195
+ const filePath = getSecretFilePath(server, variable);
196
+ if (existsSync(filePath)) {
197
+ unlinkSync(filePath);
198
+ }
199
+ }
200
+ function deleteServerFiles(server) {
201
+ const serverDir = join(CREDENTIALS_DIR, server);
202
+ if (existsSync(serverDir)) {
203
+ try {
204
+ rmSync(serverDir, { recursive: true });
205
+ }
206
+ catch {
207
+ // Ignore errors
208
+ }
209
+ }
210
+ }
211
+ function collectFileVariables(server, variablesSet) {
212
+ const serverDir = join(CREDENTIALS_DIR, server);
213
+ if (!existsSync(serverDir))
214
+ return;
215
+ try {
216
+ const files = readdirSync(serverDir).filter((f) => f.endsWith('.enc'));
217
+ files.forEach((file) => {
218
+ const variable = file.slice(0, -4); // Remove .enc
219
+ variablesSet.add(variable);
220
+ });
221
+ }
222
+ catch {
223
+ // Ignore errors
224
+ }
225
+ }
226
+ // ============ Encryption ============
227
+ function encryptValue(value) {
228
+ const machineSalt = getMachineSalt();
229
+ const salt = randomBytes(32);
230
+ const key = pbkdf2Sync(machineSalt, salt, PBKDF2_ITERATIONS, 32, 'sha256');
231
+ const iv = randomBytes(16);
232
+ const cipher = createCipheriv(ENCRYPTION_ALGORITHM, key, iv);
233
+ let encrypted = cipher.update(value, 'utf8', 'hex');
234
+ encrypted += cipher.final('hex');
235
+ const authTag = cipher.getAuthTag();
236
+ return {
237
+ version: 1,
238
+ salt: salt.toString('hex'),
239
+ iv: iv.toString('hex'),
240
+ authTag: authTag.toString('hex'),
241
+ data: encrypted,
242
+ };
243
+ }
244
+ function decryptValue(data) {
245
+ const machineSalt = getMachineSalt();
246
+ const salt = Buffer.from(data.salt, 'hex');
247
+ const key = pbkdf2Sync(machineSalt, salt, PBKDF2_ITERATIONS, 32, 'sha256');
248
+ const iv = Buffer.from(data.iv, 'hex');
249
+ const authTag = Buffer.from(data.authTag, 'hex');
250
+ const decipher = createDecipheriv(ENCRYPTION_ALGORITHM, key, iv);
251
+ decipher.setAuthTag(authTag);
252
+ let decrypted = decipher.update(data.data, 'hex', 'utf8');
253
+ decrypted += decipher.final('utf8');
254
+ return decrypted;
255
+ }
256
+ // ============ Machine ID ============
257
+ function getMachineSalt() {
258
+ const machineId = getMachineId();
259
+ if (machineId) {
260
+ return machineId;
261
+ }
262
+ // Fallback: use or create a persistent random salt (same pattern as auth/keychain.ts)
263
+ return getOrCreatePersistentSalt();
264
+ }
265
+ /**
266
+ * Get or create a persistent random salt stored in ~/.claudetools/.salt
267
+ * Avoids predictable key derivation from hostname+username.
268
+ */
269
+ function getOrCreatePersistentSalt() {
270
+ const saltPath = join(homedir(), '.claudetools', '.salt');
271
+ try {
272
+ if (existsSync(saltPath)) {
273
+ const salt = readFileSync(saltPath, 'utf-8').trim();
274
+ if (salt && salt.length === 64) { // 32 bytes hex = 64 chars
275
+ return salt;
276
+ }
277
+ }
278
+ }
279
+ catch {
280
+ // Continue to generate new salt
281
+ }
282
+ // Generate new random salt
283
+ const salt = randomBytes(32).toString('hex');
284
+ try {
285
+ const configDir = join(homedir(), '.claudetools');
286
+ if (!existsSync(configDir)) {
287
+ mkdirSync(configDir, { recursive: true, mode: 0o700 });
288
+ }
289
+ writeFileSync(saltPath, salt, { mode: 0o600 });
290
+ return salt;
291
+ }
292
+ catch {
293
+ // Last resort: predictable fallback
294
+ const fallback = `${hostname()}-${userInfo().username}`;
295
+ return createHash('sha256').update(fallback).digest('hex');
296
+ }
297
+ }
298
+ function getMachineId() {
299
+ try {
300
+ switch (process.platform) {
301
+ case 'darwin':
302
+ return getMacOsMachineId();
303
+ case 'linux':
304
+ return getLinuxMachineId();
305
+ case 'win32':
306
+ return getWindowsMachineId();
307
+ default:
308
+ return null;
309
+ }
310
+ }
311
+ catch {
312
+ return null;
313
+ }
314
+ }
315
+ function getMacOsMachineId() {
316
+ // Use execFileSync to avoid shell injection; parse output in JS instead of piping through grep
317
+ const output = execFileSync('ioreg', ['-rd1', '-c', 'IOPlatformExpertDevice'], {
318
+ encoding: 'utf-8',
319
+ timeout: 5000,
320
+ });
321
+ const match = output.match(/"IOPlatformUUID"\s*=\s*"([^"]+)"/);
322
+ return match?.[1] || null;
323
+ }
324
+ function getLinuxMachineId() {
325
+ if (existsSync('/etc/machine-id')) {
326
+ return readFileSync('/etc/machine-id', 'utf-8').trim();
327
+ }
328
+ if (existsSync('/var/lib/dbus/machine-id')) {
329
+ return readFileSync('/var/lib/dbus/machine-id', 'utf-8').trim();
330
+ }
331
+ return null;
332
+ }
333
+ function getWindowsMachineId() {
334
+ const output = execFileSync('reg', ['query', 'HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Cryptography', '/v', 'MachineGuid'], { encoding: 'utf-8', timeout: 5000 });
335
+ const match = output.match(/MachineGuid\s+REG_SZ\s+(\S+)/);
336
+ return match?.[1] || null;
337
+ }
338
+ // ============ Keychain Reference Helpers ============
339
+ export async function resolveKeychainRef(ref) {
340
+ const match = ref.match(/^\$\{keychain:mcp\/([^/]+)\/([^}]+)\}$/);
341
+ if (!match) {
342
+ return null;
343
+ }
344
+ const server = match[1];
345
+ const variable = match[2];
346
+ if (!server || !variable) {
347
+ return null;
348
+ }
349
+ return getMcpSecret(server, variable);
350
+ }
351
+ export function isKeychainRef(value) {
352
+ return /^\$\{keychain:mcp\/[^/]+\/[^}]+\}$/.test(value);
353
+ }
354
+ export function buildKeychainRef(server, variable) {
355
+ return `\${keychain:mcp/${server}/${variable}}`;
356
+ }
357
+ //# sourceMappingURL=secrets.clean.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secrets.clean.js","sourceRoot":"","sources":["../../src/mcp/secrets.clean.ts"],"names":[],"mappings":"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"}