@hubspot/cli 8.1.0 → 8.1.1-experimental.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 (676) hide show
  1. package/api/migrate.js +8 -4
  2. package/bin/cli.js +12 -6
  3. package/commands/account/auth.js +7 -7
  4. package/commands/account/clean.js +7 -6
  5. package/commands/account/createOverride.js +10 -7
  6. package/commands/account/info.js +36 -17
  7. package/commands/account/link.d.ts +4 -0
  8. package/commands/account/link.js +89 -0
  9. package/commands/account/list.js +32 -76
  10. package/commands/account/remove.js +4 -3
  11. package/commands/account/removeOverride.js +11 -10
  12. package/commands/account/rename.js +5 -6
  13. package/commands/account/unlink.d.ts +4 -0
  14. package/commands/account/unlink.js +70 -0
  15. package/commands/account/use.js +75 -6
  16. package/commands/account.js +4 -0
  17. package/commands/api.d.ts +10 -0
  18. package/commands/api.js +164 -0
  19. package/commands/app/migrate.js +13 -13
  20. package/commands/app/secret/add.js +6 -7
  21. package/commands/app/secret/delete.js +9 -10
  22. package/commands/app/secret/list.js +6 -7
  23. package/commands/app/secret/update.js +8 -9
  24. package/commands/auth.js +19 -15
  25. package/commands/cms/app/create.js +9 -5
  26. package/commands/cms/convertFields.js +8 -8
  27. package/commands/cms/delete.js +2 -3
  28. package/commands/cms/fetch.js +7 -7
  29. package/commands/cms/function/create.js +9 -5
  30. package/commands/cms/function/deploy.js +2 -3
  31. package/commands/cms/function/list.js +11 -7
  32. package/commands/cms/function/logs.js +17 -22
  33. package/commands/cms/function/server.js +2 -3
  34. package/commands/cms/getReactModule.js +7 -8
  35. package/commands/cms/lighthouseScore.js +25 -24
  36. package/commands/cms/lint.js +4 -5
  37. package/commands/cms/list.js +5 -6
  38. package/commands/cms/module/create.js +9 -5
  39. package/commands/cms/module/marketplace-validate.js +7 -8
  40. package/commands/cms/mv.js +2 -3
  41. package/commands/cms/template/create.js +10 -6
  42. package/commands/cms/theme/create.js +5 -5
  43. package/commands/cms/theme/generate-selectors.js +5 -4
  44. package/commands/cms/theme/marketplace-validate.js +8 -9
  45. package/commands/cms/theme/preview.js +23 -70
  46. package/commands/cms/upload.js +15 -12
  47. package/commands/cms/watch.d.ts +0 -1
  48. package/commands/cms/watch.js +6 -12
  49. package/commands/cms/webpack/create.js +5 -5
  50. package/commands/completion.js +3 -5
  51. package/commands/config/migrate.js +6 -7
  52. package/commands/config/set.js +5 -6
  53. package/commands/customObject/create.js +4 -5
  54. package/commands/customObject/createSchema.js +4 -5
  55. package/commands/customObject/deleteSchema.js +4 -5
  56. package/commands/customObject/fetchAllSchemas.js +2 -3
  57. package/commands/customObject/fetchSchema.js +2 -3
  58. package/commands/customObject/listSchemas.js +2 -3
  59. package/commands/customObject/updateSchema.js +4 -5
  60. package/commands/doctor.js +8 -8
  61. package/commands/feedback.js +7 -5
  62. package/commands/filemanager/fetch.js +5 -6
  63. package/commands/filemanager/upload.js +5 -5
  64. package/commands/getStarted.js +17 -19
  65. package/commands/hubdb/clear.js +6 -3
  66. package/commands/hubdb/create.js +4 -5
  67. package/commands/hubdb/delete.js +9 -6
  68. package/commands/hubdb/fetch.js +6 -3
  69. package/commands/hubdb/list.js +16 -14
  70. package/commands/init.js +15 -14
  71. package/commands/mcp/setup.js +5 -14
  72. package/commands/mcp/start.js +2 -4
  73. package/commands/open.js +4 -5
  74. package/commands/project/add.js +13 -8
  75. package/commands/project/appInstallStatus.d.ts +4 -0
  76. package/commands/project/appInstallStatus.js +132 -0
  77. package/commands/project/create.js +28 -17
  78. package/commands/project/delete.d.ts +7 -0
  79. package/commands/project/delete.js +74 -0
  80. package/commands/project/deploy.js +39 -36
  81. package/commands/project/dev/deprecatedFlow.js +62 -17
  82. package/commands/project/dev/index.d.ts +3 -3
  83. package/commands/project/dev/index.js +59 -48
  84. package/commands/project/dev/unifiedFlow.js +70 -21
  85. package/commands/project/download.js +12 -9
  86. package/commands/project/info.d.ts +4 -0
  87. package/commands/project/info.js +67 -0
  88. package/commands/project/installDeps.js +9 -6
  89. package/commands/project/lint.js +31 -10
  90. package/commands/project/list.d.ts +2 -2
  91. package/commands/project/list.js +15 -14
  92. package/commands/project/listBuilds.js +8 -6
  93. package/commands/project/logs.js +5 -6
  94. package/commands/project/migrate.js +18 -18
  95. package/commands/project/open.js +5 -6
  96. package/commands/project/profile/add.js +12 -8
  97. package/commands/project/profile/delete.js +15 -11
  98. package/commands/project/updateDeps.js +9 -6
  99. package/commands/project/upload.d.ts +1 -0
  100. package/commands/project/upload.js +39 -19
  101. package/commands/project/validate.js +12 -12
  102. package/commands/project/watch.js +32 -19
  103. package/commands/project.js +12 -3
  104. package/commands/sandbox/create.js +18 -45
  105. package/commands/sandbox/delete.js +13 -14
  106. package/commands/secret/addSecret.js +6 -7
  107. package/commands/secret/deleteSecret.js +5 -6
  108. package/commands/secret/listSecret.js +2 -3
  109. package/commands/secret/updateSecret.js +4 -5
  110. package/commands/testAccount/create.d.ts +1 -1
  111. package/commands/testAccount/create.js +25 -17
  112. package/commands/testAccount/createConfig.js +7 -8
  113. package/commands/testAccount/delete.js +27 -18
  114. package/commands/testAccount/importData.js +6 -7
  115. package/commands/upgrade.js +9 -10
  116. package/lang/en.d.ts +258 -14
  117. package/lang/en.js +275 -28
  118. package/lib/accountAuth.js +4 -0
  119. package/lib/api/usageTracking.d.ts +29 -0
  120. package/lib/api/usageTracking.js +28 -0
  121. package/lib/app/migrate.js +18 -5
  122. package/lib/buildAccount.d.ts +1 -6
  123. package/lib/buildAccount.js +9 -42
  124. package/lib/commandSuggestion.js +1 -7
  125. package/lib/constants.d.ts +2 -4
  126. package/lib/constants.js +4 -4
  127. package/lib/doctor/Diagnosis.js +5 -5
  128. package/lib/doctor/Doctor.js +7 -7
  129. package/lib/errorHandlers/index.js +4 -3
  130. package/lib/errorHandlers/suppressError.js +4 -0
  131. package/lib/errors/PromptExitError.d.ts +6 -0
  132. package/lib/errors/PromptExitError.js +11 -0
  133. package/lib/generateSelectors.js +1 -2
  134. package/lib/getStartedV2Actions.d.ts +13 -0
  135. package/lib/getStartedV2Actions.js +56 -3
  136. package/lib/hasFeature.js +1 -2
  137. package/lib/link/accountTableUtils.d.ts +10 -0
  138. package/lib/link/accountTableUtils.js +39 -0
  139. package/lib/link/index.d.ts +18 -0
  140. package/lib/link/index.js +185 -0
  141. package/lib/link/linkUtils.d.ts +5 -0
  142. package/lib/link/linkUtils.js +49 -0
  143. package/lib/link/prompts.d.ts +7 -0
  144. package/lib/link/prompts.js +126 -0
  145. package/lib/link/renderLinkedAccountsTable.d.ts +2 -0
  146. package/lib/link/renderLinkedAccountsTable.js +14 -0
  147. package/lib/link/warnIfLinkedDirectory.d.ts +1 -0
  148. package/lib/link/warnIfLinkedDirectory.js +9 -0
  149. package/lib/mcp/setup.d.ts +1 -0
  150. package/lib/mcp/setup.js +77 -30
  151. package/lib/middleware/autoUpdateMiddleware.js +6 -3
  152. package/lib/process.d.ts +1 -1
  153. package/lib/process.js +10 -3
  154. package/lib/projects/ProjectLogsManager.js +6 -3
  155. package/lib/projects/components.js +15 -4
  156. package/lib/projects/create/index.js +3 -6
  157. package/lib/projects/create/legacy.js +5 -10
  158. package/lib/projects/create/v2.js +5 -14
  159. package/lib/projects/delete.d.ts +13 -0
  160. package/lib/projects/delete.js +193 -0
  161. package/lib/projects/deploy.d.ts +1 -1
  162. package/lib/projects/deploy.js +2 -2
  163. package/lib/projects/ensureProjectExists.js +1 -2
  164. package/lib/projects/localDev/AppDevModeInterface.js +13 -9
  165. package/lib/projects/localDev/DevServerManager_DEPRECATED.d.ts +4 -1
  166. package/lib/projects/localDev/DevServerManager_DEPRECATED.js +3 -3
  167. package/lib/projects/localDev/DevSessionManager.d.ts +6 -3
  168. package/lib/projects/localDev/DevSessionManager.js +31 -19
  169. package/lib/projects/localDev/LocalDevManager_DEPRECATED.d.ts +5 -0
  170. package/lib/projects/localDev/LocalDevManager_DEPRECATED.js +21 -10
  171. package/lib/projects/localDev/LocalDevProcess.js +6 -5
  172. package/lib/projects/localDev/LocalDevState.d.ts +3 -2
  173. package/lib/projects/localDev/LocalDevState.js +3 -1
  174. package/lib/projects/localDev/helpers/account.d.ts +4 -3
  175. package/lib/projects/localDev/helpers/account.js +21 -30
  176. package/lib/projects/localDev/helpers/process.d.ts +1 -1
  177. package/lib/projects/localDev/helpers/process.js +4 -10
  178. package/lib/projects/localDev/helpers/project.d.ts +4 -3
  179. package/lib/projects/localDev/helpers/project.js +31 -15
  180. package/lib/projects/npmAuditOnUpload.d.ts +10 -0
  181. package/lib/projects/npmAuditOnUpload.js +73 -0
  182. package/lib/projects/pollProjectBuildAndDeploy.js +90 -85
  183. package/lib/projects/projectInfo.d.ts +5 -0
  184. package/lib/projects/projectInfo.js +82 -0
  185. package/lib/projects/projectProfiles.d.ts +1 -2
  186. package/lib/projects/projectProfiles.js +5 -17
  187. package/lib/projects/uieLinting.d.ts +17 -3
  188. package/lib/projects/uieLinting.js +93 -28
  189. package/lib/projects/upload.d.ts +3 -1
  190. package/lib/projects/upload.js +70 -50
  191. package/lib/projects/watch.d.ts +2 -1
  192. package/lib/projects/watch.js +32 -24
  193. package/lib/projects/workspaces.d.ts +42 -0
  194. package/lib/projects/workspaces.js +350 -0
  195. package/lib/prompts/createApiSamplePrompt.js +4 -0
  196. package/lib/prompts/downloadProjectPrompt.js +11 -10
  197. package/lib/prompts/installAppPrompt.js +3 -2
  198. package/lib/prompts/personalAccessKeyPrompt.js +3 -2
  199. package/lib/prompts/projectDevTargetAccountPrompt.d.ts +1 -0
  200. package/lib/prompts/projectDevTargetAccountPrompt.js +23 -16
  201. package/lib/prompts/projectProfilePrompt.d.ts +2 -0
  202. package/lib/prompts/projectProfilePrompt.js +46 -0
  203. package/lib/prompts/projectsLogsPrompt.js +3 -0
  204. package/lib/prompts/promptUtils.js +4 -2
  205. package/lib/prompts/selectHubDBTablePrompt.js +8 -4
  206. package/lib/prompts/selectPublicAppForMigrationPrompt.js +12 -6
  207. package/lib/sandboxes.d.ts +1 -9
  208. package/lib/sandboxes.js +0 -21
  209. package/lib/serverlessLogs.js +50 -44
  210. package/lib/theme/cmsDevServerProcess.d.ts +14 -0
  211. package/lib/theme/cmsDevServerProcess.js +149 -0
  212. package/lib/theme/cmsDevServerRunner.d.ts +14 -0
  213. package/lib/theme/cmsDevServerRunner.js +90 -0
  214. package/lib/theme/migrate.d.ts +1 -1
  215. package/lib/theme/migrate.js +1 -5
  216. package/lib/ui/SpinniesManager.d.ts +1 -0
  217. package/lib/ui/SpinniesManager.js +22 -6
  218. package/lib/ui/accountTable.d.ts +8 -0
  219. package/lib/ui/accountTable.js +67 -0
  220. package/lib/ui/spinniesUtils.d.ts +0 -1
  221. package/lib/ui/spinniesUtils.js +6 -16
  222. package/lib/usageTracking.d.ts +9 -20
  223. package/lib/usageTracking.js +51 -34
  224. package/lib/yargs/makeYargsBuilder.d.ts +13 -0
  225. package/lib/yargs/makeYargsBuilder.js +33 -0
  226. package/lib/yargs/makeYargsHandlerWithUsageTracking.d.ts +3 -0
  227. package/lib/yargs/makeYargsHandlerWithUsageTracking.js +121 -0
  228. package/lib/yargs/parseYargsOrExit.d.ts +4 -0
  229. package/lib/yargs/parseYargsOrExit.js +25 -0
  230. package/lib/yargs/strictEnforceBoolean.d.ts +1 -0
  231. package/lib/yargs/strictEnforceBoolean.js +13 -0
  232. package/lib/yargsUtils.d.ts +3 -16
  233. package/lib/yargsUtils.js +3 -48
  234. package/mcp-server/Tool.d.ts +15 -0
  235. package/mcp-server/Tool.js +53 -0
  236. package/mcp-server/server.js +43 -3
  237. package/mcp-server/tools/cms/HsCreateFunctionTool.d.ts +4 -2
  238. package/mcp-server/tools/cms/HsCreateFunctionTool.js +9 -7
  239. package/mcp-server/tools/cms/HsCreateModuleTool.d.ts +4 -2
  240. package/mcp-server/tools/cms/HsCreateModuleTool.js +9 -7
  241. package/mcp-server/tools/cms/HsCreateTemplateTool.d.ts +4 -2
  242. package/mcp-server/tools/cms/HsCreateTemplateTool.js +9 -7
  243. package/mcp-server/tools/cms/HsFunctionLogsTool.d.ts +4 -2
  244. package/mcp-server/tools/cms/HsFunctionLogsTool.js +9 -7
  245. package/mcp-server/tools/cms/HsListFunctionsTool.d.ts +4 -2
  246. package/mcp-server/tools/cms/HsListFunctionsTool.js +9 -7
  247. package/mcp-server/tools/cms/HsListTool.d.ts +4 -2
  248. package/mcp-server/tools/cms/HsListTool.js +9 -7
  249. package/mcp-server/tools/index.d.ts +3 -2
  250. package/mcp-server/tools/index.js +24 -22
  251. package/mcp-server/tools/project/AddFeatureToProjectTool.d.ts +25 -5
  252. package/mcp-server/tools/project/AddFeatureToProjectTool.js +16 -18
  253. package/mcp-server/tools/project/CreateProjectTool.d.ts +29 -6
  254. package/mcp-server/tools/project/CreateProjectTool.js +16 -18
  255. package/mcp-server/tools/project/CreateTestAccountTool.d.ts +4 -2
  256. package/mcp-server/tools/project/CreateTestAccountTool.js +22 -10
  257. package/mcp-server/tools/project/DeployProjectTool.d.ts +4 -2
  258. package/mcp-server/tools/project/DeployProjectTool.js +6 -8
  259. package/mcp-server/tools/project/DocFetchTool.d.ts +4 -2
  260. package/mcp-server/tools/project/DocFetchTool.js +8 -6
  261. package/mcp-server/tools/project/DocsSearchTool.d.ts +9 -3
  262. package/mcp-server/tools/project/DocsSearchTool.js +32 -9
  263. package/mcp-server/tools/project/FindProjectsTool.d.ts +15 -0
  264. package/mcp-server/tools/project/FindProjectsTool.js +60 -0
  265. package/mcp-server/tools/project/GetApiUsagePatternsByAppIdTool.d.ts +4 -2
  266. package/mcp-server/tools/project/GetApiUsagePatternsByAppIdTool.js +13 -14
  267. package/mcp-server/tools/project/GetApplicationInfoTool.d.ts +4 -2
  268. package/mcp-server/tools/project/GetApplicationInfoTool.js +8 -6
  269. package/mcp-server/tools/project/GetBuildLogsTool.d.ts +6 -4
  270. package/mcp-server/tools/project/GetBuildLogsTool.js +15 -14
  271. package/mcp-server/tools/project/GetBuildStatusTool.d.ts +5 -3
  272. package/mcp-server/tools/project/GetBuildStatusTool.js +12 -11
  273. package/mcp-server/tools/project/GetConfigValuesTool.d.ts +4 -2
  274. package/mcp-server/tools/project/GetConfigValuesTool.js +12 -7
  275. package/mcp-server/tools/project/GuidedWalkthroughTool.d.ts +10 -3
  276. package/mcp-server/tools/project/GuidedWalkthroughTool.js +5 -12
  277. package/mcp-server/tools/project/UploadProjectTools.d.ts +4 -2
  278. package/mcp-server/tools/project/UploadProjectTools.js +11 -9
  279. package/mcp-server/tools/project/ValidateProjectTool.d.ts +4 -2
  280. package/mcp-server/tools/project/ValidateProjectTool.js +10 -8
  281. package/mcp-server/tools/project/constants.d.ts +13 -1
  282. package/mcp-server/tools/project/constants.js +13 -16
  283. package/mcp-server/types.d.ts +0 -7
  284. package/mcp-server/types.js +1 -13
  285. package/mcp-server/utils/command.d.ts +5 -0
  286. package/mcp-server/utils/command.js +24 -0
  287. package/mcp-server/utils/feedbackTracking.js +2 -17
  288. package/mcp-server/utils/logger.d.ts +10 -0
  289. package/mcp-server/utils/logger.js +29 -0
  290. package/mcp-server/utils/toolUsageTracking.js +10 -8
  291. package/package.json +15 -11
  292. package/types/Link.d.ts +32 -0
  293. package/types/Link.js +5 -0
  294. package/types/LocalDev.d.ts +5 -0
  295. package/types/PackageJson.d.ts +1 -0
  296. package/types/Projects.d.ts +19 -0
  297. package/types/Prompts.d.ts +1 -0
  298. package/types/Yargs.d.ts +19 -1
  299. package/ui/components/getStarted/GetStartedFlow.js +79 -2
  300. package/ui/components/getStarted/reducer.d.ts +20 -0
  301. package/ui/components/getStarted/reducer.js +36 -0
  302. package/ui/components/getStarted/screens/InstallationScreen.d.ts +7 -0
  303. package/ui/components/getStarted/screens/InstallationScreen.js +16 -0
  304. package/ui/components/getStarted/screens/ProjectSetupScreen.js +2 -1
  305. package/ui/lib/constants.d.ts +1 -0
  306. package/ui/lib/constants.js +1 -0
  307. package/api/__tests__/migrate.test.d.ts +0 -1
  308. package/api/__tests__/migrate.test.js +0 -199
  309. package/commands/__tests__/account.test.d.ts +0 -1
  310. package/commands/__tests__/account.test.js +0 -69
  311. package/commands/__tests__/auth.test.d.ts +0 -1
  312. package/commands/__tests__/auth.test.js +0 -43
  313. package/commands/__tests__/cms.test.d.ts +0 -1
  314. package/commands/__tests__/cms.test.js +0 -87
  315. package/commands/__tests__/config.test.d.ts +0 -1
  316. package/commands/__tests__/config.test.js +0 -44
  317. package/commands/__tests__/customObject.test.d.ts +0 -1
  318. package/commands/__tests__/customObject.test.js +0 -68
  319. package/commands/__tests__/doctor.test.d.ts +0 -1
  320. package/commands/__tests__/doctor.test.js +0 -132
  321. package/commands/__tests__/feedback.test.d.ts +0 -1
  322. package/commands/__tests__/feedback.test.js +0 -24
  323. package/commands/__tests__/filemanager.test.d.ts +0 -1
  324. package/commands/__tests__/filemanager.test.js +0 -45
  325. package/commands/__tests__/getStarted.test.d.ts +0 -1
  326. package/commands/__tests__/getStarted.test.js +0 -173
  327. package/commands/__tests__/hubdb.test.d.ts +0 -1
  328. package/commands/__tests__/hubdb.test.js +0 -50
  329. package/commands/__tests__/init.test.d.ts +0 -1
  330. package/commands/__tests__/init.test.js +0 -42
  331. package/commands/__tests__/mcp.test.d.ts +0 -1
  332. package/commands/__tests__/mcp.test.js +0 -46
  333. package/commands/__tests__/open.test.d.ts +0 -1
  334. package/commands/__tests__/open.test.js +0 -58
  335. package/commands/__tests__/project.test.d.ts +0 -1
  336. package/commands/__tests__/project.test.js +0 -125
  337. package/commands/__tests__/sandbox.test.d.ts +0 -1
  338. package/commands/__tests__/sandbox.test.js +0 -44
  339. package/commands/__tests__/secret.test.d.ts +0 -1
  340. package/commands/__tests__/secret.test.js +0 -49
  341. package/commands/__tests__/testAccount.test.d.ts +0 -1
  342. package/commands/__tests__/testAccount.test.js +0 -57
  343. package/commands/__tests__/upgrade.test.d.ts +0 -1
  344. package/commands/__tests__/upgrade.test.js +0 -309
  345. package/commands/account/__tests__/auth.test.d.ts +0 -1
  346. package/commands/account/__tests__/auth.test.js +0 -206
  347. package/commands/account/__tests__/clean.test.d.ts +0 -1
  348. package/commands/account/__tests__/clean.test.js +0 -28
  349. package/commands/account/__tests__/createOverride.test.d.ts +0 -1
  350. package/commands/account/__tests__/createOverride.test.js +0 -32
  351. package/commands/account/__tests__/info.test.d.ts +0 -1
  352. package/commands/account/__tests__/info.test.js +0 -28
  353. package/commands/account/__tests__/list.test.d.ts +0 -1
  354. package/commands/account/__tests__/list.test.js +0 -153
  355. package/commands/account/__tests__/remove.test.d.ts +0 -1
  356. package/commands/account/__tests__/remove.test.js +0 -36
  357. package/commands/account/__tests__/removeOverride.d.ts +0 -1
  358. package/commands/account/__tests__/removeOverride.js +0 -25
  359. package/commands/account/__tests__/rename.test.d.ts +0 -1
  360. package/commands/account/__tests__/rename.test.js +0 -82
  361. package/commands/account/__tests__/use.test.d.ts +0 -1
  362. package/commands/account/__tests__/use.test.js +0 -170
  363. package/commands/app/__tests__/migrate.test.d.ts +0 -1
  364. package/commands/app/__tests__/migrate.test.js +0 -111
  365. package/commands/app/secret/__tests__/add.test.d.ts +0 -1
  366. package/commands/app/secret/__tests__/add.test.js +0 -140
  367. package/commands/app/secret/__tests__/delete.test.d.ts +0 -1
  368. package/commands/app/secret/__tests__/delete.test.js +0 -28
  369. package/commands/app/secret/__tests__/list.test.d.ts +0 -1
  370. package/commands/app/secret/__tests__/list.test.js +0 -25
  371. package/commands/app/secret/__tests__/update.test.d.ts +0 -1
  372. package/commands/app/secret/__tests__/update.test.js +0 -28
  373. package/commands/cms/__tests__/delete.test.d.ts +0 -1
  374. package/commands/cms/__tests__/delete.test.js +0 -39
  375. package/commands/cms/__tests__/fetch.test.d.ts +0 -1
  376. package/commands/cms/__tests__/fetch.test.js +0 -156
  377. package/commands/cms/__tests__/function.test.d.ts +0 -1
  378. package/commands/cms/__tests__/function.test.js +0 -50
  379. package/commands/cms/__tests__/lint.test.d.ts +0 -1
  380. package/commands/cms/__tests__/lint.test.js +0 -33
  381. package/commands/cms/__tests__/list.test.d.ts +0 -1
  382. package/commands/cms/__tests__/list.test.js +0 -42
  383. package/commands/cms/__tests__/module.test.d.ts +0 -1
  384. package/commands/cms/__tests__/module.test.js +0 -45
  385. package/commands/cms/__tests__/mv.test.d.ts +0 -1
  386. package/commands/cms/__tests__/mv.test.js +0 -46
  387. package/commands/cms/__tests__/theme.test.d.ts +0 -1
  388. package/commands/cms/__tests__/theme.test.js +0 -54
  389. package/commands/cms/__tests__/upload.test.d.ts +0 -1
  390. package/commands/cms/__tests__/upload.test.js +0 -308
  391. package/commands/cms/__tests__/watch.test.d.ts +0 -1
  392. package/commands/cms/__tests__/watch.test.js +0 -212
  393. package/commands/cms/function/__tests__/logs.test.d.ts +0 -1
  394. package/commands/cms/function/__tests__/logs.test.js +0 -70
  395. package/commands/cms/theme/__tests__/generate-selectors.test.d.ts +0 -1
  396. package/commands/cms/theme/__tests__/generate-selectors.test.js +0 -28
  397. package/commands/cms/theme/__tests__/marketplace-validate.test.d.ts +0 -1
  398. package/commands/cms/theme/__tests__/marketplace-validate.test.js +0 -36
  399. package/commands/cms/theme/__tests__/preview.test.d.ts +0 -1
  400. package/commands/cms/theme/__tests__/preview.test.js +0 -54
  401. package/commands/customObject/__tests__/create.test.d.ts +0 -1
  402. package/commands/customObject/__tests__/create.test.js +0 -40
  403. package/commands/customObject/__tests__/createSchema.test.d.ts +0 -1
  404. package/commands/customObject/__tests__/createSchema.test.js +0 -28
  405. package/commands/customObject/__tests__/deleteSchema.test.d.ts +0 -1
  406. package/commands/customObject/__tests__/deleteSchema.test.js +0 -42
  407. package/commands/customObject/__tests__/fetch-all-schemas.test.d.ts +0 -1
  408. package/commands/customObject/__tests__/fetch-all-schemas.test.js +0 -41
  409. package/commands/customObject/__tests__/fetchSchema.test.d.ts +0 -1
  410. package/commands/customObject/__tests__/fetchSchema.test.js +0 -45
  411. package/commands/customObject/__tests__/listSchemas.test.d.ts +0 -1
  412. package/commands/customObject/__tests__/listSchemas.test.js +0 -29
  413. package/commands/customObject/__tests__/updateSchema.test.d.ts +0 -1
  414. package/commands/customObject/__tests__/updateSchema.test.js +0 -40
  415. package/commands/filemanager/__tests__/fetch.test.d.ts +0 -1
  416. package/commands/filemanager/__tests__/fetch.test.js +0 -32
  417. package/commands/filemanager/__tests__/upload.test.d.ts +0 -1
  418. package/commands/filemanager/__tests__/upload.test.js +0 -191
  419. package/commands/hubdb/__tests__/clear.test.d.ts +0 -1
  420. package/commands/hubdb/__tests__/clear.test.js +0 -28
  421. package/commands/hubdb/__tests__/create.test.d.ts +0 -1
  422. package/commands/hubdb/__tests__/create.test.js +0 -28
  423. package/commands/hubdb/__tests__/delete.test.d.ts +0 -1
  424. package/commands/hubdb/__tests__/delete.test.js +0 -28
  425. package/commands/hubdb/__tests__/fetch.test.d.ts +0 -1
  426. package/commands/hubdb/__tests__/fetch.test.js +0 -28
  427. package/commands/hubdb/__tests__/list.test.d.ts +0 -1
  428. package/commands/hubdb/__tests__/list.test.js +0 -88
  429. package/commands/mcp/__tests__/setup.test.d.ts +0 -1
  430. package/commands/mcp/__tests__/setup.test.js +0 -26
  431. package/commands/mcp/__tests__/start.test.d.ts +0 -1
  432. package/commands/mcp/__tests__/start.test.js +0 -137
  433. package/commands/project/__tests__/add.test.d.ts +0 -1
  434. package/commands/project/__tests__/add.test.js +0 -107
  435. package/commands/project/__tests__/create.test.d.ts +0 -1
  436. package/commands/project/__tests__/create.test.js +0 -97
  437. package/commands/project/__tests__/deploy.test.d.ts +0 -1
  438. package/commands/project/__tests__/deploy.test.js +0 -307
  439. package/commands/project/__tests__/dev.test.d.ts +0 -1
  440. package/commands/project/__tests__/dev.test.js +0 -273
  441. package/commands/project/__tests__/devUnifiedFlow.test.d.ts +0 -1
  442. package/commands/project/__tests__/devUnifiedFlow.test.js +0 -434
  443. package/commands/project/__tests__/download.test.d.ts +0 -1
  444. package/commands/project/__tests__/download.test.js +0 -39
  445. package/commands/project/__tests__/installDeps.test.d.ts +0 -1
  446. package/commands/project/__tests__/installDeps.test.js +0 -140
  447. package/commands/project/__tests__/lint.test.d.ts +0 -1
  448. package/commands/project/__tests__/lint.test.js +0 -704
  449. package/commands/project/__tests__/list.test.d.ts +0 -1
  450. package/commands/project/__tests__/list.test.js +0 -31
  451. package/commands/project/__tests__/listBuilds.test.d.ts +0 -1
  452. package/commands/project/__tests__/listBuilds.test.js +0 -38
  453. package/commands/project/__tests__/logs.test.d.ts +0 -1
  454. package/commands/project/__tests__/logs.test.js +0 -202
  455. package/commands/project/__tests__/migrate.test.d.ts +0 -1
  456. package/commands/project/__tests__/migrate.test.js +0 -106
  457. package/commands/project/__tests__/open.test.d.ts +0 -1
  458. package/commands/project/__tests__/open.test.js +0 -39
  459. package/commands/project/__tests__/profile.test.d.ts +0 -1
  460. package/commands/project/__tests__/profile.test.js +0 -42
  461. package/commands/project/__tests__/updateDeps.test.d.ts +0 -1
  462. package/commands/project/__tests__/updateDeps.test.js +0 -140
  463. package/commands/project/__tests__/upload.test.d.ts +0 -1
  464. package/commands/project/__tests__/upload.test.js +0 -234
  465. package/commands/project/__tests__/validate.test.d.ts +0 -1
  466. package/commands/project/__tests__/validate.test.js +0 -381
  467. package/commands/project/__tests__/watch.test.d.ts +0 -1
  468. package/commands/project/__tests__/watch.test.js +0 -35
  469. package/commands/sandbox/__tests__/create.test.d.ts +0 -1
  470. package/commands/sandbox/__tests__/create.test.js +0 -245
  471. package/commands/sandbox/__tests__/delete.test.d.ts +0 -1
  472. package/commands/sandbox/__tests__/delete.test.js +0 -31
  473. package/commands/secret/__tests__/addSecret.test.d.ts +0 -1
  474. package/commands/secret/__tests__/addSecret.test.js +0 -162
  475. package/commands/secret/__tests__/deleteSecret.test.d.ts +0 -1
  476. package/commands/secret/__tests__/deleteSecret.test.js +0 -41
  477. package/commands/secret/__tests__/listSecret.test.d.ts +0 -1
  478. package/commands/secret/__tests__/listSecret.test.js +0 -29
  479. package/commands/secret/__tests__/updateSecret.test.d.ts +0 -1
  480. package/commands/secret/__tests__/updateSecret.test.js +0 -29
  481. package/commands/testAccount/__tests__/create.test.d.ts +0 -1
  482. package/commands/testAccount/__tests__/create.test.js +0 -106
  483. package/commands/testAccount/__tests__/createConfig.test.d.ts +0 -1
  484. package/commands/testAccount/__tests__/createConfig.test.js +0 -32
  485. package/commands/testAccount/__tests__/delete.test.d.ts +0 -1
  486. package/commands/testAccount/__tests__/delete.test.js +0 -29
  487. package/commands/testAccount/__tests__/importData.test.d.ts +0 -1
  488. package/commands/testAccount/__tests__/importData.test.js +0 -92
  489. package/lib/__tests__/CLIWebSocketServer.test.d.ts +0 -1
  490. package/lib/__tests__/CLIWebSocketServer.test.js +0 -252
  491. package/lib/__tests__/accountAuth.test.d.ts +0 -1
  492. package/lib/__tests__/accountAuth.test.js +0 -258
  493. package/lib/__tests__/accountTypes.test.d.ts +0 -1
  494. package/lib/__tests__/accountTypes.test.js +0 -98
  495. package/lib/__tests__/buildAccount.test.d.ts +0 -1
  496. package/lib/__tests__/buildAccount.test.js +0 -262
  497. package/lib/__tests__/cliUpgradeUtils.test.d.ts +0 -1
  498. package/lib/__tests__/cliUpgradeUtils.test.js +0 -131
  499. package/lib/__tests__/commandSuggestion.test.d.ts +0 -1
  500. package/lib/__tests__/commandSuggestion.test.js +0 -119
  501. package/lib/__tests__/commonOpts.test.d.ts +0 -1
  502. package/lib/__tests__/commonOpts.test.js +0 -80
  503. package/lib/__tests__/dependencyManagement.test.d.ts +0 -1
  504. package/lib/__tests__/dependencyManagement.test.js +0 -1067
  505. package/lib/__tests__/developerTestAccounts.test.d.ts +0 -1
  506. package/lib/__tests__/developerTestAccounts.test.js +0 -156
  507. package/lib/__tests__/hasFeature.test.d.ts +0 -1
  508. package/lib/__tests__/hasFeature.test.js +0 -167
  509. package/lib/__tests__/http.test.d.ts +0 -1
  510. package/lib/__tests__/http.test.js +0 -40
  511. package/lib/__tests__/importData.test.d.ts +0 -1
  512. package/lib/__tests__/importData.test.js +0 -98
  513. package/lib/__tests__/npmCli.test.d.ts +0 -1
  514. package/lib/__tests__/npmCli.test.js +0 -84
  515. package/lib/__tests__/oauth.test.d.ts +0 -1
  516. package/lib/__tests__/oauth.test.js +0 -109
  517. package/lib/__tests__/parsing.test.d.ts +0 -1
  518. package/lib/__tests__/parsing.test.js +0 -34
  519. package/lib/__tests__/polling.test.d.ts +0 -1
  520. package/lib/__tests__/polling.test.js +0 -76
  521. package/lib/__tests__/process.test.d.ts +0 -1
  522. package/lib/__tests__/process.test.js +0 -89
  523. package/lib/__tests__/sandboxSync.test.d.ts +0 -1
  524. package/lib/__tests__/sandboxSync.test.js +0 -147
  525. package/lib/__tests__/sandboxes.test.d.ts +0 -1
  526. package/lib/__tests__/sandboxes.test.js +0 -156
  527. package/lib/__tests__/serverlessLogs.test.d.ts +0 -1
  528. package/lib/__tests__/serverlessLogs.test.js +0 -148
  529. package/lib/__tests__/usageTracking.test.d.ts +0 -1
  530. package/lib/__tests__/usageTracking.test.js +0 -197
  531. package/lib/__tests__/validation.test.d.ts +0 -1
  532. package/lib/__tests__/validation.test.js +0 -143
  533. package/lib/__tests__/yargsUtils.test.d.ts +0 -1
  534. package/lib/__tests__/yargsUtils.test.js +0 -124
  535. package/lib/app/__tests__/migrate.test.d.ts +0 -1
  536. package/lib/app/__tests__/migrate.test.js +0 -638
  537. package/lib/doctor/__tests__/Diagnosis.test.d.ts +0 -1
  538. package/lib/doctor/__tests__/Diagnosis.test.js +0 -84
  539. package/lib/doctor/__tests__/DiagnosticInfoBuilder.test.d.ts +0 -1
  540. package/lib/doctor/__tests__/DiagnosticInfoBuilder.test.js +0 -177
  541. package/lib/doctor/__tests__/Doctor.test.d.ts +0 -1
  542. package/lib/doctor/__tests__/Doctor.test.js +0 -560
  543. package/lib/errorHandlers/__tests__/index.test.d.ts +0 -1
  544. package/lib/errorHandlers/__tests__/index.test.js +0 -278
  545. package/lib/mcp/__tests__/setup.test.d.ts +0 -1
  546. package/lib/mcp/__tests__/setup.test.js +0 -194
  547. package/lib/middleware/__tests__/commandTargetingUtils.test.d.ts +0 -1
  548. package/lib/middleware/__tests__/commandTargetingUtils.test.js +0 -99
  549. package/lib/middleware/__tests__/configMiddleware.test.d.ts +0 -1
  550. package/lib/middleware/__tests__/configMiddleware.test.js +0 -118
  551. package/lib/middleware/__tests__/gitMiddleware.test.d.ts +0 -1
  552. package/lib/middleware/__tests__/gitMiddleware.test.js +0 -43
  553. package/lib/middleware/__tests__/requestMiddleware.test.d.ts +0 -1
  554. package/lib/middleware/__tests__/requestMiddleware.test.js +0 -15
  555. package/lib/middleware/__tests__/usageTrackingMiddleware.test.d.ts +0 -1
  556. package/lib/middleware/__tests__/usageTrackingMiddleware.test.js +0 -44
  557. package/lib/middleware/__tests__/yargsChecksMiddleware.test.d.ts +0 -1
  558. package/lib/middleware/__tests__/yargsChecksMiddleware.test.js +0 -39
  559. package/lib/projects/__tests__/AppDevModeInterface.test.d.ts +0 -1
  560. package/lib/projects/__tests__/AppDevModeInterface.test.js +0 -541
  561. package/lib/projects/__tests__/DevServerManager.test.d.ts +0 -1
  562. package/lib/projects/__tests__/DevServerManager.test.js +0 -185
  563. package/lib/projects/__tests__/DevSessionManager.test.d.ts +0 -1
  564. package/lib/projects/__tests__/DevSessionManager.test.js +0 -250
  565. package/lib/projects/__tests__/LocalDevProcess.test.d.ts +0 -1
  566. package/lib/projects/__tests__/LocalDevProcess.test.js +0 -481
  567. package/lib/projects/__tests__/LocalDevWebsocketServer.test.d.ts +0 -1
  568. package/lib/projects/__tests__/LocalDevWebsocketServer.test.js +0 -231
  569. package/lib/projects/__tests__/ProjectLogsManager.test.d.ts +0 -1
  570. package/lib/projects/__tests__/ProjectLogsManager.test.js +0 -302
  571. package/lib/projects/__tests__/UIExtensionsDevModeInterface.test.d.ts +0 -1
  572. package/lib/projects/__tests__/UIExtensionsDevModeInterface.test.js +0 -160
  573. package/lib/projects/__tests__/components.test.d.ts +0 -1
  574. package/lib/projects/__tests__/components.test.js +0 -426
  575. package/lib/projects/__tests__/deploy.test.d.ts +0 -1
  576. package/lib/projects/__tests__/deploy.test.js +0 -231
  577. package/lib/projects/__tests__/localDevProjectHelpers.test.d.ts +0 -1
  578. package/lib/projects/__tests__/localDevProjectHelpers.test.js +0 -120
  579. package/lib/projects/__tests__/platformVersion.test.d.ts +0 -1
  580. package/lib/projects/__tests__/platformVersion.test.js +0 -63
  581. package/lib/projects/__tests__/pollProjectBuildAndDeploy.test.d.ts +0 -1
  582. package/lib/projects/__tests__/pollProjectBuildAndDeploy.test.js +0 -328
  583. package/lib/projects/__tests__/projectProfiles.test.d.ts +0 -1
  584. package/lib/projects/__tests__/projectProfiles.test.js +0 -441
  585. package/lib/projects/__tests__/projects.test.d.ts +0 -1
  586. package/lib/projects/__tests__/projects.test.js +0 -58
  587. package/lib/projects/__tests__/structure.test.d.ts +0 -1
  588. package/lib/projects/__tests__/structure.test.js +0 -210
  589. package/lib/projects/__tests__/uieLinting.test.d.ts +0 -1
  590. package/lib/projects/__tests__/uieLinting.test.js +0 -631
  591. package/lib/projects/__tests__/upload.test.d.ts +0 -1
  592. package/lib/projects/__tests__/upload.test.js +0 -183
  593. package/lib/projects/add/__tests__/legacyAddComponent.test.d.ts +0 -1
  594. package/lib/projects/add/__tests__/legacyAddComponent.test.js +0 -245
  595. package/lib/projects/add/__tests__/v2AddComponent.test.d.ts +0 -1
  596. package/lib/projects/add/__tests__/v2AddComponent.test.js +0 -343
  597. package/lib/projects/create/__tests__/legacy.test.d.ts +0 -1
  598. package/lib/projects/create/__tests__/legacy.test.js +0 -90
  599. package/lib/projects/create/__tests__/v2.test.d.ts +0 -1
  600. package/lib/projects/create/__tests__/v2.test.js +0 -257
  601. package/lib/projects/platformVersion.d.ts +0 -9
  602. package/lib/projects/platformVersion.js +0 -39
  603. package/lib/prompts/__tests__/createDeveloperTestAccountConfigPrompt.test.d.ts +0 -1
  604. package/lib/prompts/__tests__/createDeveloperTestAccountConfigPrompt.test.js +0 -157
  605. package/lib/prompts/__tests__/createFunctionPrompt.test.d.ts +0 -1
  606. package/lib/prompts/__tests__/createFunctionPrompt.test.js +0 -129
  607. package/lib/prompts/__tests__/createModulePrompt.test.d.ts +0 -1
  608. package/lib/prompts/__tests__/createModulePrompt.test.js +0 -187
  609. package/lib/prompts/__tests__/createTemplatePrompt.test.d.ts +0 -1
  610. package/lib/prompts/__tests__/createTemplatePrompt.test.js +0 -102
  611. package/lib/prompts/__tests__/downloadProjectPrompt.test.d.ts +0 -1
  612. package/lib/prompts/__tests__/downloadProjectPrompt.test.js +0 -31
  613. package/lib/prompts/__tests__/projectAddPrompt.test.d.ts +0 -1
  614. package/lib/prompts/__tests__/projectAddPrompt.test.js +0 -143
  615. package/lib/prompts/__tests__/projectsLogsPrompt.test.d.ts +0 -1
  616. package/lib/prompts/__tests__/projectsLogsPrompt.test.js +0 -37
  617. package/lib/prompts/__tests__/selectProjectTemplatePrompt.test.d.ts +0 -1
  618. package/lib/prompts/__tests__/selectProjectTemplatePrompt.test.js +0 -160
  619. package/lib/sandboxSync.d.ts +0 -4
  620. package/lib/sandboxSync.js +0 -102
  621. package/lib/theme/__tests__/migrate.test.d.ts +0 -1
  622. package/lib/theme/__tests__/migrate.test.js +0 -256
  623. package/lib/ui/__tests__/SpinniesManager.test.d.ts +0 -1
  624. package/lib/ui/__tests__/SpinniesManager.test.js +0 -488
  625. package/lib/ui/__tests__/removeAnsiCodes.test.d.ts +0 -1
  626. package/lib/ui/__tests__/removeAnsiCodes.test.js +0 -84
  627. package/mcp-server/tools/cms/__tests__/HsCreateFunctionTool.test.d.ts +0 -1
  628. package/mcp-server/tools/cms/__tests__/HsCreateFunctionTool.test.js +0 -255
  629. package/mcp-server/tools/cms/__tests__/HsCreateModuleTool.test.d.ts +0 -1
  630. package/mcp-server/tools/cms/__tests__/HsCreateModuleTool.test.js +0 -228
  631. package/mcp-server/tools/cms/__tests__/HsCreateTemplateTool.test.d.ts +0 -1
  632. package/mcp-server/tools/cms/__tests__/HsCreateTemplateTool.test.js +0 -209
  633. package/mcp-server/tools/cms/__tests__/HsFunctionLogsTool.test.d.ts +0 -1
  634. package/mcp-server/tools/cms/__tests__/HsFunctionLogsTool.test.js +0 -187
  635. package/mcp-server/tools/cms/__tests__/HsListFunctionsTool.test.d.ts +0 -1
  636. package/mcp-server/tools/cms/__tests__/HsListFunctionsTool.test.js +0 -125
  637. package/mcp-server/tools/cms/__tests__/HsListTool.test.d.ts +0 -1
  638. package/mcp-server/tools/cms/__tests__/HsListTool.test.js +0 -125
  639. package/mcp-server/tools/project/__tests__/AddFeatureToProjectTool.test.d.ts +0 -1
  640. package/mcp-server/tools/project/__tests__/AddFeatureToProjectTool.test.js +0 -158
  641. package/mcp-server/tools/project/__tests__/CreateProjectTool.test.d.ts +0 -1
  642. package/mcp-server/tools/project/__tests__/CreateProjectTool.test.js +0 -133
  643. package/mcp-server/tools/project/__tests__/CreateTestAccountTool.test.d.ts +0 -1
  644. package/mcp-server/tools/project/__tests__/CreateTestAccountTool.test.js +0 -462
  645. package/mcp-server/tools/project/__tests__/DeployProjectTool.test.d.ts +0 -1
  646. package/mcp-server/tools/project/__tests__/DeployProjectTool.test.js +0 -126
  647. package/mcp-server/tools/project/__tests__/DocFetchTool.test.d.ts +0 -1
  648. package/mcp-server/tools/project/__tests__/DocFetchTool.test.js +0 -125
  649. package/mcp-server/tools/project/__tests__/DocsSearchTool.test.d.ts +0 -1
  650. package/mcp-server/tools/project/__tests__/DocsSearchTool.test.js +0 -210
  651. package/mcp-server/tools/project/__tests__/GetApiUsagePatternsByAppIdTool.test.d.ts +0 -1
  652. package/mcp-server/tools/project/__tests__/GetApiUsagePatternsByAppIdTool.test.js +0 -178
  653. package/mcp-server/tools/project/__tests__/GetApplicationInfoTool.test.d.ts +0 -1
  654. package/mcp-server/tools/project/__tests__/GetApplicationInfoTool.test.js +0 -124
  655. package/mcp-server/tools/project/__tests__/GetBuildLogsTool.test.d.ts +0 -1
  656. package/mcp-server/tools/project/__tests__/GetBuildLogsTool.test.js +0 -307
  657. package/mcp-server/tools/project/__tests__/GetBuildStatusTool.test.d.ts +0 -1
  658. package/mcp-server/tools/project/__tests__/GetBuildStatusTool.test.js +0 -242
  659. package/mcp-server/tools/project/__tests__/GetConfigValuesTool.test.d.ts +0 -1
  660. package/mcp-server/tools/project/__tests__/GetConfigValuesTool.test.js +0 -209
  661. package/mcp-server/tools/project/__tests__/GuidedWalkthroughTool.test.d.ts +0 -1
  662. package/mcp-server/tools/project/__tests__/GuidedWalkthroughTool.test.js +0 -158
  663. package/mcp-server/tools/project/__tests__/UploadProjectTools.test.d.ts +0 -1
  664. package/mcp-server/tools/project/__tests__/UploadProjectTools.test.js +0 -179
  665. package/mcp-server/tools/project/__tests__/ValidateProjectTool.test.d.ts +0 -1
  666. package/mcp-server/tools/project/__tests__/ValidateProjectTool.test.js +0 -118
  667. package/mcp-server/utils/__tests__/command.test.d.ts +0 -1
  668. package/mcp-server/utils/__tests__/command.test.js +0 -45
  669. package/mcp-server/utils/__tests__/content.test.d.ts +0 -1
  670. package/mcp-server/utils/__tests__/content.test.js +0 -164
  671. package/mcp-server/utils/__tests__/feedbackTracking.test.d.ts +0 -1
  672. package/mcp-server/utils/__tests__/feedbackTracking.test.js +0 -124
  673. package/mcp-server/utils/__tests__/project.test.d.ts +0 -1
  674. package/mcp-server/utils/__tests__/project.test.js +0 -140
  675. package/mcp-server/utils/project.d.ts +0 -5
  676. package/mcp-server/utils/project.js +0 -18
@@ -0,0 +1,185 @@
1
+ import { getAllConfigAccounts, getConfigDefaultAccountIfExists, } from '@hubspot/local-dev-lib/config';
2
+ import { confirmPrompt } from '../prompts/promptUtils.js';
3
+ import { promptForAccountsToLink, promptForAccountsToUnlink, promptForAction, promptForDefaultAccount, } from './prompts.js';
4
+ import { ACTION_RESULT_STATUS, } from '../../types/Link.js';
5
+ import { getDefaultAccountOverrideFilePath, removeDefaultAccountOverrideFile, } from '@hubspot/local-dev-lib/config/defaultAccountOverride';
6
+ import { ENVIRONMENTS } from '@hubspot/local-dev-lib/constants/environments';
7
+ import { authenticateNewAccount } from '../accountAuth.js';
8
+ import { commands } from '../../lang/en.js';
9
+ import { uiLogger } from '../ui/logger.js';
10
+ export class ActionHandlers {
11
+ static async link({ state, context, }) {
12
+ const { eligibleAccounts, inEligibleAccounts } = context.globalAccountsList.reduce((accumulator, account) => {
13
+ if (state.accounts.includes(account.accountId)) {
14
+ accumulator.inEligibleAccounts.push(account);
15
+ }
16
+ else {
17
+ accumulator.eligibleAccounts.push(account);
18
+ }
19
+ return accumulator;
20
+ }, { eligibleAccounts: [], inEligibleAccounts: [] });
21
+ const toAdd = await promptForAccountsToLink(context, eligibleAccounts, inEligibleAccounts, state.localDefaultAccount);
22
+ const accounts = [...state.accounts, ...toAdd];
23
+ uiLogger.info(commands.account.subcommands.link.events.accountsLinked(toAdd.length));
24
+ const overrideFilePath = getDefaultAccountOverrideFilePath();
25
+ if (overrideFilePath &&
26
+ context.accountOverrideId &&
27
+ accounts.includes(context.accountOverrideId)) {
28
+ uiLogger.log(commands.account.subcommands.link.events.overrideAccountDetected(context.accountOverrideId));
29
+ uiLogger.log('');
30
+ const useOverride = await confirmPrompt(commands.account.subcommands.link.prompts.keepAsDefault);
31
+ removeDefaultAccountOverrideFile();
32
+ uiLogger.success(commands.account.subcommands.link.events.overrideFileRemoved);
33
+ if (useOverride) {
34
+ uiLogger.success(commands.account.subcommands.link.events.defaultAccountSet(context.accountOverrideId));
35
+ return {
36
+ status: ACTION_RESULT_STATUS.SUCCESS,
37
+ settings: {
38
+ accounts,
39
+ localDefaultAccount: context.accountOverrideId,
40
+ },
41
+ };
42
+ }
43
+ }
44
+ const localDefaultAccount = await resolveDefaultAccount({
45
+ accounts,
46
+ currentDefault: state.localDefaultAccount,
47
+ });
48
+ return {
49
+ status: ACTION_RESULT_STATUS.SUCCESS,
50
+ settings: { accounts, localDefaultAccount },
51
+ };
52
+ }
53
+ static async unlink({ state }) {
54
+ const toRemove = await promptForAccountsToUnlink(state.accounts, state.localDefaultAccount);
55
+ if (toRemove.length === 0) {
56
+ return { status: ACTION_RESULT_STATUS.NOOP };
57
+ }
58
+ const remainingAccounts = state.accounts.filter(account => !toRemove.includes(account));
59
+ const defaultWasRemoved = state.localDefaultAccount !== undefined &&
60
+ toRemove.includes(state.localDefaultAccount);
61
+ // All accounts removed
62
+ if (remainingAccounts.length === 0) {
63
+ uiLogger.success(commands.account.subcommands.link.events.noAccountsLinked);
64
+ return {
65
+ status: ACTION_RESULT_STATUS.SUCCESS,
66
+ settings: {
67
+ accounts: remainingAccounts,
68
+ localDefaultAccount: undefined,
69
+ },
70
+ };
71
+ }
72
+ // Default was NOT removed — accounts remain, default unchanged
73
+ if (!defaultWasRemoved) {
74
+ uiLogger.success(commands.account.subcommands.link.events.accountsUnlinked(toRemove.length));
75
+ uiLogger.success(commands.account.subcommands.link.events.defaultAccountRemains(state.localDefaultAccount));
76
+ return {
77
+ status: ACTION_RESULT_STATUS.SUCCESS,
78
+ settings: {
79
+ accounts: remainingAccounts,
80
+ localDefaultAccount: state.localDefaultAccount,
81
+ },
82
+ };
83
+ }
84
+ // Default WAS removed — need a new default
85
+ uiLogger.warn(commands.account.subcommands.link.events.defaultAccountRemoved(remainingAccounts.length !== 1));
86
+ const localDefaultAccount = await resolveDefaultAccount({
87
+ accounts: remainingAccounts,
88
+ currentDefault: undefined,
89
+ });
90
+ if (remainingAccounts.length === 1) {
91
+ uiLogger.success(commands.account.subcommands.link.events.updatedLinkedAccounts);
92
+ }
93
+ return {
94
+ status: ACTION_RESULT_STATUS.SUCCESS,
95
+ settings: { accounts: remainingAccounts, localDefaultAccount },
96
+ };
97
+ }
98
+ static async authenticate({ state, context, args, }) {
99
+ const updatedConfig = await authenticateNewAccount({
100
+ env: args.qa ? ENVIRONMENTS.QA : ENVIRONMENTS.PROD,
101
+ setAsDefaultAccount: false,
102
+ });
103
+ if (!updatedConfig) {
104
+ return {
105
+ status: ACTION_RESULT_STATUS.ERROR,
106
+ reason: commands.account.subcommands.link.errors.authFailed,
107
+ };
108
+ }
109
+ const updatedContext = {
110
+ globalAccountsList: getAllConfigAccounts(),
111
+ globalDefaultAccount: getConfigDefaultAccountIfExists(),
112
+ accountOverrideId: context.accountOverrideId,
113
+ preselectedAccountId: updatedConfig.accountId,
114
+ };
115
+ return ActionHandlers.link({ state, context: updatedContext, args });
116
+ }
117
+ static async cancel() {
118
+ return {
119
+ status: ACTION_RESULT_STATUS.NOOP,
120
+ };
121
+ }
122
+ }
123
+ export async function handleLinkFlow({ settings, accountOverrideId, args, }) {
124
+ const context = {
125
+ globalAccountsList: getAllConfigAccounts(),
126
+ globalDefaultAccount: getConfigDefaultAccountIfExists(),
127
+ accountOverrideId,
128
+ };
129
+ const accounts = settings.accounts ?? [];
130
+ // The default account must be one of the linked accounts. This can get
131
+ // out of sync if the settings file is manually edited.
132
+ const hasInvalidDefault = settings.localDefaultAccount !== undefined &&
133
+ !accounts.includes(settings.localDefaultAccount);
134
+ if (hasInvalidDefault) {
135
+ uiLogger.warn(commands.account.subcommands.link.events.invalidDefaultAccount(settings.localDefaultAccount));
136
+ }
137
+ const initialState = {
138
+ localDefaultAccount: hasInvalidDefault
139
+ ? undefined
140
+ : settings.localDefaultAccount,
141
+ accounts,
142
+ };
143
+ return runAction(initialState, context, args);
144
+ }
145
+ async function runAction(state, context, args) {
146
+ const action = await promptForAction(state);
147
+ return ActionHandlers[action]({ state, context, args });
148
+ }
149
+ async function resolveDefaultAccount({ accounts, currentDefault, prompt = '', }) {
150
+ if (accounts.length === 1) {
151
+ uiLogger.success(commands.account.subcommands.link.events.defaultAccountSet(accounts[0]));
152
+ return accounts[0];
153
+ }
154
+ return promptForDefaultAccount(accounts, currentDefault, prompt);
155
+ }
156
+ export async function handleLinkedUseAction({ state, targetAccountId, }) {
157
+ if (targetAccountId !== undefined) {
158
+ if (state.accounts.includes(targetAccountId)) {
159
+ uiLogger.success(commands.account.subcommands.link.events.defaultAccountSet(targetAccountId));
160
+ return {
161
+ status: ACTION_RESULT_STATUS.SUCCESS,
162
+ settings: {
163
+ accounts: state.accounts,
164
+ localDefaultAccount: targetAccountId,
165
+ },
166
+ };
167
+ }
168
+ const accounts = [...state.accounts, targetAccountId];
169
+ uiLogger.info(commands.account.subcommands.link.events.accountsLinked(1));
170
+ uiLogger.success(commands.account.subcommands.link.events.defaultAccountSet(targetAccountId));
171
+ return {
172
+ status: ACTION_RESULT_STATUS.SUCCESS,
173
+ settings: { accounts, localDefaultAccount: targetAccountId },
174
+ };
175
+ }
176
+ const localDefaultAccount = await resolveDefaultAccount({
177
+ accounts: state.accounts,
178
+ currentDefault: state.localDefaultAccount,
179
+ });
180
+ uiLogger.success(commands.account.subcommands.link.events.defaultAccountSet(localDefaultAccount));
181
+ return {
182
+ status: ACTION_RESULT_STATUS.SUCCESS,
183
+ settings: { accounts: state.accounts, localDefaultAccount },
184
+ };
185
+ }
@@ -0,0 +1,5 @@
1
+ import { HsSettingsFile } from '@hubspot/local-dev-lib/types/HsSettings';
2
+ export declare function isDirectoryLinked(settings: HsSettingsFile | null): settings is HsSettingsFile;
3
+ export declare function hasDeprecatedConfigConflict(commandArgs: (string | number)[]): boolean;
4
+ export declare function addAccountToLinkedSettings(accountId: number): void;
5
+ export declare function writeLinkedSettings(settings: HsSettingsFile, settingsPath: string): boolean;
@@ -0,0 +1,49 @@
1
+ import { localConfigFileExists } from '@hubspot/local-dev-lib/config';
2
+ import { getHsSettingsFileIfExists, writeHsSettingsFile, } from '@hubspot/local-dev-lib/config/hsSettings';
3
+ import { uiLogger } from '../ui/logger.js';
4
+ import { debugError } from '../errorHandlers/index.js';
5
+ import { commands } from '../../lang/en.js';
6
+ export function isDirectoryLinked(settings) {
7
+ return settings !== null && settings.accounts.length > 0;
8
+ }
9
+ export function hasDeprecatedConfigConflict(commandArgs) {
10
+ if (localConfigFileExists()) {
11
+ uiLogger.error(commands.account.subcommands.link.shared.deprecatedConfigNotSupported(`hs ${commandArgs.join(' ')}`));
12
+ return true;
13
+ }
14
+ return false;
15
+ }
16
+ export function addAccountToLinkedSettings(accountId) {
17
+ if (localConfigFileExists()) {
18
+ return;
19
+ }
20
+ const settings = getHsSettingsFileIfExists();
21
+ if (!settings || settings.accounts.length === 0) {
22
+ return;
23
+ }
24
+ if (settings.accounts.includes(accountId)) {
25
+ return;
26
+ }
27
+ const updated = {
28
+ ...settings,
29
+ accounts: [...settings.accounts, accountId],
30
+ };
31
+ try {
32
+ writeHsSettingsFile(updated);
33
+ uiLogger.info(commands.account.subcommands.link.shared.accountAutoLinked(accountId));
34
+ }
35
+ catch (err) {
36
+ uiLogger.warn(commands.account.subcommands.link.shared.accountAutoLinkFailed(accountId));
37
+ debugError(err);
38
+ }
39
+ }
40
+ export function writeLinkedSettings(settings, settingsPath) {
41
+ try {
42
+ writeHsSettingsFile(settings);
43
+ return true;
44
+ }
45
+ catch (err) {
46
+ uiLogger.error(commands.account.subcommands.link.shared.writeSettingsFailed(settingsPath, err));
47
+ return false;
48
+ }
49
+ }
@@ -0,0 +1,7 @@
1
+ import { HubSpotConfigAccount } from '@hubspot/local-dev-lib/types/Accounts';
2
+ import { ActionName, LinkContext } from '../../types/Link.js';
3
+ import { HsSettingsFile } from '@hubspot/local-dev-lib/types/HsSettings';
4
+ export declare function promptForAction(state: HsSettingsFile): Promise<ActionName>;
5
+ export declare function promptForDefaultAccount(accounts: number[], currentDefaultAccount: number | undefined, prompt?: string): Promise<number>;
6
+ export declare function promptForAccountsToLink(context: LinkContext, eligibleAccounts: HubSpotConfigAccount[], inEligibleAccounts: HubSpotConfigAccount[], localDefaultAccount: number | undefined): Promise<number[]>;
7
+ export declare function promptForAccountsToUnlink(accounts: number[], localDefaultAccount: number | undefined): Promise<number[]>;
@@ -0,0 +1,126 @@
1
+ import { promptUser } from '../prompts/promptUtils.js';
2
+ import { uiAccountDescription } from '../ui/index.js';
3
+ import { uiLogger } from '../ui/logger.js';
4
+ import { commands } from '../../lang/en.js';
5
+ import { buildAccountRow, getNameColumnWidth, buildAccountHeader, sortDefaultFirst, } from './accountTableUtils.js';
6
+ import { Separator } from '@inquirer/prompts';
7
+ function buildColumnarChoices(accounts, localDefaultAccount) {
8
+ const rows = accounts.map(a => ({
9
+ ...buildAccountRow(a.accountId, a.accountId === localDefaultAccount),
10
+ disabled: a.disabled,
11
+ checked: a.checked,
12
+ hint: a.hint,
13
+ }));
14
+ const nameWidth = getNameColumnWidth(rows);
15
+ const header = buildAccountHeader(nameWidth);
16
+ return [
17
+ new Separator(header),
18
+ ...rows.map(row => {
19
+ const label = `${row.name.padEnd(nameWidth)} ${row.accountId}`;
20
+ return {
21
+ name: row.hint ? `${label} ${row.hint}` : label,
22
+ short: uiAccountDescription(Number(row.accountId), false),
23
+ value: Number(row.accountId),
24
+ disabled: row.disabled,
25
+ checked: row.checked,
26
+ };
27
+ }),
28
+ ];
29
+ }
30
+ function mapLinkAccountChoices(eligibleAccounts, inEligibleAccounts, accountOverrideId, localDefaultAccount, preselectedAccountId) {
31
+ const sortedIneligible = sortDefaultFirst(inEligibleAccounts, localDefaultAccount);
32
+ const accounts = [
33
+ ...eligibleAccounts.map(a => ({
34
+ accountId: a.accountId,
35
+ disabled: false,
36
+ checked: a.accountId === accountOverrideId ||
37
+ a.accountId === preselectedAccountId,
38
+ hint: a.accountId === accountOverrideId
39
+ ? commands.account.subcommands.link.prompts.fromHsAccount
40
+ : a.accountId === preselectedAccountId
41
+ ? commands.account.subcommands.link.prompts.newlyAuthenticated
42
+ : undefined,
43
+ })),
44
+ ...sortedIneligible.map(a => ({
45
+ accountId: a.accountId,
46
+ disabled: commands.account.subcommands.link.prompts.alreadyLinked,
47
+ checked: false,
48
+ })),
49
+ ];
50
+ return buildColumnarChoices(accounts, localDefaultAccount);
51
+ }
52
+ export async function promptForAction(state) {
53
+ const isSettingsEmpty = state.accounts.length === 0 && state.localDefaultAccount === undefined;
54
+ const { accountEditOption } = await promptUser({
55
+ type: 'list',
56
+ name: 'accountEditOption',
57
+ message: isSettingsEmpty
58
+ ? commands.account.subcommands.link.prompts.howToProceed
59
+ : commands.account.subcommands.link.prompts.whatToDo,
60
+ choices: [
61
+ {
62
+ name: commands.account.subcommands.link.prompts.linkExisting,
63
+ value: 'link',
64
+ },
65
+ {
66
+ name: commands.account.subcommands.link.prompts.authenticateNew,
67
+ value: 'authenticate',
68
+ },
69
+ {
70
+ name: commands.account.subcommands.link.prompts.cancel,
71
+ value: 'cancel',
72
+ },
73
+ ],
74
+ });
75
+ uiLogger.log('');
76
+ return accountEditOption;
77
+ }
78
+ export async function promptForDefaultAccount(accounts, currentDefaultAccount, prompt = '') {
79
+ const choiceAccounts = accounts.map(accountId => ({
80
+ accountId,
81
+ }));
82
+ const choices = buildColumnarChoices(choiceAccounts, currentDefaultAccount);
83
+ const { defaultAccount } = await promptUser({
84
+ type: 'list',
85
+ name: 'defaultAccount',
86
+ pageSize: 20,
87
+ message: prompt || commands.account.subcommands.link.prompts.selectDefault,
88
+ choices,
89
+ default: currentDefaultAccount ?? undefined,
90
+ });
91
+ uiLogger.log('');
92
+ return defaultAccount;
93
+ }
94
+ export async function promptForAccountsToLink(context, eligibleAccounts, inEligibleAccounts, localDefaultAccount) {
95
+ const { accountsToAdd } = await promptUser({
96
+ type: 'checkbox',
97
+ name: 'accountsToAdd',
98
+ pageSize: 20,
99
+ message: commands.account.subcommands.link.prompts.selectToLink,
100
+ choices: mapLinkAccountChoices(eligibleAccounts, inEligibleAccounts, context.accountOverrideId, localDefaultAccount, context.preselectedAccountId),
101
+ validate: (answer) => {
102
+ if (answer.length === 0) {
103
+ return commands.account.subcommands.link.prompts.mustSelectOne;
104
+ }
105
+ return true;
106
+ },
107
+ });
108
+ uiLogger.log('');
109
+ return accountsToAdd;
110
+ }
111
+ export async function promptForAccountsToUnlink(accounts, localDefaultAccount) {
112
+ const sortedAccounts = sortDefaultFirst(accounts, localDefaultAccount);
113
+ const choiceAccounts = sortedAccounts.map(accountId => ({
114
+ accountId,
115
+ }));
116
+ const choices = buildColumnarChoices(choiceAccounts, localDefaultAccount);
117
+ const { accountsToRemove } = await promptUser({
118
+ type: 'checkbox',
119
+ name: 'accountsToRemove',
120
+ pageSize: 20,
121
+ message: commands.account.subcommands.link.prompts.selectToUnlink,
122
+ choices,
123
+ });
124
+ uiLogger.log('');
125
+ return accountsToRemove;
126
+ }
@@ -0,0 +1,2 @@
1
+ import { HsSettingsFile } from '@hubspot/local-dev-lib/types/HsSettings';
2
+ export declare function renderLinkedAccountsTable(settings: HsSettingsFile): Promise<void>;
@@ -0,0 +1,14 @@
1
+ import { commands } from '../../lang/en.js';
2
+ import { renderTable } from '../../ui/render.js';
3
+ import { buildAccountRow, sortDefaultFirst } from './accountTableUtils.js';
4
+ export async function renderLinkedAccountsTable(settings) {
5
+ const labels = commands.account.subcommands.list.labels;
6
+ const tableHeader = [labels.name, labels.accountId];
7
+ const sortedAccounts = sortDefaultFirst(settings.accounts, settings.localDefaultAccount);
8
+ const tableData = sortedAccounts.map(accountId => {
9
+ const isDefault = accountId === settings.localDefaultAccount;
10
+ const row = buildAccountRow(accountId, isDefault);
11
+ return [row.name, row.accountId];
12
+ });
13
+ await renderTable(tableHeader, tableData, true);
14
+ }
@@ -0,0 +1 @@
1
+ export declare function warnIfLinkedDirectory(args: (string | number)[]): void;
@@ -0,0 +1,9 @@
1
+ import { getHsSettingsFilePath } from '@hubspot/local-dev-lib/config/hsSettings';
2
+ import { uiLogger } from '../ui/logger.js';
3
+ import { lib } from '../../lang/en.js';
4
+ export function warnIfLinkedDirectory(args) {
5
+ if (getHsSettingsFilePath() === null) {
6
+ return;
7
+ }
8
+ uiLogger.warn(lib.linkedDirectory.warning(`hs ${args.join(' ')}`, getHsSettingsFilePath()));
9
+ }
@@ -5,6 +5,7 @@ export declare const supportedTools: {
5
5
  interface McpCommand {
6
6
  command: string;
7
7
  args: string[];
8
+ env?: Record<string, string>;
8
9
  }
9
10
  export declare function addMcpServerToConfig(targets: string[] | undefined): Promise<string[]>;
10
11
  export declare function setupVsCode(mcpCommand?: McpCommand): Promise<boolean>;
package/lib/mcp/setup.js CHANGED
@@ -47,23 +47,56 @@ export async function addMcpServerToConfig(targets) {
47
47
  else {
48
48
  derivedTargets = targets;
49
49
  }
50
+ // Prompt for standalone mode
51
+ const { useStandaloneMode } = await promptUser({
52
+ name: 'useStandaloneMode',
53
+ type: 'confirm',
54
+ message: commands.mcp.setup.prompts.standaloneMode,
55
+ default: false,
56
+ });
57
+ const { cliVersion } = useStandaloneMode
58
+ ? await promptUser({
59
+ name: 'cliVersion',
60
+ type: 'input',
61
+ message: commands.mcp.setup.prompts.cliVersion,
62
+ validate: (v) => !v || /^[\d]+\.[\d]+\.[\d]+([-+][\w.]+)?$/.test(v.trim())
63
+ ? true
64
+ : 'Please enter a valid semver version (e.g. 8.0.1) or leave blank for latest.',
65
+ })
66
+ : { cliVersion: '' };
67
+ const cliPackage = cliVersion
68
+ ? `@hubspot/cli@${cliVersion}`
69
+ : '@hubspot/cli';
70
+ const standaloneEnv = {
71
+ HUBSPOT_MCP_STANDALONE: 'true',
72
+ };
73
+ if (cliVersion) {
74
+ standaloneEnv.HUBSPOT_CLI_VERSION = cliVersion;
75
+ }
76
+ const mcpCommand = useStandaloneMode
77
+ ? {
78
+ command: 'npx',
79
+ args: ['-y', '-p', cliPackage, 'hs', 'mcp', 'start'],
80
+ env: standaloneEnv,
81
+ }
82
+ : defaultMcpCommand;
50
83
  if (derivedTargets.includes(claudeCode)) {
51
- await runSetupFunction(setupClaudeCode);
84
+ await runSetupFunction(() => setupClaudeCode(mcpCommand));
52
85
  }
53
86
  if (derivedTargets.includes(cursor)) {
54
- await runSetupFunction(setupCursor);
87
+ await runSetupFunction(() => setupCursor(mcpCommand));
55
88
  }
56
89
  if (derivedTargets.includes(windsurf)) {
57
- await runSetupFunction(setupWindsurf);
90
+ await runSetupFunction(() => setupWindsurf(mcpCommand));
58
91
  }
59
92
  if (derivedTargets.includes(vscode)) {
60
- await runSetupFunction(setupVsCode);
93
+ await runSetupFunction(() => setupVsCode(mcpCommand));
61
94
  }
62
95
  if (derivedTargets.includes(codex)) {
63
- await runSetupFunction(setupCodex);
96
+ await runSetupFunction(() => setupCodex(mcpCommand));
64
97
  }
65
98
  if (derivedTargets.includes(gemini)) {
66
- await runSetupFunction(setupGemini);
99
+ await runSetupFunction(() => setupGemini(mcpCommand));
67
100
  }
68
101
  uiLogger.info(commands.mcp.setup.success(derivedTargets));
69
102
  return derivedTargets;
@@ -121,10 +154,7 @@ function setupMcpConfigFile(config) {
121
154
  if (!mcpConfig.mcpServers) {
122
155
  mcpConfig.mcpServers = {};
123
156
  }
124
- // Add or update HubSpot CLI MCP server
125
- mcpConfig.mcpServers[mcpServerName] = {
126
- ...config.mcpCommand,
127
- };
157
+ mcpConfig.mcpServers[mcpServerName] = config.mcpCommand;
128
158
  // Write the updated config
129
159
  fs.writeFileSync(config.configPath, JSON.stringify(mcpConfig, null, 2));
130
160
  SpinniesManager.succeed('spinner', {
@@ -145,10 +175,12 @@ export async function setupVsCode(mcpCommand = defaultMcpCommand) {
145
175
  SpinniesManager.add('vsCode', {
146
176
  text: commands.mcp.setup.spinners.configuringVsCode,
147
177
  });
148
- const mcpConfig = JSON.stringify({
178
+ const commandWithAgent = buildCommandWithAgentString(mcpCommand, vscode);
179
+ const configObject = {
149
180
  name: mcpServerName,
150
- ...buildCommandWithAgentString(mcpCommand, vscode),
151
- });
181
+ ...commandWithAgent,
182
+ };
183
+ const mcpConfig = JSON.stringify(configObject);
152
184
  await execAsync(`code --add-mcp ${JSON.stringify(mcpConfig)}`);
153
185
  SpinniesManager.succeed('vsCode', {
154
186
  text: commands.mcp.setup.spinners.configuredVsCode,
@@ -172,25 +204,27 @@ export async function setupVsCode(mcpCommand = defaultMcpCommand) {
172
204
  }
173
205
  }
174
206
  export async function setupClaudeCode(mcpCommand = defaultMcpCommand) {
207
+ SpinniesManager.add('claudeCode', {
208
+ text: commands.mcp.setup.spinners.configuringClaudeCode,
209
+ });
175
210
  try {
176
- SpinniesManager.add('claudeCode', {
177
- text: commands.mcp.setup.spinners.configuringClaudeCode,
211
+ // Check if claude command is available
212
+ await execAsync('claude --version');
213
+ }
214
+ catch (e) {
215
+ SpinniesManager.fail('claudeCode', {
216
+ text: commands.mcp.setup.spinners.claudeCodeNotFound,
178
217
  });
179
- try {
180
- // Check if claude command is available
181
- await execAsync('claude --version');
182
- }
183
- catch (e) {
184
- SpinniesManager.fail('claudeCode', {
185
- text: commands.mcp.setup.spinners.claudeCodeNotFound,
186
- });
187
- return false;
188
- }
218
+ return false;
219
+ }
220
+ try {
189
221
  // Run claude mcp add command
190
- const mcpConfig = JSON.stringify({
222
+ const commandWithAgent = buildCommandWithAgentString(mcpCommand, claudeCode);
223
+ const configObject = {
191
224
  type: 'stdio',
192
- ...buildCommandWithAgentString(mcpCommand, claudeCode),
193
- });
225
+ ...commandWithAgent,
226
+ };
227
+ const mcpConfig = JSON.stringify(configObject);
194
228
  const { stdout } = await execAsync('claude mcp list');
195
229
  if (stdout.includes(mcpServerName)) {
196
230
  SpinniesManager.update('claudeCode', {
@@ -248,7 +282,7 @@ export async function setupCodex(mcpCommand = defaultMcpCommand) {
248
282
  return false;
249
283
  }
250
284
  const mcpCommandWithAgent = buildCommandWithAgentString(mcpCommand, codex);
251
- await execAsync(`codex mcp add "${mcpServerName}" -- ${mcpCommandWithAgent.command} ${mcpCommandWithAgent.args.join(' ')}`);
285
+ await execAsync(`codex mcp add "${mcpServerName}"${buildEnvFlagString(mcpCommand)} -- ${mcpCommandWithAgent.command} ${mcpCommandWithAgent.args.join(' ')}`);
252
286
  SpinniesManager.succeed('codexSpinner', {
253
287
  text: commands.mcp.setup.spinners.configuredCodex,
254
288
  });
@@ -277,7 +311,7 @@ export async function setupGemini(mcpCommand = defaultMcpCommand) {
277
311
  return false;
278
312
  }
279
313
  const mcpCommandWithAgent = buildCommandWithAgentString(mcpCommand, gemini);
280
- await execAsync(`gemini mcp add -s user "${mcpServerName}" ${mcpCommandWithAgent.command} ${mcpCommandWithAgent.args.join(' ')}`);
314
+ await execAsync(`gemini mcp add -s user${buildEnvFlagString(mcpCommand)} "${mcpServerName}" ${mcpCommandWithAgent.command} ${mcpCommandWithAgent.args.join(' ')}`);
281
315
  SpinniesManager.succeed('geminiSpinner', {
282
316
  text: commands.mcp.setup.spinners.configuredGemini,
283
317
  });
@@ -296,3 +330,16 @@ function buildCommandWithAgentString(mcpCommand, agent) {
296
330
  mcpCommandCopy.args.push('--ai-agent', agent);
297
331
  return mcpCommandCopy;
298
332
  }
333
+ function buildEnvFlagString(mcpCommand) {
334
+ const envFlags = [];
335
+ if (mcpCommand.env) {
336
+ const env = Object.entries(mcpCommand.env);
337
+ env.forEach(([key, value]) => {
338
+ envFlags.push(`--env ${key}="${value}"`);
339
+ });
340
+ }
341
+ if (envFlags.length === 0) {
342
+ return '';
343
+ }
344
+ return ` ${envFlags.join(' ')}`;
345
+ }
@@ -42,6 +42,10 @@ export async function autoUpdateCLI(argv) {
42
42
  debugError(e);
43
43
  }
44
44
  const cliUpgradeInfo = getCliUpgradeInfo();
45
+ // Ignore all update notifications if the current version is a pre-release (contains a hyphen)
46
+ if (cliUpgradeInfo.current && cliUpgradeInfo.current.includes('-')) {
47
+ showManualInstallHelp = false;
48
+ }
45
49
  if (isAllowAutoUpdatesEnabled &&
46
50
  cliUpgradeInfo.current &&
47
51
  cliUpgradeInfo.latest &&
@@ -49,9 +53,8 @@ export async function autoUpdateCLI(argv) {
49
53
  !argv.useEnv &&
50
54
  !process.env.SKIP_HUBSPOT_CLI_AUTO_UPDATES &&
51
55
  !preventAutoUpdateForCommand(argv._)) {
52
- // Ignore all update notifications if the current version is a pre-release (contains a hyphen)
53
- if (cliUpgradeInfo.current.includes('-')) {
54
- showManualInstallHelp = false;
56
+ if (!showManualInstallHelp) {
57
+ // Pre-release version detected, skip auto-update
55
58
  }
56
59
  else if (!['major', 'latest'].includes(cliUpgradeInfo.type)) {
57
60
  // type "latest" => current installed version is latest
package/lib/process.d.ts CHANGED
@@ -8,6 +8,6 @@ interface KeyPress {
8
8
  export declare const TERMINATION_SIGNALS: string[];
9
9
  export declare function handleExit(callback: (onTerminate: {
10
10
  isSIGHUP: boolean;
11
- }) => void): void;
11
+ }) => void): () => void;
12
12
  export declare function handleKeypress(callback: (onKeyPress: KeyPress) => void): void;
13
13
  export {};
package/lib/process.js CHANGED
@@ -16,9 +16,9 @@ export const TERMINATION_SIGNALS = [
16
16
  ];
17
17
  export function handleExit(callback) {
18
18
  let exitInProgress = false;
19
+ const listeners = [];
19
20
  TERMINATION_SIGNALS.forEach(signal => {
20
- process.removeAllListeners(signal);
21
- process.on(signal, async (...args) => {
21
+ const handler = async (...args) => {
22
22
  // Prevent duplicate exit handling
23
23
  if (!exitInProgress) {
24
24
  exitInProgress = true;
@@ -38,8 +38,15 @@ export function handleExit(callback) {
38
38
  }
39
39
  await callback({ isSIGHUP });
40
40
  }
41
- });
41
+ };
42
+ listeners.push({ signal, handler });
43
+ process.on(signal, handler);
42
44
  });
45
+ return () => {
46
+ for (const { signal, handler } of listeners) {
47
+ process.removeListener(signal, handler);
48
+ }
49
+ };
43
50
  }
44
51
  export function handleKeypress(callback) {
45
52
  readline.createInterface(process.stdin, process.stdout);